腾讯云新加坡VPS+1Panel+DOCKER部署MoltBot指南2026

AI赚钱5天前更新 sevennight
133 0 0

第一篇:基础环境准备 (基础设施)

1. VPS 选择与初始化

  • 硬件建议​:2C2G 为起步配置,推荐 4C8G 以备后续挂载更多 Subagents。
  • 系统选择​:Ubuntu 24.04 LTS。
  • 1Panel 安装​:使用官方一键脚本。安装后在“应用商店”确保 Docker 和 Docker Compose 已就绪。

2. 网络权限开放 (安全组)

在腾讯云控制台和 1Panel 防火墙中,必须手动开放:

  • 18789​:Moltbot 默认监听端口,用于网关通信与 Canvas 预览。

3、 AI模型的选择

建议使用智谱的GLM-4.7模型,许多专业人员都认为是国内可以媲美Claude 4.5的,个人使用过MiniMax-M2 130M token,GLM-4.6 80M token,还用过Qwen3-Coder-480B ,Kimi-K2-Instruct ,实际感觉还是GLM在coding方面强一些。推荐使用官方链接:https://www.bigmodel.cn/glm-coding?ic=IORXTLCLVM

也可以使用硅基流动的,免费可获得2000万token,可以使用大部分国内主流文本生图音频甚至是视频模型:https://cloud.siliconflow.cn/i/kQTQzfuz

注册登录之后,可以获得Base_url和api-key。

4、 Discord 机器人凭证获取与设置

实现对话的第一步,必须确保权限配置正确,否则机器人无法“看见”或“回复”消息。

腾讯云新加坡VPS+1Panel+DOCKER部署MoltBot指南2026 腾讯云新加坡VPS+1Panel+DOCKER部署MoltBot指南2026 腾讯云新加坡VPS+1Panel+DOCKER部署MoltBot指南2026
  1. 创建应用: 访问 Discord Developer Portal,点击 New Application​。
  2. 获取 Token: 在左侧菜单点击 Bot​。 点击 Reset Token 并复制。这就是你的 DISCORD_BOT_TOKEN(​务必妥善保管,不要泄露​)。
  3. 开启特权意图(关键): 在 Bot 页面向下滚动,找到 Privileged Gateway Intents​。 必须开启​:MESSAGE CONTENT INTENT(允许机器人读取消息内容)。 建议开启​:SERVER MEMBERS INTENT(用于识别用户信息)。备注:我截图中选择了 Presence Intent ,不用选择这个。
  4. 生成邀请链接: 左侧菜单进入 Installation 或 OAuth2 -> URL Generator​。 Scopes 勾选:bot。 Bot Permissions 勾选:Administrator(最简单)或至少勾选 Send Messages、Read Message History、Embed Links、Attach Files(为了 GLM-4.6V 的视觉功能)。 复制生成的 URL 在浏览器打开,将机器人邀请进你的服务器。

第二篇:部署过程

1、1Panel 面板安全部署流程

为了防止 API Key 泄露及 VPS 数据安全,建议严格执行以下步骤:

1. 目录结构与权限初始化

进入 1Panel 文件管理:

  • 创建目录:/opt/apps/moltbot
  • 在该目录下创建子目录 data 用于持久化存储。
  • 权限加固​:点击 moltbot 文件夹“权限”,设置所有者为 root 或 1panel,权限设为 755。

2. 编写 .env 环境变量文件

/opt/docker/compose/moltbot 下新建 .env 文件。

安全提示​:在 1Panel 中将此文件权限设为 600​。

Bash

# ------------------------------
# AI 模型配置 (SiliconFlow)
# ------------------------------
# 适配 SiliconFlow 必须确保 API_KEY 和 BASE_URL 准确
OPENAI_API_BASE=https://api.siliconflow.cn/v1
OPENAI_API_KEY=vvv


# 建议模型名称变量统一,确保视觉逻辑被触发
AI_PROVIDER=siliconflow
DEFAULT_MODEL=deepseek-ai/DeepSeek-V3.2
MODEL=deepseek-ai/DeepSeek-V3.2
ENABLE_VISION=true

# ------------------------------
# Moltbot 特有配置
# ------------------------------
# 这里的 Token 必须与 docker-compose.yml 中 --token 后的参数完全一致
MOLTBOT_GATEWAY_TOKEN=bbb
CLAWDBOT_GATEWAY_TOKEN=bbb
MOLTBOT_EXTERNAL_URL=http://2.2.2.2:18789

SANDBOX_MODE=non-main

