OpenClaw パーソナルAIアシスタントを Cloudflare Sandbox コンテナで実行します。
実験的プロジェクト: これは概念実証(PoC)です。公式サポートはなく、予告なく動作しなくなる可能性があります。
- Workers Paid プラン($5/月) — Cloudflare Sandbox コンテナに必要
- AIプロバイダー — 以下のいずれか:
- Anthropic APIキー
- OpenAI APIキー
- ChatGPTサブスクリプション — Codex OAuth経由(APIキー不要)
- Cloudflare AI Gateway + Unified Billing
ブラウザ
│
▼
┌─────────────────────────────────────┐
│ Cloudflare Worker (Hono) │
│ - サンドボックスでOpenClawを起動 │
│ - HTTP/WebSocketリクエストをプロキシ │
│ - OAuthトークンを管理 │
│ - シークレットを環境変数として渡す │
└──────────────┬──────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ Cloudflare Sandbox コンテナ │
│ ┌───────────────────────────────┐ │
│ │ OpenClaw Gateway │ │
│ │ - Control UI(ポート18789) │ │
│ │ - WebSocket RPCプロトコル │ │
│ │ - エージェントランタイム │ │
│ └───────────────────────────────┘ │
└─────────────────────────────────────┘
git clone https://github.com/cloudflare/moltworker.git
cd moltworker
npm installいずれか1つを選択:
# 選択肢A: Anthropic APIキー
npx wrangler secret put ANTHROPIC_API_KEY
# 選択肢B: OpenAI APIキー
npx wrangler secret put OPENAI_API_KEY
# 選択肢C: Codex OAuth(ChatGPTサブスクリプション、APIキー不要)
npx wrangler secret put CODEX_OAUTH_ENABLED
# 入力: true
# デプロイ後にAdmin UIから接続(下記「Codex OAuth」セクション参照)
# 選択肢D: Cloudflare AI Gateway(下記「AI Gateway」セクション参照)export MOLTBOT_GATEWAY_TOKEN=$(openssl rand -hex 32)
echo "ゲートウェイトークン: $MOLTBOT_GATEWAY_TOKEN"
echo "$MOLTBOT_GATEWAY_TOKEN" | npx wrangler secret put MOLTBOT_GATEWAY_TOKENnpm run deployControl UIを開く:
https://your-worker.workers.dev/?token=YOUR_GATEWAY_TOKEN
初回リクエストはコンテナ起動のため1〜2分かかります。
重要: Control UIを使用する前に、Cloudflare Accessの設定と、
/_admin/でのデバイスペアリングが必要です。
- Workers Paid プランの Cloudflare アカウント
- Wrangler CLI(
npm install -g wrangler) - ダッシュボードで Cloudflare Containers を有効化
# Cloudflareに認証(初回のみ)
npx wrangler login
# 必須シークレットを設定
npx wrangler secret put ANTHROPIC_API_KEY # または選択したAIプロバイダー
npx wrangler secret put MOLTBOT_GATEWAY_TOKEN # Control UIのアクセストークン
npx wrangler secret put CF_ACCESS_TEAM_DOMAIN # 例: myteam.cloudflareaccess.com
npx wrangler secret put CF_ACCESS_AUD # Application Audience タグ
# ビルドしてデプロイ
npm run deploygit pull
npm install
npm run deploy設定変更が反映されない場合は、Dockerfile のキャッシュバストコメントを更新してリデプロイしてください。
standard-1 インスタンス(1/2 vCPU、4 GiB メモリ)で24時間稼働した場合の概算月額:
| リソース | 概算コスト |
|---|---|
| メモリ(4 GiB、24時間) | ~$26/月 |
| CPU(利用率約10%) | ~$2/月 |
| ディスク(8 GB) | ~$1.50/月 |
| Workers Paid プラン | $5/月 |
| 合計 | ~$34.50/月 |
コストを削減するには、SANDBOX_SLEEP_AFTER(例: 10m)を設定してアイドル時にコンテナをスリープさせます。1日4時間稼働なら合計約$10〜11/月になります。
ChatGPT Plus/Pro/Team サブスクリプションを使って、APIキーなしでOpenClawを動かせます。PKCE(S256)によるCodex OAuthフローを使用します。
npx wrangler secret put CODEX_OAUTH_ENABLED
# 入力: true
npm run deploy- Admin UIを開く:
https://your-worker.workers.dev/_admin/ - OpenAI Provider (Codex OAuth) セクションで Connect OpenAI (Codex) をクリック
- 認証リンクをクリックしてブラウザでOpenAIのログインページを開く
- ログインしてアプリケーションを承認
localhostのURLにリダイレクトされる(ページは読み込まれません — これは正常です)- ブラウザのアドレスバーからURL全体をコピー
- Admin UIのテキストフィールドに貼り付けて Complete Connection をクリック
ゲートウェイが新しい認証情報で自動的に再起動します。
- OAuthアクセストークンはコンテナに
OPENAI_API_KEYとして渡される - トークンは有効期限の5分前に自動リフレッシュ(リフレッシュ中はゲートウェイが一時的に再起動)
- トークンはコンテナのファイルシステムに保存され、R2が設定されている場合はバックアップされる
- 静的な
OPENAI_API_KEYシークレットが設定されている場合、そちらがOAuthより優先される
Admin UIから以下の操作が可能:
- Refresh Token — アクセストークンを手動リフレッシュ
- Disconnect — OAuth認証情報を削除してゲートウェイを再起動
デフォルトのCodex CLIクライアントの代わりにカスタムOAuthクライアントIDを使用する場合:
npx wrangler secret put OPENAI_OAUTH_CLIENT_IDCloudflare Access は管理UI(/_admin/)、APIルート(/api/*)、デバッグエンドポイント(/debug/*)を保護します。
- Workers & Pages ダッシュボードにアクセス
- Workerを選択
- Settings > Domains & Routes で
workers.devの行の...をクリック - Enable Cloudflare Access をクリック
- Zero Trust > Access > Applications でアクセスを許可するユーザーを設定(メール、Google、GitHub等)
- Application Audience (AUD) タグをコピー
npx wrangler secret put CF_ACCESS_TEAM_DOMAIN
# 入力: myteam.cloudflareaccess.com
npx wrangler secret put CF_ACCESS_AUD
# 入力: Application Audience タグnpm run deploy新しいデバイスがゲートウェイに接続する際、Admin UIでの承認が必要です:
- デバイスがゲートウェイに接続
- 承認されるまで接続は保留
- 管理者が
/_admin/でデバイスを承認 - デバイスがペアリングされ、自由に接続可能に
有効なゲートウェイトークンがあっても、新しいデバイスには明示的な承認が必要です。
ローカル開発では .dev.vars に DEV_MODE=true を設定することで、Access認証とデバイスペアリングの両方をスキップできます。
デフォルトではコンテナ再起動時にデータは失われます。R2を有効にして永続化:
npx wrangler secret put R2_ACCESS_KEY_ID # R2 APIトークンから取得
npx wrangler secret put R2_SECRET_ACCESS_KEY # R2 APIトークンから取得
npx wrangler secret put CF_ACCOUNT_ID # CloudflareアカウントIDR2 APIトークンは R2 > Overview > Manage R2 API Tokens で作成し、moltbot-data バケットに対して Object Read & Write 権限を付与してください。
データは5分ごとにR2に同期され、コンテナ起動時に復元されます。Admin UIから手動バックアップも実行できます。
Cloudflare AI Gateway 経由でAIリクエストをルーティングし、分析・キャッシュ・レート制限を利用:
npx wrangler secret put CLOUDFLARE_AI_GATEWAY_API_KEY # プロバイダーのAPIキー
npx wrangler secret put CF_AI_GATEWAY_ACCOUNT_ID # CloudflareアカウントID
npx wrangler secret put CF_AI_GATEWAY_GATEWAY_ID # ゲートウェイIDデフォルトモデルを変更するには CF_AI_GATEWAY_MODEL(形式: provider/model-id)を設定:
npx wrangler secret put CF_AI_GATEWAY_MODEL
# 入力: workers-ai/@cf/meta/llama-3.3-70b-instruct-fp8-fast# Telegram
npx wrangler secret put TELEGRAM_BOT_TOKEN
# Discord
npx wrangler secret put DISCORD_BOT_TOKEN
# Slack
npx wrangler secret put SLACK_BOT_TOKEN
npx wrangler secret put SLACK_APP_TOKENChrome DevTools Protocol によるブラウザ自動化を有効にする:
npx wrangler secret put CDP_SECRET # 認証用の共有シークレット
npx wrangler secret put WORKER_URL # https://your-worker.workers.dev
npm run deployエンドポイント: /cdp/json/version、/cdp/json/list、/cdp/json/new、/cdp/devtools/browser/{id}(WebSocket)。すべて ?secret=<CDP_SECRET> が必要です。
cp .dev.vars.example .dev.vars
# .dev.vars にAPIキーと DEV_MODE=true を設定
npm run start # wrangler dev(ローカルWorker)
npm run dev # Vite開発サーバー(クライアントのみ)
npm test # テスト実行注意: wrangler dev ではWebSocketプロキシに制限があります。完全な機能を利用するにはCloudflareにデプロイしてください。
| シークレット | 必須 | 説明 |
|---|---|---|
MOLTBOT_GATEWAY_TOKEN |
はい | ゲートウェイアクセストークン(?token= で渡す) |
CF_ACCESS_TEAM_DOMAIN |
はい* | Cloudflare Access チームドメイン |
CF_ACCESS_AUD |
はい* | Cloudflare Access アプリケーションオーディエンス |
ANTHROPIC_API_KEY |
はい** | Anthropic APIキー |
OPENAI_API_KEY |
はい** | OpenAI APIキー |
CODEX_OAUTH_ENABLED |
はい** | true でCodex OAuthを有効化 |
OPENAI_OAUTH_CLIENT_ID |
いいえ | カスタムOAuthクライアントID(デフォルト: Codex CLI) |
CLOUDFLARE_AI_GATEWAY_API_KEY |
はい** | AI GatewayプロバイダーAPIキー |
CF_AI_GATEWAY_ACCOUNT_ID |
はい** | AI Gateway用CloudflareアカウントID |
CF_AI_GATEWAY_GATEWAY_ID |
はい** | AI Gateway ID |
CF_AI_GATEWAY_MODEL |
いいえ | モデル変更: provider/model-id |
ANTHROPIC_BASE_URL |
いいえ | カスタムAnthropic APIベースURL |
R2_ACCESS_KEY_ID |
いいえ | 永続化用R2アクセスキー |
R2_SECRET_ACCESS_KEY |
いいえ | 永続化用R2シークレットキー |
CF_ACCOUNT_ID |
いいえ | CloudflareアカウントID(R2用) |
SANDBOX_SLEEP_AFTER |
いいえ | コンテナスリープタイムアウト: never または 10m、1h |
TELEGRAM_BOT_TOKEN |
いいえ | Telegramボットトークン |
DISCORD_BOT_TOKEN |
いいえ | Discordボットトークン |
SLACK_BOT_TOKEN |
いいえ | Slackボットトークン |
SLACK_APP_TOKEN |
いいえ | Slackアプリトークン |
CDP_SECRET |
いいえ | CDP認証用共有シークレット |
WORKER_URL |
いいえ | WorkerのパブリックURL(CDP用) |
DEV_MODE |
いいえ | 認証+デバイスペアリングをスキップ(ローカル開発用) |
DEBUG_ROUTES |
いいえ | /debug/* ルートを有効化 |
*DEV_MODE=true の場合は不要
**AIプロバイダー設定は少なくとも1つ必要
- 初回リクエストが遅い — コールドスタートに1〜2分かかります。
SANDBOX_SLEEP_AFTER=neverでコンテナを常時稼働にできます。 - ゲートウェイが起動しない —
npx wrangler secret listでシークレットを確認、npx wrangler tailでログを確認。 - 管理ルートでアクセス拒否 —
CF_ACCESS_TEAM_DOMAINとCF_ACCESS_AUDが正しく設定されているか確認。 - R2がマウントされない — 3つのR2シークレットがすべて設定されているか確認。R2は本番環境でのみ動作し、
wrangler devでは使えません。 - Codex OAuthのリダイレクトが失敗する — localhostのリダイレクトURLはブラウザで読み込まれません。これは正常です — URLをコピーしてAdmin UIに貼り付けてください。
- ローカルでWebSocketの問題 —
wrangler devにはWebSocketの制限があります。完全な機能を利用するにはCloudflareにデプロイしてください。 - Windows: exit code 126 — GitがシェルスクリプトをCRLFで改行している可能性があります。
git config --global core.autocrlf inputを設定してください。