背景
引子:项目名字比代码变得还快
这两周,一个叫做 OpenClaw(或Moltbot,又或者 Clawdbot)的AI Agent突然大火,据说还带动了 Mac mini m4 的销售。客户和领导在群里一句"这个很火,看看能不能上架一个镜像",我便开始了这段折腾之旅。
首先困扰我的不是技术,而是这项目改名太频繁了——从 Clawdbot 到 Moltbot 再到 OpenClaw。我 git clone 时看名字都觉得是不是自己下错了,而且隔天升级发现又变了一个名字了。我只能安慰自己:名字不重要,重要的是它确实能自动给你打工。
我们的目标是:构建镜像 → 上架算力云平台 → Demo 给客户看。听起来简单,对吧?
折腾过程
第一章:本地安装同时构建镜像
官方提供了三种安装方式,最香的自然是一键脚本 curl -fsSL https://openclaw.ai/install.sh | bash。 官方提供了 Dockerfile和docker-setup.sh命令,但是没上架镜像,是不是担心流量太贵,于是我尝试来构建一下镜像。 我打的镜像在这里 cnrock/openclaw:2026.1.30
构建搞了2天,主要原因是 vps 内存不给力,切换本地构建嘛,网络不给力。
几个报错
第一个报错 frame too large
|
1 2 |
ERROR: listing workers: failed to list workers: Unavailable: connection error: desc = "error reading server preface: http2: frame too large" |
解决套路很常规:重启试试。
|
1 2 3 4 5 6 7 8 9 10 11 |
# 重启 Docker 服务 sudo systemctl restart docker # 删除现有 Buildx 构建器 docker buildx rm mybuilder 2>/dev/null || true # 创建新的构建器 docker buildx create --use --name multiarch-builder # 重新运行构建 docker buildx build --progress=plain --platform linux/amd64,linux/arm64 -f Dockerfile -t cnrock/openclaw:v1 . --push |
第2个报错 JavaScript Heap Out of Memory
|
1 2 3 |
#21 370.0 FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory 370.3 3: 0x1216eb7 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, v8::OOMDetails const&) [node] ERROR: failed to solve: process "/bin/sh -c OPENCLAW_A2UI_SKIP_MISSING=1 pnpm build" did not complete successfully: exit code: 134 |
在构建 ARM64 镜像时,Node.js 默认内存限制在多架构编译压力下直接爆掉:
vps 没个大内存机器真别玩多架构构建。
鉴于节点还是有 swap 内存的,尝试加参数看看,后来没这个报错了
|
1 2 |
# 设置 Node.js 内存限制 ENV NODE_OPTIONS="--max-old-space-size=4096" |
第3个报错 no active session
no active session
找到了这个 issue https://github.com/docker/buildx/issues/456
引出了另一篇 ,buildx 升级,待后续有空写,暂时放弃buildx 多架构,直接本地docker 构建通过了
|
1 |
ERROR: failed to solve: DeadlineExceeded: failed to push cnrock/moltbot:v1-amd64: no active session for 2n6drhn4mikq0mn14h621ypw7: context deadline exceeded |
第二章:安装的"灵魂拷问"
使用很香的一键脚本安装,真正的交互式"盘问"开始了。这安装程序设计得非常"贴心"——贴心到每个步骤都要你确认,仿佛在说:**"你真的知道自己在干什么吗?"**
第一关:安全警告
|
1 2 3 4 5 |
``` Please read: https://docs.clawd.bot/security Clawdbot agents can run commands, read/write files... I understand this is powerful and inherently risky. Continue? ``` |
翻译一下:"这玩意儿能删你根目录,确定要继续吗?" 当然要,来都来了。
### 第二关:模型选择困难症
安装程序列出了一长串模型提供商,从 OpenAI、Anthropic 到国内的 Qwen、MiniMax,甚至还有 Venice AI、Z.AI 这种小众选择。
|
1 2 3 4 5 6 7 8 9 |
``` ◆ Model/auth provider │ ● OpenAI (Codex OAuth + API key) │ ○ Anthropic │ ○ MiniMax │ ○ Qwen │ ○ Moonshot AI │ ...(还有十几个选项) ``` |
我先选择了 **Skip for now**,因为后面可以通过配置文件注入,更适合容器化场景。
第三关:Channel 选择
程序问你要连哪些聊天渠道:Telegram、WhatsApp、Discord、Slack、钉钉...足足列出了十几种。我选择了 **Skip for now**(后来手动配置了qwen,这是后话)。
第四关:Homebrew 的执念
程序强烈推荐安装 Homebrew 来管理依赖,甚至给出了安装命令。但在容器里装 Homebrew? 但直接安装又告诉你 root 用户别玩 brew。
我选择了 npm 作为包管理器,并跳过了 Skill 依赖安装(后面发现有些功能确实因此受限,这是取舍)。
第四章:网关暴露的"安全悖论"
安装完成后,程序贴心地提示:
Dashboard link (with token): http://127.0.0.1:18789/?token=。。。。。。。
No GUI detected. Open from your computer:
ssh -N -L 18789:127.0.0.1:18789 [email protected]
默认绑定在 127.0.0.1(loopback),意味着只有本机能访问。这对于服务器部署很不友好——我总不能每次看面板都先 SSH 打隧道吧?
于是我想:改成 LAN 模式,监听所有网卡试试:
|
1 2 3 4 5 |
```bash clawdbot configure --section gateway # 选择 LAN (All interfaces) clawdbot gateway restart ``` |
改完访问,浏览器给了我一个冰冷的错误:
|
1 2 3 |
``` disconnected (1008): control ui requires HTTPS or localhost (secure context) ``` |
**顿悟时刻**:这是个安全设计!浏览器不允许在非安全上下文(非 HTTPS 或 localhost)中传输敏感 token。这意味着:
1. **本地开发**:用 localhost 没问题
2. **服务器部署**:必须上 HTTPS 证书
3. **直接暴露 IP**:被明确禁止
这也解释了为什么网上有那么多暴露的 OpenClaw 面板被扫描出来——很多人为了图方便,要么用 HTTP 暴露,要么把 token 写死在配置里。设置其他更多的key信息也暴露了。
第五章:使用篇
开始 接入国产模型(通义千问)
clawdbot configure --section model
既然要上架国内算力云,用 OpenAI API 不太现实。我接入了阿里云的通义千问:
|
1 2 3 4 5 6 |
◆ Model/auth provider │ ○ OpenAI (Codex OAuth + API key) │ ○ Anthropic │ ○ MiniMax │ ● Qwen (OAuth) │ ○ Moonshot AI |
会让你在线激活
|
1 2 3 |
│ Open https://chat.qwen.ai/authorize?user_code=QL8QXQYK&client=qwen-code to approve │ │ access. │ │ If prompted, enter the code QL8QXQYK. |
顺便解决
# 重启网关生效
clawdbot gateway restart
这里有个有趣的细节:Qwen 的 API 兼容 OpenAI 格式(compatible-mode/v1),这大大降低了接入成本。国内大模型厂商都在走"兼容 OpenAI 接口"的路线,这是一种务实的选择——既照顾了开发者习惯,又降低了迁移成本。
试玩
Webui 截图