# 禁用消息下方的“查看详情”按钮链接 (Invalid URL 的主要元凶)
MOLTBOT_DISCORD_METADATA=false

# 禁用画布预览链接
MOLTBOT_CANVAS_ENABLED=false
MOLTBOT_EXTERNAL_URL=http://2.2.2.2:18789

3. 创建 配置文件(moltbot.json)

在 项目目录/opt/apps/moltbot 下新建 moltbot.json文件。内容如下:

{
  "meta": {
    "lastTouchedVersion": "2026.1.27-beta.1",
    "lastTouchedAt": "2026-01-30T04:54:20.036Z"
  },
  "models": {
    "providers": {
      "siliconflow": {
        "baseUrl": "https://api.siliconflow.cn/v1",
        "apiKey": "ccc",
        "api": "openai-completions",
        "models": [
          {
            "id": "deepseek-ai/DeepSeek-V3.2",
            "name": "DeepSeek-V3.2",
            "reasoning": false,
            "input": [
              "text"
            ],
            "cost": {
              "input": 0,
              "output": 0,
              "cacheRead": 0,
              "cacheWrite": 0
            },
            "contextWindow": 128000,
            "maxTokens": 32000
          }
        ]
      }
    }
  },
  "agents": {
    "defaults": {
      "model": {
        "primary": "siliconflow/deepseek-ai/DeepSeek-V3.2"
      },
      "maxConcurrent": 4,
      "subagents": {
        "maxConcurrent": 8
      }
    }
  },
  "messages": {
    "ackReactionScope": "group-mentions"
  },
  "commands": {
    "native": "auto",
    "nativeSkills": "auto"
  },
  "channels": {
    "discord": {
      "enabled": true,
      "groupPolicy": "open",
      "dm": {
        "policy": "allowlist",
        "allowFrom": [
          "11111"
        ]
      }
    }
  },
  "gateway": {
    "mode": "local",
    "auth": {
      "token": "{{MOLTBOT_GATEWAY_TOKEN}}"
    }
  },
  "plugins": {
    "entries": {
      "discord": {
        "enabled": true
      }
    }
  }
}

4. 创建 Docker 编排 (docker-compose.yml)

在 1Panel -> 容器 -> 编排 中新建编排,因为1panel这里路径不能选择项目目录,必须是:/opt/docker/compose/,路径可以添加moltbot,内容如下:

YAML

services:
  moltbot-gateway:
    image: node:22-slim
    container_name: moltbot-app
    restart: unless-stopped
    environment:
      - HOME=/home/node
      - MOLTBOT_DATA_DIR=/home/node/.moltbot
      - NODE_OPTIONS=--max-old-space-size=768
    working_dir: /home/node/moltbot
    command:
      [
        "node",
        "dist/index.js",
        "gateway",
        "--bind",
        "lan",
        "--port",
        "18789",
        "--token",
        "ccc",
        "--allow-unconfigured"
      ]
    env_file:
      - .env
    volumes:
      - /opt/moltbot/source:/home/node/moltbot:ro
      - /opt/moltbot/data:/home/node/.moltbot:rw
      - /var/run/docker.sock:/var/run/docker.sock
    ports:
      - "18789:18789"
    init: true

networks:
  default:
    name: moltbot_net

4、 使用与交互方式

如果部署成功并启动后(可在 1Panel 容器日志看到 Ready 字样),

2026-01-30T04:59:27.285Z [heartbeat] started
2026-01-30T04:59:27.289Z [gateway] agent model: siliconflow/deepseek-ai/DeepSeek-V3.2
2026-01-30T04:59:27.291Z [gateway] listening on ws://0.0.0.0:18789 (PID 7)
2026-01-30T04:59:27.293Z [gateway] log file: /tmp/moltbot/moltbot-2026-01-30.log
2026-01-30T04:59:27.408Z [browser/service] Browser control service ready (profiles=2)
2026-01-30T04:59:28.105Z [discord] [default] Discord Message Content Intent is limited; bots under 100 servers can use it without verification.
2026-01-30T04:59:28.107Z [discord] [default] starting provider (@moltbot)
2026-01-30T04:59:28.413Z [discord] users resolved: 834866
2026-01-30T04:59:29.861Z [discord] logged in to discord as 15719

之后你可以通过以下方式操作(但是一般人都没有这么幸运,请继续往下看):

1. Discord 基础对话

  • @机器人 或直接在私聊中发送:你好,你是谁?
  • 如果配置了 GLM-4.6V,你可以直接上传图片并询问:分析一下这张图里的代码哪里写错了?

