Skip to main content

Fly.io デプロイ

目的: 永続ストレージ、自動 HTTPS、Discord/チャンネル アクセスを備えた Fly.io マシン上で OpenClaw Gateway(ゲートウェイ)を実行します。

必要なもの

  • flyctl CLI がインストールされていること
  • Fly.io アカウント(無料枠で可)
  • モデル認証: Anthropic API キー(または他のプロバイダーのキー)
  • チャンネル認証情報: Discord ボットトークン、Telegram トークン など

初心者向けクイック パス

  1. リポジトリをクローン → fly.toml をカスタマイズ
  2. アプリ + ボリュームを作成 → シークレットを設定
  3. fly deploy でデプロイ
  4. SSH で接続して設定を作成、または Control UI を使用

1) Fly アプリの作成

ヒント: 近くの地域を選んでください。 ヒント: 近くの地域を選んでください。 一般的なオプション: lhr (ロンドン), iad (バージニア州), sjc (サンノゼ).

2. fly.toml の設定

アプリ名と要件に合わせて fly.toml を編集します。 セキュリティノート: デフォルトの設定は公開URLを公開します。 セキュリティノート: デフォルトの設定は公開URLを公開します。 セキュリティ注意: デフォルト設定では公開 URL が公開されます。公開 IP を持たない堅牢化デプロイについては、Private Deployment を参照するか、fly.private.toml を使用してください。
主要設定:

3. シークレットの設定

注記:
  • 非ループバック バインド(--bind lan)では、セキュリティのため OPENCLAW_GATEWAY_TOKEN が必要です。
  • これらのトークンはパスワードと同様に扱ってください。
  • **すべての API キーとトークンに対して設定ファイルよりも env vars を優先します。 これにより、誤って公開されたりログに記録されたりすることのできる openclaw.json の秘密が保持されます。

4. デプロイ

初回デプロイでは Docker イメージをビルドします(約 2~3 分)。以降のデプロイは高速です。 その後のデプロイが速くなります。 その後のデプロイが速くなります。 デプロイ後、次を確認します。
表示する必要があります:

5. 設定ファイルの作成

SSH でマシンに接続し、適切な設定を作成します。
設定ディレクトリとファイルを作成します。
注記: OPENCLAW_STATE_DIR=/data を使用している場合、設定パスは /data/openclaw.json です。 注記: Discord トークンは次のいずれかから取得できます。
  • 環境変数: DISCORD_BOT_TOKEN(シークレットには推奨)
  • 設定ファイル: channels.discord.token
env var を使用する場合は、config にトークンを追加する必要はありません。 ゲートウェイは 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 / メモリ問題

コンテナは再起動または殺され続けます。 コンテナが再起動を繰り返す、または強制終了されます。兆候: SIGABRTv8::internal::Runtime_AllocateInYoungGeneration、または無言の再起動。 コンテナが再起動を繰り返す、または強制終了されます。兆候: SIGABRTv8::internal::Runtime_AllocateInYoungGeneration、または無言の再起動。 対処: fly.toml のメモリを増やします。
または既存のマシンを更新します。
注意: 512MBが小さすぎます。 1GBは動作するかもしれませんが、負荷下または冗長ロギングでOOMすることができます。 2GB を推奨します。 1GBは動作するかもしれませんが、負荷下または冗長ロギングでOOMすることができます。 2GB を推奨します。

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.tomlOPENCLAW_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: ローカル プロキシ(最も簡単)
オプション 2: WireGuard VPN
オプション 3: SSH のみ

プライベート デプロイでの Webhook

公開なしで Webhook コールバック(Twilio、Telnyx など)が必要な場合: 公開されることなく 公開されることなく
  1. ngrok トンネル - コンテナ内またはサイドカーとして ngrok を実行
  2. Tailscale Funnel - Tailscale 経由で特定パスを公開
  3. アウトバウンドのみ - 一部プロバイダー(Twilio)は Webhook なしでもアウトバウンドで問題なく動作
ngrok を使用した音声通話設定の例:
ngrok トンネルはコンテナ内で実行され、Fly アプリ自体を公開せずに公開 Webhook URL を提供します。転送される Host ヘッダーを受け入れるため、webhookSecurity.allowedHosts を公開トンネルのホスト名に設定してください。 webhookSecurity.allowedHostsをパブリックトンネルホスト名に設定すると、転送されたホストヘッダが受け入れられます。 webhookSecurity.allowedHostsをパブリックトンネルホスト名に設定すると、転送されたホストヘッダが受け入れられます。

セキュリティ上の利点

注記

  • Fly.io は x86 アーキテクチャ を使用(ARM ではありません)
  • Dockerfile は両方のアーキテクチャに対応しています
  • WhatsApp/Telegram のオンボーディングには fly ssh console を使用してください
  • 永続データは /data のボリュームに保存されます
  • Signal には Java + signal-cli が必要です。カスタム イメージを使用し、メモリは 2GB 以上を維持してください。

コスト

推奨設定(shared-cpu-2x、2GB RAM)では:
  • 使用状況により月額 約 $10~15
  • 無料枠には一定の割当が含まれます
詳細は Fly.io pricing を参照してください。