跳到內容

Fly.io 部署指南:讓你的 OpenClaw 永久在線

我以前總愛把機器人跑在自己的筆電或舊的樹莓派上,但每次遇到停電或網路斷線,服務就直接掛掉。後來我發現 Fly.io 簡直是救星,它能讓你用極簡的步驟把 Docker 容器丟上雲端,還自帶 HTTPS 和穩定的儲存空間。如果你想讓 OpenClaw 24 小時不間斷地為你工作,這就是最推薦的路徑。

在開始動手之前,請確保你已經準備好這四樣東西:

  • 已安裝 flyctl CLI
  • 一個 Fly.io 帳號(免費額度通常就夠用了)
  • 模型 API Key:例如 Anthropic 或 OpenAI
  • 頻道憑證:例如 Discord bot token 或 Telegram token

如果你趕時間,這是在 5 分鐘內跑起來的最小路徑:

  1. Clone 專案並根據需求修改 fly.toml
  2. 建立 App 與 Volume,並設定 Secrets
  3. 執行 fly deploy 開始部署
  4. 透過 SSH 進入機器建立設定檔或使用 Control UI

先從終端機進入專案目錄,並建立你的應用程式空間:

Terminal window
# Clone 專案
git clone https://github.com/openclaw/openclaw.git
cd openclaw
# 建立新的 Fly app(名字可以自己取)
fly apps create my-openclaw
# 建立持久化儲存空間(1GB 通常就很夠用了)
fly volumes create openclaw_data --size 1 --region iad

小撇步: 選擇離你近的區域(Region)。常見的選項有:lhr (倫敦)、iad (維吉尼亞)、sjc (聖荷西) 或 hkg (香港)。

編輯專案根目錄下的 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 比較穩定

不要把 API Key 直接寫在設定檔裡,用 Fly 的 Secrets 功能才安全:

Terminal window
# 必要:設定 Gateway token
fly secrets set OPENCLAW_GATEWAY_TOKEN=$(openssl rand -hex 32)
# 模型供應商 API keys
fly secrets set ANTHROPIC_API_KEY=sk-ant-...
fly secrets set OPENAI_API_KEY=sk-...
# 頻道 Token
fly secrets set DISCORD_BOT_TOKEN=MTQ...

請把這些 Token 當作密碼一樣保護。建議優先使用環境變數而非 openclaw.json 來存放 API Key,這樣可以避免密鑰被意外記錄在日誌中。

一切就緒後,執行部署指令:

Terminal window
fly deploy

第一次部署會花大約 2-3 分鐘建立 Docker Image,之後的更新會快很多。部署完成後,你可以檢查狀態:

Terminal window
fly status
fly logs

如果你看到 [gateway] listening on ws://0.0.0.0:3000,那就代表成功了!

透過 SSH 進入機器來手動建立 openclaw.json:

Terminal window
fly ssh console

在 SSH 視窗內執行以下指令:

Terminal window
mkdir -p /data
cat > /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 退出,並重啟機器套用設定:

Terminal window
fly machine restart <machine-id>

直接在瀏覽器打開:

Terminal window
fly open

或者前往 https://你的-app-名稱.fly.dev/。貼上你剛才設定的 OPENCLAW_GATEWAY_TOKEN 就能登入了。

Terminal window
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。

如果看到 SIGABRT 或機器無故重啟,通常是記憶體不夠。 解法: 在 fly.toml 中將記憶體增加到 2048mb。512MB 真的跑不動,1GB 勉強,2GB 才是最穩定的選擇。

如果重啟時提示「already running」,可能是上次關閉不正常留下了鎖定檔。 解法: 刪除鎖定檔後重啟:

Terminal window
fly ssh console --command "rm -f /data/gateway.*.lock"
fly machine restart <machine-id>

確保你的 OPENCLAW_STATE_DIR 設定正確。 解法: 執行 fly ssh console --command "cat /data/openclaw.json" 確認檔案內容是否正確存在於 Volume 中。

預設情況下,Fly 會配發公開 IP。如果你希望你的 Gateway 完全隱身,不被網路掃描器發現,可以使用私密部署。

  • 你只發送主動訊息,不需要接收 Webhooks
  • 你使用 Tailscale 或 ngrok 來處理回調
  • 你只想透過 fly proxy 或 VPN 存取 UI

使用 fly.private.toml 進行部署,或者手動釋放公開 IP:

Terminal window
fly ips release <public-ipv4> -a my-openclaw
fly ips allocate-v6 --private -a my-openclaw

這樣一來,你就只能透過 fly proxy 3000:3000 在本地存取 UI,安全性大大提升。


如果你在部署過程中遇到任何奇怪的錯誤,隨時可以使用我們的工具: AI Setup Assistant

OpenClaw

OpenClaw Expert

還是卡住了?

如果這篇文件沒有解決你的情境,直接問 OpenClaw Expert,拿到可執行步驟。