2. WebUI 管理

  • 如果你在 1Panel 开放了 18789 端口,可以访问 http://VPS_IP:18789。
  • 系统会要求输入 .env 中设置的 MOLTBOT_GATEWAY_TOKEN。
  • 在这里你可以实时监控机器人的运行状态和技能调用。

第三篇:安全加固与维护

这是最容易被忽视的一步。 默认情况下,Linux 文件的权限是 644,这意味着系统内其他普通用户可以读取你的 .env(包含 Discord Token 和 API Key)。

1. 强制执行 0600 权限

在宿主机终端执行以下命令,确保只有 root 用户能触碰这些敏感文件:

Bash

# 锁定环境变量文件
chmod 600 /opt/docker/compose/moltbot/.env

# 锁定核心配置文件
chmod 600 /opt/moltbot/data/moltbot.json

# 确认权限
ls -l /opt/docker/compose/moltbot/.env
# 应显示: -rw------- 1 root root ...

2. 身份验证安全

在 2026 Beta 版中,Moltbot 引入了 Pairing Code 机制。为了安全,建议:

  • 不要向任何人透露你的 MOLTBOT_GATEWAY_TOKEN。
  • 白名单机制​:在 moltbot.json 中通过 allowFrom 锁定你的 Discord User ID。

3. 容器沙箱权限

由于 Moltbot 具备 local 模式(可以执行 shell 指令),如果不限制白名单,任何能接触到机器人的用户都可能通过 prompt 注入来探测你的 VPS 目录。

  • 对策​:仅开启必要的 Discord 频道,并严格配置 groupPolicy: “allowlist”。

第四篇:进阶排错与“外科手术”诊断

当容器启动后,如果 Discord 依然报错或无反应,我们需要使用以下四组“手术刀”命令剥离真相。

1. 路径探针:确认“家”在哪里

指令​:docker exec -it moltbot-app ls -l /home/node/

  • 深度分析​:通过此命令,我们发现该版本 Moltbot 将程序放在 moltbot 目录,而配置锁死在隐藏目录 .moltbot。确认这个路径,是所有后续 cat 和 grep 操作的前提。

2. 配置审计:抓捕“未解析占位符”

指令​:docker exec -it moltbot-app grep baseUrl /home/node/.moltbot/moltbot.json

  • 实战结论​:如果我们看到 “baseUrl”: “{{OPENAI_API_BASE}}”,说明 模板引擎失效了​。程序没有把环境变量填进 JSON。这种带有 {{}} 的非法 URL 是导致 Discord 报 Invalid URL 的物理元凶。

3. 逻辑诊断:机器人的“心电图”

指令​:docker exec -it moltbot-app node dist/index.js channels status --probe

  • 核心反馈​: intents:content=limited:确认“听力”依然受限。 in: 13m ago:确认消息流是否真正到达过网关。

4. 流量监听:查看“求救信号”

指令​:docker logs -f moltbot-app

  • 发现​:若看到 [canvas] host mounted at http://0.0.0.0…,说明外部访问地址被误设为 0.0.0.0。Discord 客户端无法跳转到该回环地址,触发 Invalid URL。

第五篇:安装过程中的天坑

第一坑:环境准备与源码编译 (解决“镜像拉取失败”坑)

如果你发现 docker-compose.yml 无法下载 ghcr.io/moltbot/moltbot 镜像,最稳妥的办法是本地克隆并编译​。

1. 克隆代码至 1Panel 应用目录

Bash

# 进入 1Panel 应用推荐存放目录
mkdir -p /opt/apps/moltbot
cd /opt/apps/moltbot

# 克隆源码并命名为 source 文件夹
git clone https://github.com/moltbot/moltbot.git source
cd source

2. 本地构建环境 (Node.js 22+)

为了加快速度,建议使用国内或新加坡优化的镜像源:

Bash

# 1. 设置镜像源加速
npm config set registry https://registry.npmmirror.com

# 2. 安装构建所需的依赖
npm install

# 3. 执行编译任务,生成 dist 运行时文件夹
npm run build

执行完毕后,你会发现 source/dist 文件夹已生成,这就是机器人的“心脏”。

第二坑:目录结构与路径对齐 (解决“1Panel 路径冲突”坑)

🚨 关键预警: 1Panel 在执行 Docker 编排时,会将配置文件强制保存在 /opt/docker/compose/moltbot。如果你的 .env 放在别处,编排时将无法读取。

1. 规范路径映射

为了遵循 1Panel 的设计逻辑,建议将所有核心文件移动到编排目录下:

Bash

# 确保编排目录存在
mkdir -p /opt/docker/compose/moltbot

