网淘吧来吧,欢迎您!

Deploy Moltbot To Fly技能使用说明

2026-04-01 新闻来源:网淘吧 围观:18
电脑广告
手机广告

将Moltbot部署到Fly.io

将Moltbot(Clawdbot)部署到Fly.io,并进行适当的配置、持久化存储和设备配对。

概述

将Moltbot部署到Fly.io需要:

Deploy Moltbot To Fly

  1. 使用持久卷设置Fly应用
  2. 配置环境密钥(API密钥、网关令牌)
  3. 创建包含令牌认证的适当配置文件
  4. 批准设备配对以访问Web UI

先决条件

开始前:

  • 已安装Fly.io CLI(brew install flyctlcurl -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 未解析

症状: 无法解析主机

解决方案:

  1. 等待 2-5 分钟进行 DNS 传播
  2. 使用 Google DNS:8.8.8.81.1.1.1
  3. 刷新本地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

配置和已配对的设备在更新过程中会持久保存在卷上。

关键要点

  1. `CLAWDBOT_STATE_DIR=/data`至关重要 - 没有它,配置位置会出错
  2. 令牌必须同时存在于环境变量 **和** 配置文件中
  3. 使用`http_service`而不是`[[services]]`(较新的 Fly 格式)
  4. 需要进行设备配对即使使用令牌认证
  5. DNS解析需要时间- 等待2-5分钟,必要时刷新缓存
  6. 全新部署通常比调试损坏的状态更快 至少需要2GB内存
  7. - 512MB会导致内存不足,1GB可能可以运行,但建议使用2GB资源

Fly.io 文档

免责申明
部分文章来自各大搜索引擎,如有侵权,请与我联系删除。
打赏

文章底部电脑广告
手机广告位-内容正文底部

相关文章

您是本站第393714名访客 今日有1篇新文章/评论