在 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 deployfly.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 -yGateway 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相关链接
- install-hetzner — Hetzner VPS 部署
- install-docker — Docker 安装