# 将 .env 文件从应用目录移动到编排目录
mv /opt/apps/moltbot/.env /opt/1panel/docker/compose/moltbot/.env

2. 最终目录视图

  • 编排与环境变量​:/opt/docker/compose/moltbot/ (docker-compose.yml, .env)
  • 持久化数据​:/opt/apps/moltbot/data/ (moltbot.json)
  • 源码运行时​:/opt/apps/moltbot/source/

第三坑:编排配置实战 (Docker Compose)

在 1Panel 的“编排”面板中,使用以下配置。注意我们直接挂载源码目录以运行:

YAML

version: '3.8'
services:
  moltbot-app:
    image: node:22-slim # 使用轻量级 Node 镜像直接运行编译后的代码
    container_name: moltbot-app
    working_dir: /home/node/moltbot
    restart: always
    env_file:
      - .env # 此时 .env 必须在当前编排目录下
    volumes:
      # 挂载编译好的源码
      - /opt/apps/moltbot/source:/home/node/moltbot
      # 挂载数据目录
      - /opt/apps/moltbot/data:/home/node/.moltbot
      - /var/run/docker.sock:/var/run/docker.sock
    ports:
      - "18789:18789"
    command: ["node", "dist/index.js"]

第四坑:模型适配与非默认模型配置 (解决“模型报错”坑)

对于追求极致性能的用户,往往不使用默认模型,而是选择 DeepSeek 3.2或者GLM-4.7 等高性能多模态模型。

1. 修改 moltbot.json 核心配置

请确保 moltbot.json 中的 agentsmodels 块严格对应。注意如果选取的不是Openai或者Anthropic这些非标准厂商前缀的处理,因此请仔细查看我之前粘贴的文件内容,参数和格式错误都会导致启动故障。

2. 对应的 .env 文件配置

确保变量名与 JSON 中的占位符(若使用模板)完全一致,但在本地编译版中,推荐直接在 JSON 写死:

代码段

OPENAI_API_BASE=https://api.siliconflow.cn/v1
OPENAI_API_KEY=sk-vvvv...

3.用 CLI 强行注入“真实值” (The Hardcode Strike)

在排查的最后阶段,我们发现即便 .env 变量配置正确,Moltbot 内部的模板引擎(Template Engine)仍旧将 {{OPENAI_API_BASE}} 当作原始字符串处理。这导致程序尝试向一个字面意思为 {{OPENAI_API_BASE}}/v1/chat/completions 的地址发请求。这种包含大括号的非标准 URL 是任何 HTTP 客户端都无法解析的,也是 Discord 报错 Invalid URL 的元凶。

为了绕过这个解析 Bug,我们使用了 Moltbot 自带的配置管理工具进行“强制写实”:

1. 强制写入真实的 API 基址

指令:

Bash

docker exec -it moltbot-app node dist/index.js config set models.providers.siliconflow.baseUrl https://api.siliconflow.cn/v1
  • 深度分析​: 作用​:该命令直接跳过了 .env 的读取逻辑,通过 Moltbot 内部的运行时 API,将物理文件 moltbot.json 中的 baseUrl 字段直接修改为字符串 https://api.siliconflow.cn/v1。 结果​:程序发出的请求从 POST {{OPENAI_API_BASE}}/v1/… 变为了 POST https://api.siliconflow.cn/v1/…。 意义​:这是解决“无效 URL”最彻底的办法——让地址回归标准格式。
2. 强制写入真实的 API 密钥

指令:

Bash

docker exec -it moltbot-app node dist/index.js config set models.providers.siliconflow.apiKey "你的真实KEY"
  • 深度分析​: 作用​:同样的操作逻辑,将密钥字段硬编码进 JSON。 安全性注意​:在终端执行此命令时,密钥会暂时留在你的 Bash 历史记录 中。 建议操作​:执行完后建议运行 history -c 清理终端历史,或在 1Panel 面板内直接编辑文件。

安全考量:权衡与防护

将 API Key 明文写入容器挂载卷是否安全?我们需要理性分析。

1. 风险评估
  • 宿主机内​:拥有 root 权限的人或能执行 docker exec 的用户可以直接 cat 到密钥。
  • 跨容器/网络​:只要文件权限设置正确,外部用户和其它容器无法获取。
  • 避坑​:只要不将密钥写进 Dockerfile 并构建成镜像,密钥就不会随镜像泄露。
  • 结论​:对于个人 VPS 或小团队,“明文配置 + 宿主机 600 权限” 已经兼顾了调试效率与安全性。
