Deploy Moltbot To Fly技能使用说明
将Moltbot部署到Fly.io
将Moltbot(Clawdbot)部署到Fly.io,并进行适当的配置、持久化存储和设备配对。
概述
将Moltbot部署到Fly.io需要:

- 使用持久卷设置Fly应用
- 配置环境密钥(API密钥、网关令牌)
- 创建包含令牌认证的适当配置文件
- 批准设备配对以访问Web UI
先决条件
开始前:
- 已安装Fly.io CLI(
brew install flyctl或curl -L https://fly.io/install.sh | sh) - Fly.io账户并已登录(
fly auth login) - Anthropic API密钥(以及可选的OpenAI API密钥)
- 已安装Git
第一阶段:克隆与设置
1.1 克隆Moltbot代码库
git clone https://github.com/clawdbot/clawdbot.git moltbot-deploy
cd moltbot-deploy
1.2 生成网关令牌
生成一个用于身份验证的安全令牌:
openssl rand -hex 32
重要提示:请保存此令牌——您将需要它用于:
- Fly机密设置
- 配置文件
- Web UI访问网址
第二阶段:Fly.io配置
2.1 创建fly.toml文件
创建fly.toml文件,并配置正确的设置:
app = 'your-app-name'
primary_region = 'iad'
[build]
dockerfile = 'Dockerfile'
[env]
NODE_ENV = 'production'
CLAWDBOT_PREFER_PNPM = '1'
CLAWDBOT_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 = 'moltbot_data'
destination = '/data'
关键设置:
CLAWDBOT_STATE_DIR = '/data'- 确保配置持久化所必需--bind lan- 允许Fly的代理访问网关http_service- 新的Fly格式(而非[[services]])memory = '2048mb'- 512MB 太小;推荐 2GB
2.2 创建应用和卷
fly apps create your-app-name
fly volumes create moltbot_data --region iad --size 1 -a your-app-name -y
选择一个离您较近的区域:
iad- 弗吉尼亚(美国东部)lhr- 伦敦sjc- 圣何塞(美国西部)
2.3 设置 Fly 密钥
# Set your generated token
fly secrets set CLAWDBOT_GATEWAY_TOKEN="YOUR-TOKEN-HERE" -a your-app-name
# Set API keys
fly secrets set ANTHROPIC_API_KEY="sk-ant-xxxxx" -a your-app-name
fly secrets set OPENAI_API_KEY="sk-xxxxx" -a your-app-name # Optional
注意:密钥在首次运行fly deploy时部署,而非立即生效。
阶段 3:部署
部署应用程序:
fly deploy -a your-app-name
首次部署大约需要 3-5 分钟(构建 Docker 镜像)。
等待网关启动:
fly logs -a your-app-name --no-tail | grep "listening on"
您应该看到:
[gateway] listening on ws://0.0.0.0:3000 (PID xxx)
阶段 4:创建配置文件
关键提示:配置文件必须包含与环境变量相同的令牌,身份验证才能生效。
4.1 通过 SSH 连接到机器
fly ssh console -a your-app-name
4.2 创建配置文件
cat > /data/moltbot.json << 'EOF'
{
"gateway": {
"mode": "local",
"bind": "lan",
"auth": {
"mode": "token",
"token": "YOUR-TOKEN-HERE"
}
},
"agents": {
"defaults": {
"model": {
"primary": "anthropic/claude-opus-4-5"
}
}
},
"auth": {
"profiles": {
"anthropic:default": { "mode": "token", "provider": "anthropic" }
}
}
}
EOF
将YOUR-TOKEN-HERE替换为您的实际令牌!
4.3 退出并重启
exit
fly machine restart <machine-id> -a your-app-name
通过以下命令获取机器ID:fly machines list -a 您的应用名称
阶段 5:访问与设备配对
5.1 等待DNS传播
DNS传播可能需要2-5分钟。检查状态:
nslookup your-app-name.fly.dev 8.8.8.8
如果您的机器上DNS未解析,请刷新DNS缓存:
macOS:
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
Linux:
sudo systemd-resolve --flush-caches
5.2 访问Web界面
在浏览器中使用包含令牌的URL打开:
https://your-app-name.fly.dev/?token=YOUR-TOKEN-HERE
您将看到“已断开连接 (1008):需要配对” - 这是正常的!
5.3 批准设备配对
在浏览器保持打开并尝试连接时,批准配对:
fly ssh console -a your-app-name
然后运行:
node -e "
const fs = require('fs');
const pending = JSON.parse(fs.readFileSync('/data/devices/pending.json'));
const paired = JSON.parse(fs.readFileSync('/data/devices/paired.json') || '{}');
const requestId = Object.keys(pending)[0];
if (requestId) {
const device = pending[requestId];
paired[device.deviceId] = {
deviceId: device.deviceId,
publicKey: device.publicKey,
platform: device.platform,
clientId: device.clientId,
role: device.role,
roles: device.roles,
scopes: device.scopes,
approvedAt: Date.now(),
approvedBy: 'cli'
};
delete pending[requestId];
fs.writeFileSync('/data/devices/pending.json', JSON.stringify(pending, null, 2));
fs.writeFileSync('/data/devices/paired.json', JSON.stringify(paired, null, 2));
console.log('Approved device:', device.deviceId);
} else {
console.log('No pending devices');
}
"
5.4 刷新浏览器
批准后,刷新您的浏览器。您现在应该已经连接上了!🎉
故障排除
网关令牌不匹配
症状: 未经授权:网关令牌不匹配
解决方案:配置文件中的令牌必须与环境变量匹配:
# Check env var token
fly ssh console -a your-app-name -C "printenv CLAWDBOT_GATEWAY_TOKEN"
# Update config file to match
fly ssh console -a your-app-name
# Edit /data/moltbot.json and update gateway.auth.token
应用未监听 / 连接被拒绝
症状: 实例拒绝连接或未在预期地址上监听
解决方案:确保--bind lan在 fly.toml 中且网关已完全启动:
fly logs -a your-app-name --no-tail | tail -50
部署后等待 30-60 秒,以便网关初始化。
DNS 未解析
症状: 无法解析主机
解决方案:
- 等待 2-5 分钟进行 DNS 传播
- 使用 Google DNS:
8.8.8.8或1.1.1.1 - 刷新本地DNS缓存(参见第5.1阶段)
配置验证错误
症状:网关退出并显示“无效输入”或验证错误
修复:检查配置语法:
fly ssh console -a your-app-name -C "cat /data/moltbot.json"
常见问题:
- 无效的
auth.mode:仅"token"有效(而非"off") - JSON中缺少逗号
- 引号不匹配
状态未持久化
症状:重启后配置/设备被重置
修复:确保CLAWDBOT_STATE_DIR=/data已在 fly.toml 中设置[env]部分。
部署卡住
症状:机器不断重启或无法稳定运行
终极解决方案(最快):
fly apps destroy your-app-name -y
# Then re-run Phase 2 onwards with fresh setup
高级:受信任代理(可选)
如果在日志中看到代理警告,请添加受信任代理:
fly ssh console -a your-app-name
node -e "
const fs = require('fs');
const config = JSON.parse(fs.readFileSync('/data/moltbot.json'));
config.gateway.trustedProxies = [
'172.16.0.0/12',
'10.0.0.0/8'
];
fs.writeFileSync('/data/moltbot.json', JSON.stringify(config, null, 2));
console.log('Trusted proxies configured');
"
更改后重启机器。
快速参考
# Check status
fly status -a APP
# View logs
fly logs -a APP --no-tail | tail -50
# SSH into machine
fly ssh console -a APP
# Restart machine
fly machines list -a APP # Get machine ID
fly machine restart <machine-id> -a APP
# Check secrets
fly secrets list -a APP
# Get gateway token
fly ssh console -a APP -C "printenv CLAWDBOT_GATEWAY_TOKEN"
# Redeploy
fly deploy -a APP
更新
要更新 Moltbot:
cd moltbot-deploy
git pull
fly deploy -a your-app-name
配置和已配对的设备在更新过程中会持久保存在卷上。
关键要点
`CLAWDBOT_STATE_DIR=/data`至关重要 - 没有它,配置位置会出错- 令牌必须同时存在于环境变量 **和** 配置文件中
- 使用
`http_service`而不是`[[services]]`(较新的 Fly 格式) - 需要进行设备配对即使使用令牌认证
- DNS解析需要时间- 等待2-5分钟,必要时刷新缓存
- 全新部署通常比调试损坏的状态更快 至少需要2GB内存
- - 512MB会导致内存不足,1GB可能可以运行,但建议使用2GB资源


微信扫一扫,打赏作者吧~