在 Fly.io 上运行 OpenClaw Gateway,自动 HTTPS,持久化存储,约 $10-15/月。

前置条件

  • flyctl CLI 已安装
  • Fly.io 账号(免费层可用)
  • 模型 provider API key
  • Channel 凭证(Discord bot token 等)

快速部署

git clone https://github.com/openclaw/openclaw.git && cd openclaw
 
# 创建 app 和持久化卷
fly apps create my-openclaw
fly volumes create openclaw_data --size 1 --region iad
 
# 设置 secrets
fly secrets set OPENCLAW_GATEWAY_TOKEN=$(openssl rand -hex 32)
fly secrets set ANTHROPIC_API_KEY=sk-ant-...
fly secrets set DISCORD_BOT_TOKEN=MTQ...
 
# 部署
fly deploy

fly.toml 关键配置

app = "my-openclaw"
primary_region = "iad"
 
[env]
  NODE_ENV = "production"
  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
  min_machines_running = 1
 
[[vm]]
  size = "shared-cpu-2x"
  memory = "2048mb"
 
[mounts]
  source = "openclaw_data"
  destination = "/data"

关键设置:

  • --bind lan:绑定到 0.0.0.0,Fly proxy 才能访问
  • OPENCLAW_STATE_DIR=/data:状态持久化到卷
  • 内存 2048mb:512MB 太小,1GB 可能 OOM

访问 Gateway

fly open  # 或访问 https://my-openclaw.fly.dev/
fly logs  # 查看日志
fly ssh console  # SSH 进入容器

常见问题

“App is not listening on expected address”:添加 --bind lan 到 process 命令。

OOM / 内存问题:

fly machine update <machine-id> --vm-memory 2048 -y

Gateway lock 问题(“already running”):

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

私有部署(加固)

不分配公网 IP,仅通过 SSH/proxy/WireGuard 访问:

fly deploy -c deploy/fly.private.toml
fly proxy 3000:3000 -a my-openclaw  # 本地代理访问

适用场景:仅出站调用、使用 ngrok/Tailscale 处理 webhook、不想被互联网扫描器发现。

更新

git pull && fly deploy
fly status && fly logs

相关链接