Fly.io デプロイ
目的: 永続ストレージ、自動 HTTPS、Discord/チャンネル アクセスを備えた Fly.io マシン上で OpenClaw Gateway(ゲートウェイ)を実行します。必要なもの
- flyctl CLI がインストールされていること
- Fly.io アカウント(無料枠で可)
- モデル認証: Anthropic API キー(または他のプロバイダーのキー)
- チャンネル認証情報: Discord ボットトークン、Telegram トークン など
初心者向けクイック パス
- リポジトリをクローン →
fly.tomlをカスタマイズ - アプリ + ボリュームを作成 → シークレットを設定
fly deployでデプロイ- SSH で接続して設定を作成、または Control UI を使用
1) Fly アプリの作成
lhr (ロンドン), iad (バージニア州), sjc (サンノゼ).
2. fly.toml の設定
アプリ名と要件に合わせてfly.toml を編集します。
セキュリティノート: デフォルトの設定は公開URLを公開します。 セキュリティノート: デフォルトの設定は公開URLを公開します。 セキュリティ注意: デフォルト設定では公開 URL が公開されます。公開 IP を持たない堅牢化デプロイについては、Private Deployment を参照するか、fly.private.toml を使用してください。
| 設定 | 理由 |
|---|---|
--bind lan | Fly のプロキシが ゲートウェイ に到達できるよう 0.0.0.0 にバインド |
--allow-unconfigured | 設定ファイルなしで起動(後で作成) |
internal_port = 3000 | Fly のヘルスチェックのため --port 3000(または OPENCLAW_GATEWAY_PORT)と一致する必要 |
memory = "2048mb" | 512MB は小さすぎるため、2GB を推奨 |
OPENCLAW_STATE_DIR = "/data" | ボリューム上に状態を永続化 |
3. シークレットの設定
- 非ループバック バインド(
--bind lan)では、セキュリティのためOPENCLAW_GATEWAY_TOKENが必要です。 - これらのトークンはパスワードと同様に扱ってください。
- **すべての API キーとトークンに対して設定ファイルよりも env vars を優先します。 これにより、誤って公開されたりログに記録されたりすることのできる
openclaw.jsonの秘密が保持されます。
4. デプロイ
5. 設定ファイルの作成
SSH でマシンに接続し、適切な設定を作成します。OPENCLAW_STATE_DIR=/data を使用している場合、設定パスは /data/openclaw.json です。
注記: Discord トークンは次のいずれかから取得できます。
- 環境変数:
DISCORD_BOT_TOKEN(シークレットには推奨) - 設定ファイル:
channels.discord.token
DISCORD_BOT_TOKEN を自動的に読み込みます。 ゲートウェイは DISCORD_BOT_TOKEN を自動的に読み込みます。
適用するため再起動します。
6. Gateway(ゲートウェイ)へのアクセス
制御UI
ブラウザーで開きます。https://my-openclaw.fly.dev/ にアクセスします。
OPENCLAW_GATEWAY_TOKEN から取得した ゲートウェイ トークンを貼り付けて認証します。
ログ
SSH コンソール
トラブルシューティング
「App is not listening on expected address」
ゲートウェイ が0.0.0.0 ではなく 127.0.0.1 にバインドしています。
対処: fly.toml のプロセス コマンドに --bind lan を追加してください。
ヘルスチェック失敗 / connection refused
設定されたポートで Fly が ゲートウェイ に到達できません。 対処:internal_port が ゲートウェイ のポートと一致していることを確認してください(--port 3000 または OPENCLAW_GATEWAY_PORT=3000 を設定)。
OOM / メモリ問題
コンテナは再起動または殺され続けます。 コンテナが再起動を繰り返す、または強制終了されます。兆候:SIGABRT、v8::internal::Runtime_AllocateInYoungGeneration、または無言の再起動。 コンテナが再起動を繰り返す、または強制終了されます。兆候: SIGABRT、v8::internal::Runtime_AllocateInYoungGeneration、または無言の再起動。
対処: fly.toml のメモリを増やします。
Gateway ロックの問題
「already running」エラーで Gateway(ゲートウェイ)が起動しません。 これは、コンテナが再起動しても PID ロック ファイルがボリュームに残る場合に発生します。 対処: ロック ファイルを削除します。/data/gateway.*.lock(サブディレクトリではありません)にあります。
設定が読み込まれない
--allow-unconfigured を使用する場合、ゲートウェイは最小限の設定を作成します。 --allow-unconfigured を使用する場合、ゲートウェイは最小限の設定を作成します。 --allow-unconfigured を使用している場合、ゲートウェイ は最小限の設定を作成します。再起動時に /data/openclaw.json のカスタム設定が読み込まれるはずです。
設定の存在を確認します。
SSH 経由での設定書き込み
fly ssh console -C コマンドはシェルのリダイレクトをサポートしていません。設定ファイルを書き込むには次を使用します。 設定ファイルを書き込む: 設定ファイルを書き込む:
fly sftp は失敗することがあります。先に削除してください。 最初に削除: 最初に削除:
状態が永続化されない
再起動後に認証情報やセッションが失われる場合、状態ディレクトリがコンテナのファイルシステムに書き込まれています。 対処:fly.toml に OPENCLAW_STATE_DIR=/data が設定されていることを確認し、再デプロイしてください。
更新
マシン コマンドの更新
完全な再デプロイなしで起動コマンドを変更する必要がある場合:fly deploy の後、マシン コマンドは fly.toml に記載の内容へリセットされる場合があります。手動変更を行った場合は、デプロイ後に再適用してください。 手動で変更を加えた場合は、デプロイ後に再度適用します。 手動で変更を加えた場合は、デプロイ後に再度適用します。
Private Deployment(堅牢化)
デフォルトでは、Fly は公開 IP を割り当て、ゲートウェイ はhttps://your-app.fly.dev でアクセス可能になります。便利ですが、インターネット スキャナー(Shodan、Censys など)に発見される可能性があります。 これは便利ですが、インターネットスキャナー(Shodan、Censysなど)で展開を確認できることを意味します。 これは便利ですが、インターネットスキャナー(Shodan、Censysなど)で展開を確認できることを意味します。
公開なしの堅牢化デプロイには、プライベート テンプレートを使用してください。
プライベート デプロイを使用する場合
- アウトバウンド の呼び出し/メッセージのみを行う(インバウンド Webhook なし)
- Webhook コールバックに ngrok または Tailscale トンネルを使用
- ブラウザーではなく SSH、プロキシ、または WireGuard 経由で ゲートウェイ にアクセス
- デプロイを インターネット スキャナーから隠したい
セットアップ
標準設定の代わりにfly.private.toml を使用します。
fly ips list には private タイプの IP のみが表示されるはずです。
プライベート デプロイへのアクセス
公開 URL がないため、次のいずれかを使用します。 オプション 1: ローカル プロキシ(最も簡単)プライベート デプロイでの Webhook
公開なしで Webhook コールバック(Twilio、Telnyx など)が必要な場合: 公開されることなく 公開されることなく- ngrok トンネル - コンテナ内またはサイドカーとして ngrok を実行
- Tailscale Funnel - Tailscale 経由で特定パスを公開
- アウトバウンドのみ - 一部プロバイダー(Twilio)は Webhook なしでもアウトバウンドで問題なく動作
webhookSecurity.allowedHosts を公開トンネルのホスト名に設定してください。 webhookSecurity.allowedHostsをパブリックトンネルホスト名に設定すると、転送されたホストヘッダが受け入れられます。 webhookSecurity.allowedHostsをパブリックトンネルホスト名に設定すると、転送されたホストヘッダが受け入れられます。
セキュリティ上の利点
| 観点 | 公開 | 非公開 |
|---|---|---|
| インターネット スキャナー | 検出可能 | 非公開 |
| 直接攻撃 | 可能 | ブロック |
| Control UI アクセス | ブラウザー | プロキシ/VPN |
| Webhook 配信 | 直接 | トンネル経由 |
注記
- Fly.io は x86 アーキテクチャ を使用(ARM ではありません)
- Dockerfile は両方のアーキテクチャに対応しています
- WhatsApp/Telegram のオンボーディングには
fly ssh consoleを使用してください - 永続データは
/dataのボリュームに保存されます - Signal には Java + signal-cli が必要です。カスタム イメージを使用し、メモリは 2GB 以上を維持してください。
コスト
推奨設定(shared-cpu-2x、2GB RAM)では:
- 使用状況により月額 約 $10~15
- 無料枠には一定の割当が含まれます