2. 权限加固 (必须执行)

由于 moltbot.json 现在包含了明文密钥,必须收紧宿主机文件权限:

Bash

chmod 600 /opt/apps/moltbot/data/moltbot.json
chown root:root /opt/apps/moltbot/data/moltbot.json
备注:安全考虑:处理“硬编码”后的后遗症

但是由于我们使用了 config set 强行将密钥写入了物理文件,这带来了一个新的安全课题:配置文件的权限管控​。

因此建议:

警惕“写实”后的明文暴露​: 当你通过 config set 成功修复 Invalid URL 后,你的 moltbot.json 文件中已经包含了明文 API Key。此时,绝对禁止将该文件上传到任何公共仓库(如 GitHub)。同时,请在宿主机执行 chmod 600 /opt/apps/moltbot/data/moltbot.json,确保只有 root 用户能读取这个包含“财富密码”的文件。


第六篇:故障排错四大核心“手术刀”命令

在 Docker 容器这个“黑盒”里,这四组命令分别代表了:路径探针、配置审计、逻辑诊断、流量监听​。

1. 路径探针:确认“家”在哪里

执行指令:

Bash

docker exec -it moltbot-app /bin/bash
pwd
ls -l /home/node/

深度分析:

  • 作用​:确认容器内真实的程序运行目录(CWD)。
  • 实战意义​:在本次排错中,我们发现程序安装在 /home/node/moltbot,但数据目录挂载在 /home/node/.moltbot(注意那个点,是隐藏文件夹)。
  • 发现的问题​:如果宿主机的挂载路径(Volume)映射错了容器内部路径,那么你修改宿主机的 moltbot.json,容器内部根本看不见。通过 ls -l 确认 clawd 和 moltbot 目录的共存,帮我们锁定了配置文件其实是在 .moltbot 目录下。

2. 配置审计:寻找“未解析的占位符”

执行指令:

Bash

docker exec -it moltbot-app grep baseUrl /home/node/.moltbot/moltbot.json

深度分析:

  • 作用​:直接穿透容器,检查物理配置文件里的真实内容。
  • **为什么这是“破案”关键?**​: 如果返回:”baseUrl”: “https://api.siliconflow.cn/v1″ —— 说明环境变量注入成功。 如果返回:”baseUrl”: “{{OPENAI_API_BASE}}” —— 这是重大发现! 说明模板引擎没有生效。程序直接拿着 {{…}} 这串字符去请求网络,Discord 收到这种非法字符自然会报 Invalid URL。
  • 结论​:这个命令帮我们确认了“.env 环境变量 -> JSON 模板解析”这一链路在 Beta 版中已断裂,从而坚定了我们“手动写死(Hardcode)配置”的决心。

3. 逻辑诊断:机器人的“心电图”

执行指令:

Bash

docker exec -it moltbot-app node dist/index.js channels status --probe

深度分析:

  • 作用​:这是 Moltbot 内置的最高级别诊断工具,它跳过网络层,直接检查程序内部逻辑状态。
  • 输出关键项解读​: **token:env**​:确认程序正在尝试从环境变量读取 Token。 **intents:content=limited**​:这是第二个重大发现。 意味着机器人虽然登录了,但“听力受限”。它能看到有人在说话,但看不见说话的内容。这直接指向了 Discord Developer Portal 的 Message Content Intent 开关没开,或者 JSON 里没声明权限。 **in:13m ago**​:记录了最后一次接收到信号的时间。如果时间很久没更新,说明 Webhook 或 WebSocket 连接已断开。

4. 流量监听:查看实时“求救信号”

执行指令:

Bash

docker logs -f moltbot-app --tail 50

深度分析:

  • 作用​:实时滚动查看容器的控制台输出。
  • 实战价值​: **[canvas] host mounted at http://0.0.0.0…**​:通过这一行,我们发现了 0.0.0.0 这个非法 IP 正在被作为回调地址使用,这是导致 Discord 客户端报错的物理根源。 **device pairing auto-approved**​:确认了网关认证已经通过,排除了认证层面的嫌疑,将火力集中在应用层配置。

📝 5. 排错逻辑小结:如何像专家一样思考?

当遇到“没反应”或“报错”时,请按此顺序自问:

  1. 进程在吗? (docker ps)
  2. 配置写进去了吗? (grep JSON 里的占位符是否被替换)
  3. 地址对吗? (日志里是否有 0.0.0.0 这种无法访问的地址)
  4. 听得见吗? (status –probe 里的 intents 是否为 works)
© 版权声明

相关文章

暂无评论

暂无评论...