Lucky から Gately へ移行する
Gately は独立したプロジェクトであり、Lucky とは一切関係がありません。互換性は公開されている観察可能な形式に基づいています。
Gately は Lucky の .lkcf 設定ファイル、または Lucky の「設定のバックアップ」でエクスポートしたサイト全体の zip を直接読み込み、ルール、タスク、証明書を移行できます。移行中に Lucky をアンインストールする必要はなく、両方を並行して動かしながらモジュール単位で切り替えられます。
nginx からの移行
このページでは Lucky からの移行を説明します。既存の nginx サイトは「Web サービス → nginx をインポート」で直接インポートできます。Web サービス · nginx 設定のインポート を参照してください。
1. 準備
- Lucky の設定ディレクトリを確認します。Docker でデプロイしている場合、通常はコンテナの
/app/confにマッピングしたホスト側ディレクトリで、lucky_base.lkcf、lucky_ddns.lkcfなどのファイルが入っています。 - Gately をデプロイします(README を参照)。次の点をおすすめします。
--network hostを使い、Lucky と同様にホストのポートを直接待ち受けます。- 管理ポートのデフォルトは 16680 で、Lucky の 16601 と競合しません。
- Lucky のスクリプトや証明書のマッピングがコンテナ内のパス(例:
/etc/lucky/custom_scripts、/data/nginx/...)を使っている場合は、Gately のコンテナにも同じパスでマウントすると、インポート後の修正が不要になります。
2. インポート
Gately の「設定 → バックアップと移行」を開き、すべての lucky_*.lkcf ファイル、または Lucky がエクスポートしたサイト全体の設定 zip を選択します(zip 内の .lkcf は自動で認識され、それ以外のファイルは無視されます)。まず「プレビュー」で各モジュールにインポートできる件数と注意事項を確認し、問題なければ「インポート」を押します。
繰り返しのインポートは安全です。既存の項目と同名のルール、タスク、証明書はスキップされます。
対応しているファイル:
| ファイル | インポート先 | 説明 |
|---|---|---|
| lucky_portforward.lkcf | ポート転送 | TLS / ストリーム暗号化、速度制限のオプションは未対応で、通知が表示されます |
| lucky_ddns.lkcf | ダイナミック DNS | 11 のプロバイダーに対応。Lucky 公式の IP 照会アドレスは削除されます |
| lucky_stun.lkcf | STUN 穿孔 | グローバルな STUN サーバー一覧とグローバル Webhook を含みます |
| lucky_ssl.lkcf | SSL 証明書 | 発行済みの証明書はそのままインポートされ、有効期限が切れるまで再取得しません |
| lucky_reverseproxy.lkcf | Web サービス | サイト、認証、WAF 参照(サブルールの WAF が main の場合は待ち受けルールのインスタンスを引き継ぎます) |
| lucky_coraza.lkcf | WAF ファイアウォール | インスタンスキーを引き継ぐため、サイトからの参照は有効なままです |
| lucky_wol.lkcf | Wake-on-LAN | |
| lucky_webterminal.lkcf | Web ターミナル | SSH 接続。初回接続時にホストフィンガープリントを記録します |
| lucky_webdav.lkcf | WebDAV | ユーザーのマウント一覧は複数のディレクトリに変換され、同名・同パスワードのユーザーは統合されます。ストレージ管理を参照するマウントは対応するローカルディレクトリに解決されます |
| lucky_ftpserver.lkcf | FTP | 待ち受けポート、パッシブポート範囲、TLS とタイムアウトのパラメーター、およびユーザー(扱いは WebDAV と同じ) |
| lucky_storagemanagement.lkcf | ストレージマウント | ローカルディレクトリと WebDAV ストレージ。Alibaba Cloud Drive、システムマウント、アクセスプロキシは移行されません |
| lucky_frp.lkcf | frp | 最初のクライアントインスタンス(サーバーアドレス、トークン、トランスポートプロトコル、プロキシ)と最初のサーバーインスタンス。ビジター、プラグインプロキシ、ダッシュボードは移行されません |
| lucky_cloudflared.lkcf | Cloudflare トンネル | トンネルトークンを使うトンネル。Access のアクセス側と、API トークンのみを入力したトンネルは移行されません |
| lucky_base.lkcf | 全体設定、Web サービス | LAN 内からのみ許可、ログイン失敗の上限、セッション期間、タイムゾーン、カスタム DNS(doh@ 形式を含む)、GC パラメーター、PROXY プロトコルの信頼元。管理ポート、セキュアエントリー、管理者アカウント、2 段階認証は移行されません |
Lucky のスケジュールタスク、IP フィルター、Docker 設定は一般的な構成では空のため、現時点では移行されません。内容がある場合は手動で設定してください。
インポートしたルールはデフォルトで無効になります。テスト機にインポートしたせいで本番のドメインが誤ったアドレスに解決されたり、稼働中の Lucky とポートやルーターの UPnP マッピングを取り合ったりするのを防ぐためです。Gately が移行先のデバイスで動作していて、Lucky が停止していることを確認できたら、「インポート後に Lucky での有効状態を維持する」にチェックを入れてください。ルールは Lucky での有効状態(各モジュールのマスタースイッチを含む)のとおり、すぐに動き始めます。
3. 切り替え
モジュールごとに 1 つずつ切り替え、切り替えるたびに動作を確認することをおすすめします。
- 証明書:Gately で証明書を有効にします。有効にすると、証明書がマッピング先のディレクトリに書き込まれ、変更時のスクリプトが実行されます(ファイル名は Lucky と同じです)。ディレクトリに書き込めることを確認してください。
- DDNS:Lucky でタスクを無効化 → Gately で対応するタスクを有効化 → 「強制同期」を押してレコードが更新されたことを確認します。
- ポート転送 / STUN:先に Lucky でルールを無効化し(ポートと UPnP マッピングを解放)、そのあと Gately で有効化します。STUN ルールを有効にすると公開ポートが変わることがありますが、スクリプトと Webhook で自動的に通知されます。
- Web サービス:Lucky の待ち受けルールを無効化 → Gately で有効化します。HTTPS サイトには、そのドメインをカバーする有効な証明書が証明書モジュールに存在している必要があります。
- すべて問題ないことを確認してから、Lucky のコンテナを停止します。
4. Docker デプロイ時のマウント
Lucky のスクリプトと証明書マッピングは Lucky コンテナ内のパスを使っています。Gately のコンテナにも、同じホスト側ディレクトリを同じコンテナ内パスにマウントする必要があります。Lucky の compose を見ながら 1 つずつ追加してください。例:
volumes:
- ./config:/etc/gately
- /var/run/docker.sock:/var/run/docker.sock
# Lucky で証明書を /data/nginx/ssl にマッピングしている場合は、同じホスト側ディレクトリを同じパスにマウントします
- /srv/nginx/ssl:/data/nginx/ssl
# ルールから呼び出すスクリプト(Lucky に入力したパスが Lucky コンテナ内に実在するか確認してください)
- /srv/lucky/custom_scripts:/etc/lucky/custom_scripts:roGately のイメージには sh、bash、curl が含まれているため、一般的な通知スクリプトはそのまま実行できます。
5. 手動で対応が必要な項目
- 外部ログイン:Lucky の GitHub / QQ / Google ログインは Lucky 公式の中継サーバーを経由しますが、Gately では自分で取得した OAuth アプリを使います。インポート時は
lucky_thirdPartyAuthManager.lkcf(ID テーブル)、lucky_reverseproxy.lkcf、lucky_base.lkcfを一緒に選択してください。- サイトや管理画面が参照しているサードパーティ ID は、ID テーブルに従って許可リストに移行されます(GitHub は数値 ID、Google は sub、QQ は openid を使い、ユーザー名とメールアドレスは備考に記録されます)。
- 管理画面のログイン方法は「設定 → アカウントとセキュリティ → 外部ログイン」、サイトのログイン方法は「Web サービス → 全体設定」にあります。自分の Client ID / Secret とコールバックアドレスを入力して有効にして初めて機能し、インポートで自動的に有効になることはありません。ログイン方法の識別子には
github、google、qqを使うと、移行された ID と対応づけられます。 - QQ の openid は QQ Connect のアプリごとに異なります。自分のアプリに切り替えると、初回ログインは拒否され、新しいアカウント識別子が表示されるので、それを許可リストに追加してください。
- 外部ログインのみに依存し、移行できる ID が見つからないサイトは、インポート後も無効のままになります。
- ZeroSSL 証明書:Lucky の EAB 認証情報を引き継いで新しい ACME アカウントを登録します。ZeroSSL に拒否された場合は、ZeroSSL の管理画面で EAB を再生成してください。
- frp インスタンス:Gately には frpc と frps が 1 つずつしかありません。Lucky の余分なインスタンスはレポートに一覧表示されるので、別のマシンに移すか 1 つのインスタンスにまとめてください。Gately ですでに別のサーバーへの frpc を設定している場合や、有効な frps がある場合は、上書きされません。frps のダッシュボードのアカウントは Lucky が管理しているため、移行後にダッシュボードが必要であれば、ポートとパスワードを設定し直してください。
- ストレージの参照:Lucky の FTP / WebDAV ユーザーは「ストレージ管理」のストレージをマウントできます。インポート時は
lucky_storagemanagement.lkcfも一緒に選択してください(またはサイト全体の zip をインポートしてください)。ローカルストレージは対応するディレクトリに解決されます。WebDAV、Alibaba Cloud Drive ストレージ、rclone マウントは未対応で、レポートに通知されます。 - 未実装の Lucky 機能:DLNA、rclone によるネットワークドライブのマウント、Alibaba Cloud Drive、IP データベース(
lucky_ipdb.lkcf)などは移行されず、インポート時にスキップされます。 - Lucky 公式サーバー:Gately は
66666.host、lucky666.cnなどのアドレスには接続しません。移行後の公開 IP 照会にはサードパーティの公開サービスが使われます(DDNS タスクで変更できます)。
6. ロールバック
Gately は Lucky のファイルを一切変更しません。元に戻したいときは、Gately の対応するルールを無効化し、Lucky で再び有効にするだけです。