メインコンテンツへスキップ
目標: 永続ストレージ、自動 HTTPS、Discord などのチャネル接続を備えた Fly.io マシン上で OpenClaw ゲートウェイを実行することです。

必要なもの

  • インストール済みの flyctl CLI
  • Fly.io アカウント (無料枠で機能します)
  • モデル認証: 使用するモデルプロバイダーの 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 が公開されます。パブリック IP のない強化されたデプロイメントについては、プライベートデプロイメント を参照するか、fly.private.toml を使用してください。
主な設定:

3) シークレットの設定

注意:
  • 非ループバックバインド (--bind lan) には、セキュリティのために OPENCLAW_GATEWAY_TOKEN が必要です。
  • これらのトークンはパスワードのように扱ってください。
  • すべての API キーとトークンには、設定ファイルよりも環境変数を優先してください。これにより、シークレットが誤って公開されたりログに記録されたりする可能性がある openclaw.json からシークレットを遠ざけることができます。

4) デプロイ

最初のデプロイでは Docker イメージがビルドされます (約 2〜3 分)。以降のデプロイはより高速になります。 デプロイ後、確認します:
以下のように表示されるはずです:

5) 設定ファイルの作成

マシンに SSH で接続して、適切な設定を作成します:
設定ディレクトリとファイルを作成します:
注意: OPENCLAW_STATE_DIR=/data の場合、設定パスは /data/openclaw.json です。 注意: Discord トークンは次のいずれかから取得できます:
  • 環境変数: DISCORD_BOT_TOKEN (シークレットに推奨)
  • 設定ファイル: channels.discord.token
環境変数を使用する場合、設定にトークンを追加する必要はありません。Gateway は自動的に DISCORD_BOT_TOKEN を読み取ります。 再起動して適用します:

6) ゲートウェイへのアクセス

Control 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 に bind しています。 修正: fly.toml のプロセスコマンドに --bind lan を追加します。

ヘルスチェック失敗 / connection refused

Fly が設定ポート上のゲートウェイへ到達できません。 修正: internal_port が Gateway のポートと一致していることを確認します (--port 3000 または OPENCLAW_GATEWAY_PORT=3000 を設定します)。

OOM / メモリ不足

コンテナが再起動を繰り返すか、強制終了されます。兆候: SIGABRTv8::internal::Runtime_AllocateInYoungGeneration、またはサイレントな再起動。 修正: fly.toml でメモリを増やします:
または、既存のマシンを更新します:
注意: 512MB では小さすぎます。1GB でも機能する可能性がありますが、負荷がかかったり、冗長なログ記録が行われたりすると OOM になる可能性があります。2GB を推奨します。

ゲートウェイのロック問題

「すでに実行中です (already running)」というエラーで Gateway が起動を拒否します。 これは、コンテナは再起動したものの、PID ロックファイルがボリューム上に残っている場合に発生します。 修正: ロックファイルを削除します:
ロックファイルは /data/gateway.*.lock にあります (サブディレクトリではありません)。

設定が読み込まれない

--allow-unconfigured を使用している場合、Gateway は最小限の設定を作成します。/data/openclaw.json にあるカスタム設定は、再起動時に読み込まれるはずです。 設定が存在することを確認します:

SSH 経由での設定の書き込み

fly ssh console -C コマンドはシェルのリダイレクトをサポートしていません。設定ファイルを書き込むには:
注意: ファイルがすでに存在する場合、fly sftp は失敗する可能性があります。最初に削除します:

状態が永続化されない

再起動後に認証情報やセッションが失われる場合、状態ディレクトリがコンテナのファイルシステムに書き込まれています。 修正: fly.tomlOPENCLAW_STATE_DIR=/data が設定されていることを確認し、再デプロイします。

アップデート

マシンコマンドの更新

完全な再デプロイを行わずに起動コマンドを変更する必要がある場合:
注意: fly deploy の後、マシンコマンドは fly.toml にあるものにリセットされる可能性があります。手動で変更を加えた場合は、デプロイ後に再適用してください。

プライベートデプロイメント (強化版)

デフォルトでは、Fly はパブリック IP を割り当てるため、https://your-app.fly.dev で Gateway にアクセスできるようになります。これは便利ですが、インターネットスキャナー (Shodan、Censys など) によってデプロイメントが発見される可能性があることを意味します。 パブリックに公開しない強化されたデプロイメントの場合は、プライベートテンプレートを使用してください。

プライベートデプロイメントを使用する場合

  • アウトバウンドの呼び出し/メッセージのみを行う場合 (インバウンドの Webhook なし)
  • Webhook コールバックに ngrok または Tailscale トンネルを使用する場合
  • ブラウザの代わりに SSH、プロキシ、または WireGuard 経由でゲートウェイへアクセスする場合
  • インターネットスキャナーからデプロイメントを隠したい場合

セットアップ

標準の設定の代わりに fly.private.toml を使用します:
または、既存のデプロイメントを変換します:
この後、fly ips listprivate タイプの IP のみを表示するはずです:

プライベートデプロイメントへのアクセス

パブリック URL がないため、以下のいずれかの方法を使用します: オプション 1: ローカルプロキシ (最も簡単)
オプション 2: WireGuard VPN
オプション 3: SSH のみ

プライベートデプロイメントでの webhook

パブリックに公開せずに Webhook コールバック (Twilio、Telnyx など) が必要な場合:
  1. ngrok トンネル - コンテナ内またはサイドカーとして ngrok を実行します
  2. Tailscale Funnel - Tailscale 経由で特定のパスを公開します
  3. アウトバウンドのみ - 一部のプロバイダ (Twilio) は、Webhook なしでもアウトバウンド通話で問題なく機能します
ngrok を使用した voice-call 設定の例:
ngrok トンネルはコンテナ内で実行され、Fly アプリ自体を公開することなくパブリックな Webhook URL を提供します。転送されたホストヘッダーが受け入れられるように、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 の価格を参照してください。