Fly.io 部署指南:讓你的 OpenClaw 永久在線
我以前總愛把機器人跑在自己的筆電或舊的樹莓派上,但每次遇到停電或網路斷線,服務就直接掛掉。後來我發現 Fly.io 簡直是救星,它能讓你用極簡的步驟把 Docker 容器丟上雲端,還自帶 HTTPS 和穩定的儲存空間。如果你想讓 OpenClaw 24 小時不間斷地為你工作,這就是最推薦的路徑。
需要準備的東西
Section titled “需要準備的東西”在開始動手之前,請確保你已經準備好這四樣東西:
- 已安裝 flyctl CLI
- 一個 Fly.io 帳號(免費額度通常就夠用了)
- 模型 API Key:例如 Anthropic 或 OpenAI
- 頻道憑證:例如 Discord bot token 或 Telegram token
如果你趕時間,這是在 5 分鐘內跑起來的最小路徑:
- Clone 專案並根據需求修改
fly.toml - 建立 App 與 Volume,並設定 Secrets
- 執行
fly deploy開始部署 - 透過 SSH 進入機器建立設定檔或使用 Control UI
1) 建立 Fly App
Section titled “1) 建立 Fly App”先從終端機進入專案目錄,並建立你的應用程式空間:
# Clone 專案git clone https://github.com/openclaw/openclaw.gitcd openclaw
# 建立新的 Fly app(名字可以自己取)fly apps create my-openclaw
# 建立持久化儲存空間(1GB 通常就很夠用了)fly volumes create openclaw_data --size 1 --region iad小撇步: 選擇離你近的區域(Region)。常見的選項有:lhr (倫敦)、iad (維吉尼亞)、sjc (聖荷西) 或 hkg (香港)。
2) 設定 fly.toml
Section titled “2) 設定 fly.toml”編輯專案根目錄下的 fly.toml,確保它符合你的 App 名稱。
安全提醒: 預設設定會公開 URL。如果你需要更高的安全性,請參考後面的「私密部署」章節。
app = "my-openclaw" # 你的 App 名稱primary_region = "iad"
[build] dockerfile = "Dockerfile"
[env] NODE_ENV = "production" OPENCLAW_PREFER_PNPM = "1" OPENCLAW_STATE_DIR = "/data" NODE_OPTIONS = "--max-old-space-size=1536"
[processes] app = "node dist/index.js gateway --allow-unconfigured --port 3000 --bind lan"
[http_service] internal_port = 3000 force_https = true auto_stop_machines = false auto_start_machines = true min_machines_running = 1 processes = ["app"]
[[vm]] size = "shared-cpu-2x" memory = "2048mb"
[mounts] source = "openclaw_data" destination = "/data"關鍵設定說明:
| 設定 | 原因 |
|---|---|
--bind lan | 綁定到 0.0.0.0,這樣 Fly 的 Proxy 才能連到 Gateway |
--allow-unconfigured | 允許在沒有設定檔的情況下啟動,方便後續設定 |
internal_port = 3000 | 必須與 --port 3000 一致,否則健康檢查會失敗 |
memory = "2048mb" | 512MB 太小了,建議至少給 2GB 比較穩定 |
3) 設定 Secrets
Section titled “3) 設定 Secrets”不要把 API Key 直接寫在設定檔裡,用 Fly 的 Secrets 功能才安全:
# 必要:設定 Gateway tokenfly secrets set OPENCLAW_GATEWAY_TOKEN=$(openssl rand -hex 32)
# 模型供應商 API keysfly secrets set ANTHROPIC_API_KEY=sk-ant-...fly secrets set OPENAI_API_KEY=sk-...
# 頻道 Tokenfly secrets set DISCORD_BOT_TOKEN=MTQ...請把這些 Token 當作密碼一樣保護。建議優先使用環境變數而非 openclaw.json 來存放 API Key,這樣可以避免密鑰被意外記錄在日誌中。
一切就緒後,執行部署指令:
fly deploy第一次部署會花大約 2-3 分鐘建立 Docker Image,之後的更新會快很多。部署完成後,你可以檢查狀態:
fly statusfly logs如果你看到 [gateway] listening on ws://0.0.0.0:3000,那就代表成功了!
5) 建立設定檔
Section titled “5) 建立設定檔”透過 SSH 進入機器來手動建立 openclaw.json:
fly ssh console在 SSH 視窗內執行以下指令:
mkdir -p /datacat > /data/openclaw.json << 'EOF'{ "agents": { "defaults": { "model": { "primary": "anthropic/claude-3-5-sonnet-latest", "fallbacks": ["openai/gpt-4o"] }, "maxConcurrent": 4 }, "list": [{ "id": "main", "default": true }] }, "auth": { "profiles": { "anthropic:default": { "mode": "token", "provider": "anthropic" }, "openai:default": { "mode": "token", "provider": "openai" } } }, "bindings": [ { "agentId": "main", "match": { "channel": "discord" } } ], "channels": { "discord": { "enabled": true, "groupPolicy": "allowlist", "guilds": { "你的_GUILD_ID": { "channels": { "general": { "allow": true } }, "requireMention": false } } } }, "gateway": { "mode": "local", "bind": "auto" }}EOF完成後輸入 exit 退出,並重啟機器套用設定:
fly machine restart <machine-id>6) 存取 Gateway
Section titled “6) 存取 Gateway”Control UI
Section titled “Control UI”直接在瀏覽器打開:
fly open或者前往 https://你的-app-名稱.fly.dev/。貼上你剛才設定的 OPENCLAW_GATEWAY_TOKEN 就能登入了。
fly logs # 即時日誌fly logs --no-tail # 最近的歷史日誌「App is not listening on expected address」
Section titled “「App is not listening on expected address」”這是因為 Gateway 綁定到了 127.0.0.1 而非 0.0.0.0。
解法: 檢查 fly.toml 的啟動指令是否有加上 --bind lan。
記憶體溢出 (OOM)
Section titled “記憶體溢出 (OOM)”如果看到 SIGABRT 或機器無故重啟,通常是記憶體不夠。
解法: 在 fly.toml 中將記憶體增加到 2048mb。512MB 真的跑不動,1GB 勉強,2GB 才是最穩定的選擇。
Gateway 鎖定問題 (Lock Issues)
Section titled “Gateway 鎖定問題 (Lock Issues)”如果重啟時提示「already running」,可能是上次關閉不正常留下了鎖定檔。 解法: 刪除鎖定檔後重啟:
fly ssh console --command "rm -f /data/gateway.*.lock"fly machine restart <machine-id>設定檔沒有生效
Section titled “設定檔沒有生效”確保你的 OPENCLAW_STATE_DIR 設定正確。
解法: 執行 fly ssh console --command "cat /data/openclaw.json" 確認檔案內容是否正確存在於 Volume 中。
Private Deployment (進階安全性)
Section titled “Private Deployment (進階安全性)”預設情況下,Fly 會配發公開 IP。如果你希望你的 Gateway 完全隱身,不被網路掃描器發現,可以使用私密部署。
- 你只發送主動訊息,不需要接收 Webhooks
- 你使用 Tailscale 或 ngrok 來處理回調
- 你只想透過
fly proxy或 VPN 存取 UI
使用 fly.private.toml 進行部署,或者手動釋放公開 IP:
fly ips release <public-ipv4> -a my-openclawfly ips allocate-v6 --private -a my-openclaw這樣一來,你就只能透過 fly proxy 3000:3000 在本地存取 UI,安全性大大提升。
如果你在部署過程中遇到任何奇怪的錯誤,隨時可以使用我們的工具: AI Setup Assistant
OpenClaw Expert
還是卡住了?
如果這篇文件沒有解決你的情境,直接問 OpenClaw Expert,拿到可執行步驟。