bot在自动干活中

尾声:安全的冷思考
在整理这篇文章时,我搜索了一下暴露在互联网上的 OpenClaw/Moltbot 面板,结果触目惊心:
- 大量面板直接使用 HTTP 暴露,token 直接写在 URL 参数里
- 有些甚至配置了允许任意 IP 访问的 CORS
- 更严重的,有些实例的 .clawdbot 目录权限是 755,其他用户可读
这与各大云厂商(AWS、腾讯云、阿里云)力推"一键部署 Moltbot 云服务"形成了鲜明对比。**矛盾在于**:云服务需要便捷性,往往意味着更宽松的默认配置;而 AI Agent 的权限又极大(能执行命令、读写文件、访问代码仓库)。然后据说云厂商又开始搞各种阉割版。
给读者的建议:
没搞懂前千万别图方便随便暴露服务。
1. **永远不要**在没有 HTTPS 的情况下暴露 Control UI
2. **定期运行** clawdbot security audit,关注权限警告
例如这个
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
openclaw security audit 🦞 OpenClaw 2026.1.30 (76b5208) — Your terminal just grew claws—type something and let the bot pinch the busywork. OpenClaw security audit Summary: 1 critical · 2 warn · 1 info Run deeper: openclaw security audit --deep CRITICAL models.small_params Small models require sandboxing and web tools disabled Small models (<=300B params) detected: - public/deepseek-r1-distill-qwen-32b (32B) @ agents.defaults.model.fallbacks (unsafe; sandbox=off; web=[web_fetch, browser]) Uncontrolled input tools allowed: web_fetch, browser. Small models are not recommended for untrusted inputs. Fix: If you must use small models, enable sandboxing for all sessions (agents.defaults.sandbox.mode="all") and disable web_search/web_fetch/browser (tools.deny=["group:web","browser"]). WARN gateway.trusted_proxies_missing Reverse proxy headers are not trusted gateway.bind is loopback and gateway.trustedProxies is empty. If you expose the Control UI through a reverse proxy, configure trusted proxies so local-client checks cannot be spoofed. Fix: Set gateway.trustedProxies to your proxy IPs or keep the Control UI local-only. fs.credentials_dir.perms_readable Credentials dir is readable by others /root/.openclaw/credentials mode=755; credentials and allowlists can be sensitive. Fix: chmod 700 /root/.openclaw/credentials INFO summary.attack_surface Attack surface summary groups: open=0, allowlist=0 tools.elevated: enabled hooks: disabled browser control: enabled |
3. **使用 sandbox** 模式限制 Agent 的文件系统访问范围
4. **Token 管理**:考虑使用反向代理(Nginx/Caddy)做额外的鉴权层,不要只依赖应用自身的 token
结语:追风者的自白
从 "这名字到底叫啥" 到 "这面板千万别乱暴露",这趟追风之旅充满了技术细节的魔鬼。OpenClaw/Moltbot/Clawdbot 确实是一个强大的工具——它能读代码、改配置、甚至自己 debug,但它也需要使用者有足够的安全意识。
最后附上我们的双架构镜像(如果构建成功的话):
bash
docker pull cnrock/openclaw:2026.1.30
`
或者,如果你也想体验构建过程的"乐趣",可以从上面的 Dockerfile 开始,记得给 Node.js 多分配点内存。
**毕竟,追风没问题,但别被风刮跑了。**
---
参考资料:
- OpenClaw 官网:https://openclaw.ai/
- Moltbot 项目:https://www.molt.bot/
- AWS 部署指南:https://aws.amazon.com/cn/blogs/china/deploying-moltbot-to-the-cloud/
文章评论