在群晖里养龙虾

背景

OpenClaw(aka ClawBot, MoltBot)火了一阵了,本来对于这种 LLM 套壳项目,准备保持“让子弹飞一会”的态度先观望下。但是最近看到这个项目的提示词觉得挺有意思,决定利用群晖部署一个玩玩。

部署

简单 Google 了一下没发现很直观的文档,遂决定自己挖坑尝试。首先在自带的 Container Manager 中切换镜像仓库到 https://docker.1ms.run,搜 openclaw 即可找到一个 alpine/openclaw。

dockerhub 中简单了解下相关信息,感觉靠谱,拉下来试试。

docker 部署方式可以参考官方文档,这里通过 Container Manager 启动的话需要注意预构建的镜像的方式差异,参考官方的 Dockerfiledocker-setup.sh添加以下配置:

  • 端口主要是 openclaw 用到的 gateway 和 bridge 的两个端口
  • 存储的话主要把 openclaw 家目录的配置目录挂载出来,后面需要修改

  • OPENCLAW_GATEWAY_TOKEN:这里的 token 是 gateway 所需要的,不加的话容器启动就会报错。直接使用 openssl rand -hex 32 命令生成一个粘贴进去即可。
  • OPENCLAW_GATEWAY_BIND:由于我是通过 tailscale 远程访问(或者说 NAS 大部分情况都是远程访问),这里需要修改为 lan 模式绑定到 0.0.0.0 的地址。(实际发现还得修改下面的启动命令,这里的必要性懒得验证了)

  • 实际测试发现启动命令的优先级更高,需要在后面添加 --bind lan 启动参数。

成功启动后直接访问 http://<tailscale-ip>:18789 即可进入 dashboard,不过会发现存在报错导致无法使用:

1
2
3
4
disconnected (1008): control ui requires HTTPS or localhost (secure context)
This page is HTTP, so the browser blocks device identity. Use HTTPS (Tailscale Serve) or open http://127.0.0.1:18789 on the gateway host.
If you must stay on HTTP, set gateway.controlUi.allowInsecureAuth: true (token-only).
Docs: Tailscale Serve · Docs: Insecure HTTP

主要原因是一些安全策略的限制,这里偷懒的话可以直接在之前挂载出来的目录中手动添加配置 allowInsecureAuth 来允许远程 http 访问。

在挂载的 /docker/openclaw 中新建 openclaw.json 文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"gateway": {
"bind": "lan",
"port": 18789,
"auth": {
"mode": "token",
"token": "<your-token>"
},
"controlUi": {
"enabled": true,
"allowInsecureAuth": true
}
}
}

配置好后重启之前的容器即可正常访问 dashboard。

配置

模型渠道

接下来需要修改模型供应商等配置,由于群晖 Container Manager 终端机交互实在太难用,这里选择直接通过 ssh 操作。

1
2
3
4
5
6
# 首先切到 root
sudo -i
# 查看容器名
docker ps -a
# 进入容器
docker exec -it openclaw bash

这时候会发现环境中没有 openclaw 命令,不过可以使用 node 直接启动入口文件 openclaw.mjs

1
2
root@R0siNas:~# docker exec -it openclaw bash
node@openclaw:/app$ node openclaw.mjs onboard

由于路由器目前不是常挂梯子的状态,这里先使用 qwen 渠道测试,配置参考阿里官方文档

上面的 onboard 流程大多可以直接先跳过,以下是我基于默认配置的修改部分:

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
31
32
33
34
35
36
37
38
39
40
41
42
"models": {
"providers": {
"bailian": {
"baseUrl": "https://dashscope.aliyuncs.com/compatible-mode/v1",
"apiKey": "<api-key>",
"api": "openai-completions",
"models": [
{
"id": "qwen3-max-2026-01-23",
"name": "qwen3-max-2026-01-23",
"reasoning": false,
"input": ["text"],
"contextWindow": 262144,
"maxTokens": 65536
},
{
"id": "qwen3-coder-plus",
"name": "qwen3-coder-plus",
"reasoning": false,
"input": ["text"],
"contextWindow": 131072,
"maxTokens": 32768
}
]
}
}
},
"agents": {
"defaults": {
"model": {
"primary": "bailian/qwen3-max-2026-01-23"
},
"models": {
"bailian/qwen3-max-2026-01-23": {}
},
"workspace": "/home/node/.openclaw/workspace",
"maxConcurrent": 4,
"subagents": {
"maxConcurrent": 8
}
}
},

保存后也可以通过 models list 命令确认配置成功(好像漏配了 coder,先不管):

1
2
3
4
5
6
7
8
node@openclaw:/app$ node openclaw.mjs models list

🦞 OpenClaw 2026.2.2 (unknown) — Gateway online—please keep hands, feet, and appendages inside the shell at all times.

Config was last written by a newer OpenClaw (2026.2.2); current version is 0.0.0.
Model Input Ctx Local Auth Tags
bailian/qwen3-max-2026-01-23 text 256k no yes default
google/gemini-3-flash-preview text+image 1024k no yes configured,alias:gemini-flash

dashboard 的 chat 中试了下也可以对话了。

网络搜索

这里使用官方推荐的 Brave Search API,每月有 5 刀(1000 条请求)的免费额度,需要绑定信用卡(也可以用 G PAY)才可以使用。

注意 Brave Search 在二月取消了免费层级的订阅,所以记得在 Usage limits 页面添加 5 刀的额度限制。

聊天客户端

飞书

客户端因为之前的梯子原因首先考虑飞书,可以使用 https://github.com/m1heng/clawdbot-feishu 这个插件对接,但是后续发现飞书注册企业级应用还需要管理员审核,先 pass 了。

Discord

在 Container Manager 中重新启动了一个 metacubex/mihomo 来配置代理(注意开放 7890/7891 端口),openclaw 的环境变量添加 HTTP_PROXY/HTTPS_PROXY/ALL_PROXY 环境变量后解锁外网访问,接下来尝试对接 Discord 机器人。

一番折腾下来发现 discord 的 websocket 连接不太好走代理,导致只能发送消息而无法回复。想开 tun 模式来强制代理的话还得挂载 nas 的网卡。搜了下发现 github 上已经有 discord proxy 的提交合并了,而 telegram 配置已支持 proxy,discord 就等镜像更新再配吧。

Telegram

telegram bot 配置的话可以参考这篇或者官方文档,简单来说就是去 @botfather 注册一个机器人,然后将回复的 token 添加到配置中,最后私聊得到 pairing code 后去 openclaw 命令配置即可。不想执行繁琐的 onboard 命令的话可以直接将下面官方示例的 json 片段粘贴到 config 的 channels 条目中:

1
2
3
4
5
6
7
8
9
10
{
channels: {
telegram: {
enabled: true,
botToken: "123:abc",
dmPolicy: "pairing",
groups: { "*": { requireMention: true } },
},
},
}

实际测试发现通过环境变量配置即可完成代理,无需额外配置 proxy

日常使用

OpenClaw 的应用场景比较丰富,可以当成一个沙箱内的智能助手使用。比如在 telegram bot 配置完成后,我让它很快完成了一个订阅总结的小功能,方便我每天快速浏览一些博客更新内容:

如果你也好奇这是如何实现的话:

可以发现 cron job 是提升 Agent agency 的一个简单有效的方法。最近 Anthropic 也宣布,Claude Code 的通用代理兄弟产品 Cowork 已支持设置定期任务。

当然通过插件功能还可以实现一些更高级的玩法,后面有空再尝试探索下。