作者 | Jean
OpenClaw火爆全网,“养龙虾”成为流行语。“龙虾”能自己上网、写报告、操作文档,像个不用睡觉的24小时的个人助理。
但“龙虾”的部署并不简单,90%的小白用户会被复杂的部署拦住。而且这只“龙虾”脾气不小,大模型自带的“幻觉”毛病,加上它手里握着的高权限,搞不好就会把服务器变成黑客的“虾塘”。连工信部都拉响了警报:配置不当,就是灾难级漏洞。
听起来很吓人?别慌。
作为一位文科生的家长,我刚给女儿在云服务器上安全地“养”了一只龙虾。这篇教程,就是我整理出来的“养虾笔记”——不用懂Linux内核,不用背网络安全术语,全程跟着点就行。
我们会用最土的办法(建个普通用户、扔进沙箱跑)、最稳的配置(HTTPS加密 + 密码令牌),把这只“小龙虾”伺候得服服帖帖,既能24小时干活,又把风险锁得死死的。
如果你也想给家人、给自己配一个这样听话的AI助理,又怕翻车,这篇小龙虾安全部署指南,就是为你准备的。
OpenClaw目前支持的国内即时通讯软件只有飞书,微信、钉钉等还不支持。因此OpenClaw中文社区就应运而生了,然后发布了OpenClaw中文社区版,目前支持飞书,微信、钉钉等即将上线。
以下就介绍一下在云服务器上的OpenClaw的安全部署。
01
安装OpenClaw中文社区版
我的云服务器装的是Ubuntu24, 云服务器上跑的绝大部分都是Linux,通过终端远程管理就可以,安全、高效、省心,所以OpenClaw火爆也会成为云服务器产业的一次机会。关键是,Linux用户管理非常周密,本篇会用普通用户openclaw来运行OpenClaw,让它运行在沙箱中,用root部署太危险了。如果是Windows用户,比如家庭电脑或笔记本电脑等,可以在Windows上装个WSL2,然后在Windws上跑起Ubuntu24,也在Linux上部署。这样比直接用Windows管理员身份运行OpenClaw要安全很多。
1、安装Node.js 22
OpenClaw是用Node.js开发的TypeScript(JavaScript)应用,要求Node.js 22+的版本,一般Ubuntu 24上带的Node.js,比如Anaconda建立的Python虚拟环境中,是Node.js 20,需要升级一下。比如下面我的Conda base环境中,就是Node.js 20,安装在/usr/lib64/anaconda3/bin目录下。
(base) root@VM-12-2-ubuntu:~# which node
/usr/lib64/anaconda3/bin/node
(base) root@VM-12-2-ubuntu:~# node -v
v20.17.0
用root的身份安装Node.js 22,如果有激活Conda虚拟环境要先退出,如果有为服务器配置VPN代理也要先屏蔽VPN的设置。
# conda deactivate
# export http_proxy=
# export https_proxy=
如果都没有,就直接安装。
# curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
# apt-get install -y nodejs
装好检查一下,安装在/usr/bin目录下,注意Conda虚拟环境没有激活。
root@VM-12-2-ubuntu:~# which node
/usr/bin/node
root@VM-12-2-ubuntu:~# node -v
v22.22.0
如果有需要,安装之前可以为Node.js设置国内的镜像,这样安装会快很多,比如设置为淘宝的镜像:
root@VM-12-2-ubuntu:~# npm config set registry
https://registry.npm.taobao.org
root@VM-12-2-ubuntu:~# npm config get registry
https://registry.npm.taobao.org
2、安装OpenClaw中文社区版
用root的身份安装。OpenClaw中文社区版与OpenClaw自动同步,应用的名字是openclaw-cn,多了“-cn”后缀,目前是0.1.7版,对应的应该是OpenClaw 2026.2.x或2026.3.x版,不过不一定是最新的版本,因为我发觉有些配置的选项它还不认识。
# npm install -g openclaw-cn@latest
验证安装:
root@VM-12-2-ubuntu:~# which openclaw-cn
/usr/bin/openclaw-cn
root@VM-12-2-ubuntu:~# openclaw-cn --version
0.1.7
02
配置OpenClaw网关服务
1、创建普通用户openclaw
这个用户将用于运行OpenClaw,以便把它限制在沙箱中,尽量减少大模型幻觉和网络入侵带来的风险,这是Linux系统固有的优点。
# adduser openclaw
这个命令会创建用户并提示输入并设置口令,创建home目录,设定同名用户组,指定登录后用bash。
2、配置OpenClaw网关服务
OpenClaw后端所有的功能都要通过网关服务来执行,它的原理图如下:
图1 OpenClaw原理架构图
如果按项目主页的指引,用root或其它system类型用户的身份运行下面的安装向导命令,就会在当前用户的~/.config/systemd/user/ 目录下创建openclaw-gateway.service系统服务配置文件,把网关配置为用户级的系统守护进程,但如果是root用户权限过大就太危险了。
先用root的身份运行一次上面的安装向导命令,具体操作可以参阅后面的第三节,它会生成root的用户级系统服务/root/.config/systemd/user/openclaw-gateway.service,把它拷贝成 /etc/systemd/system/openclaw-gateway.service,然后停止root用户的OpenClaw网关,取消激活以免端口冲突。
# openclaw-cn onboard --install-daemon
# cp/root/.config/systemd/user/openclaw-gateway.service /etc/systemd/system/openclaw-gateway.service
# systemctl --user stop openclaw-gateway
# systemctl --user disable openclaw-gateway
# systemctl --user daemon-reload
再为普通用户openclaw配置网关服务。它没有运行用户级系统进程的权限,所以我们用root的身份把OpenClaw网关服务配置为系统级的服务,然后以用户openclaw的身份运行服务,工作目录为其HOME目录。编辑服务配置文件:
(base) root@VM-12-2-ubuntu:~# cd /etc/systemd/system
(base) root@VM-12-2-ubuntu:/etc/systemd/system# vi openclaw-gateway.service
改好后内容要点如下:
1)以用户openclaw的身份运行。
2)工作目录为其HOME目录。
3)用/usr/bin/node运行,这是前面安装的Node.js 22,服务端口是默认的18789。
4)配置文件由环境变量
OPENCLAW_CONFIG_PATH=/home/openclaw/.openclaw/openclaw.json指定,在用户openclaw的目录下。这样设定是因为这个配置文件是OpenClaw前端和后端(网关)共用的,以后可以通过Control UI修改,然后重启网关即可生效。
5)这里设置的OPENCLAW_GATEWAY_TOKEN是用root初始化时设置的,会被openclaw.json中指定的token覆盖,也可以不设置。留下来只是看看它原来的样子。
6)严格限制openclaw网关的权限。
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
# ProtectHome=true
ReadWritePaths=/home/openclaw
不能设置ProtectHome,否则服务不能chdir到HOME目录,启动失败。要开放HOME目录/home/openclaw的读写权限,否则网关不能正常工作。
完整的内容如下:
[Unit]
Description=Openclaw Gateway (v0.1.7)
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=openclaw
Group=openclaw
WorkingDirectory=/home/openclaw
ExecStart="/usr/bin/node" "/usr/lib/node_modules/openclaw-cn/dist/entry.js" gateway --port 18789
Restart=always
RestartSec=5
KillMode=process
Environment=OPENCLAW_CONFIG_PATH=/home/openclaw/.openclaw/openclaw.json
Environment=HOME=/home/openclaw
Environment="PATH=/usr/local/bin:/usr/bin:/bin"
Environment=OPENCLAW_GATEWAY_PORT=18789
# 注:这个token是用root安装网关时创建的,会被openclaw.json里指定的token覆盖,已失效。
# Environment=OPENCLAW_GATEWAY_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Environment="OPENCLAW_SYSTEMD_UNIT=openclaw-gateway.serviceEnvironment=OPENCLAW_SERVICE_MARKER=openclaw
Environment=OPENCLAW_SERVICE_KIND=gateway
Environment=OPENCLAW_SERVICE_VERSION=0.1.7
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
# ProtectHome=true
ReadWritePaths=/home/openclaw
[Install]
WantedBy=multi-user.target
激活并启动网关服务:
# systemctl daemon-reload
# systemctl enable openclaw-gateway
# systemctl start openclaw-gateway
可以另开一个终端窗口实时查看网关服务的启动日志,看看启动中有什么错误:
journalctl -u openclaw-gateway.service -f
这是正常启动的跟踪日志:
Mar 06 10:56:20 VM-12-2-ubuntu systemd[1]: openclaw-gateway.service: Deactivated successfully.
Mar 06 10:56:20 VM-12-2-ubuntu systemd[1]: Stopped openclaw-gateway.service - Openclaw Gateway (v0.1.7).
Mar 06 10:56:20 VM-12-2-ubuntu systemd[1]: openclaw-gateway.service: Consumed 2min 44.117s CPU time, 1.3G memory peak, 0B memory swap peak.
Mar 06 10:56:37 VM-12-2-ubuntu systemd[1]: Started openclaw-gateway.service - Openclaw Gateway (v0.1.7).
然后可以查看服务器是否正常启动,侦听18789端口:
(base) root@VM-12-2-ubuntu:/etc/systemd/system# ss -lntp | grep 18789
LISTEN 0 511 0.0.0.0:18789 0.0.0.0:* users:(("clawdbot-gatewa",pid=2561966,fd=23))
正常运行时,在所有的IP(0.0.0.0,这个后面再讲,默认是127.0.0.1,loopback地址)上监听18789端口。
(base) root@VM-12-2-ubuntu:/etc/systemd/system# systemctl status openclaw-gateway
● openclaw-gateway.service - Openclaw Gateway (v0.1.7)
Loaded: loaded (/etc/systemd/system/openclaw-gateway.service; enabled; preset: enabled)
Active: active (running) since Fri 2026-03-06 10:56:37 CST; 14min ago
Main PID: 2561959 (openclaw-cn)
Tasks: 22 (limit: 9126)
Memory: 395.9M (peak: 1.3G)
CPU: 49.425s
CGroup: /system.slice/openclaw-gateway.service
├─2561959 openclaw-cn
└─2561966 clawdbot-gateway
Mar 06 10:57:10 VM-12-2-ubuntu node[2561966]: ' Mode of event/callback subscription(订阅方式)\n' +
Mar 06 10:57:10 VM-12-2-ubuntu node[2561966]: ' -> \n' +
Mar 06 10:57:10 VM-12-2-ubuntu node[2561966]: ' Receive events/callbacks through persistent connection(使用 长连接 接收事件/回调)'
Mar 06 10:57:10 VM-12-2-ubuntu node[2561966]: ]
Mar 06 10:57:10 VM-12-2-ubuntu node[2561966]: 2026-03-06T02:57:10.082Z [feishu] feishu[default]: WebSocket client started
Mar 06 10:57:10 VM-12-2-ubuntu node[2561966]: 2026-03-06T02:57:10.321Z [info]: [ '[ws]', 'ws client ready' ]
Mar 06 10:57:11 VM-12-2-ubuntu node[2561966]: 2026-03-06T02:57:11.662Z [bonjour] gateway name conflict resolved; newName="VM-12-2-ubuntu (Clawdbot) (2)"
Mar 06 10:57:11 VM-12-2-ubuntu node[2561966]: 2026-03-06T02:57:11.664Z [bonjour] gateway hostname conflict resolved; newHostname="VM-12-2-ubuntu-(2)"
Mar 06 10:57:19 VM-12-2-ubuntu node[2561966]: 2026-03-06T02:57:19.570Z [ws] Proxy headers detected from untrusted address. Connection will not be treated as local>
Mar 06 10:57:19 VM-12-2-ubuntu node[2561966]: 2026-03-06T02:57:19.597Z [ws] webchat connected conn=6b22b40d-c498-40b6-b52f-52344e1fd830 remote=127.0.0.1 client=cl>
lines 1-21/21 (END)
03
运行安装向导
这一步完成OpenClaw命令行工具(CLI)及WEB Control UI、接入渠道、LLM等的配置,以生成所有需要的配置文件,如飞书的配置等。
以登录的方式切换到新创建的openclaw用户。
# su -l openclaw
运行下面的安装向导命令,注意,不带--install-daemon选项,网关服务已经配置好了。
openclaw-cn onboard
它会创建所有需要的配置文件以及workspace目录,所有openclaw的文件都存放在.openclaw目录下,包括配置文件openclaw.json。
openclaw@VM-12-2-ubuntu:~/.openclaw$ ls
agents cron exec-approvals.json feishu-dedup.db-shm identity openclaw.json update-check.json
credentials devices feishu-dedup.db feishu-dedup.db-wal memory openclaw.json.bak workspace
接受安全警告,选择快速开始模式,会引导你配置各种需要的部件,包括飞书接入。配置的过程如下,注意里面讲的systemd不可访问,跳过配置,是因为我们把网关服务配置成了系统级的服务,不是OpenClaw原来的用户级系统服务,脚本检测不到,但不影响使用。
penclaw@VM-12-2-ubuntu:~$ openclaw-cn onboard
OpenClaw-CN 0.1.7 (415f7b6) — 将"I'll reply later"变为"my bot replied instantly"。
░████░█░░░░░█████░█░░░█░███░░████░░████░░▀█▀
█░░░░░█░░░░░█░░░█░█░█░█░█░░█░█░░░█░█░░░█░░█░
█░░░░░█░░░░░█████░█░█░█░█░░█░████░░█░░░█░░█░
█░░░░░█░░░░░█░░░█░█░█░█░█░░█░█░░█░░█░░░█░░█░
░████░█████░█░░░█░░█░█░░███░░████░░░███░░░█░
每日新鲜 ��
┌ OpenClaw安装引导
│
◇ 安全 ─────────────────────────────────────────────────────────────╮
│ 安全警告 — 请阅读。 │
│ │
│ OpenClaw是一个业余项目,仍处于测试阶段。可能会有粗糙之处。 │
│ 如果启用了工具,此机器人可以读取文件并执行操作。 │
│ 不良提示可能会诱使其执行不安全的操作。 │
│ │
│ 如果您不熟悉基本的安全和访问控制,请不要运行OpenClaw。 │
│ 在启用工具或将系统暴露给互联网之前,请寻求有经验的人士帮助。 │
│ │
│ 推荐的基础设置: │
│ - 配对/白名单 + @提及门控。 │
│ - 沙箱 + 最低权限工具。 │
│ - 将机密信息保留在智能体可访问的文件系统之外。 │
│ - 对于使用工具或不受信任收件箱的机器人,请使用最强大的可用模型。 │
│ │
│ 定期运行: │
│ openclaw-cn security audit --deep │
│ openclaw-cn security audit --fix │
│ │
│ 必读:https://clawd.org.cn/gateway/security.html │
├────────────────────────────────────────────────────────────────────╯
│
◇ 我理解这很强大且本质上存在风险。继续吗?
│ Yes
│
◇ 安装引导模式
│ 快速开始
│
◇ 检测到现有配置 ───────────────────╮
│ workspace: ~/.openclaw/workspace │
│ model: zai/glm-5 │
│ gateway.mode: local │
│ gateway.port: 18789 │
│ gateway.bind: lan │
├────────────────────────────────────╯
│
◇ 配置处理
│ 使用现有值
│
◇ 快速开始 ───────────────╮
│ 保留您当前的网关设置: │
│ 网关端口:18789 │
│ 网关绑定:局域网 │
│ 网关认证:令牌(默认) │
│ Tailscale暴露:关闭 │
│ 直接到聊天频道。 │
├──────────────────────────╯
│
◇ 模型/认证提供商
│ Z.AI (GLM-5)
│
◇ Z.AI (GLM-5) 认证方法
│ Z.AI (GLM-5) API key
│
◇ Enter Z.AI API key
│ xxxxxxxxxx
│
◇ Model configured ───────────────╮
│ Default model set to zai/glm-5 │
├──────────────────────────────────╯
│
◇ 默认模型
│ 保持当前(zai/glm-5)
│
◇ 通道状态 ─────────────────────╮
│ Telegram: 未配置 │
│ WhatsApp: 未配置 │
│ Discord: 未配置 │
│ Google Chat: 未配置 │
│ Feishu: 已配置(插件已禁用) │
│ Slack: 未配置 │
│ Signal: 未配置 │
│ iMessage: 未配置 │
│ Feishu: 安装插件以启用 │
├────────────────────────────────╯
│
◇ 通道工作原理 ─────────────────────────────────────────────────────────────────╮
│ DM安全:默认为配对;未知的私信会获得配对码。 │
│ 批准命令:openclaw-cn pairing approve <channel> <code> │
│ 公开私信需要dmPolicy="open" + allowFrom=["*"]. │
│ 多用户私信:设置session.dmScope="per-channel-peer" 来隔离会话。 │
│ 文档:start/pairing │
│ │
│ Telegram: 最简单的入门方式——使用 @BotFather注册一个机器人并开始使用。 │
│ WhatsApp: 使用您自己的号码工作;建议使用独立手机 + eSIM。 │
│ Discord: 目前支持非常好。 │
│ Google Chat: 带有HTTP webhook的Google Workspace聊天应用。 │
│ Feishu: 飞书/Lark机器人集成 (WebSocket)。 │
│ Slack: 已支持(Socket模式)。 │
│ Signal: signal-cli链接设备;更多设置(David Reagans说:"加入Discord吧。")。 │
│ iMessage: 这仍然是一个正在进行的工作。 │
├────────────────────────────────────────────────────────────────────────────────╯
│
◇ 选择通道(快速开始)
│ Feishu (Lark Open Platform)
│
◇ 安装Feishu插件?
│ 使用本地插件路径
03:52:31 [plugins] feishu_doc: Registered feishu_doc, feishu_app_scopes
03:52:31 [plugins] feishu_drive: Registered feishu_drive tool
03:52:31 [plugins] feishu_wiki: Registered feishu_wiki tool
03:52:31 [plugins] feishu_im: Registered feishu_im_list_chats, feishu_im_get_chat, feishu_im_list_members, feishu_im_send_message, feishu_im_reply_message, feishu_im_get_messages, feishu_im_create_chat
03:52:31 [plugins] feishu_task: Registered feishu_task tool (8 actions)
03:52:31 [plugins] feishu_calendar: Registered feishu_calendar tool (8 actions)
03:52:31 [plugins] feishu_sheets: Registered feishu_sheets tool (7 actions)
[feishu] plugins registered: 9 modules loaded
│
◇ Feishu已经配置。您想要进行什么操作?
│ 修改设置
│
◇ 选择平台 / Select platform
│ 飞书(国内版)
│
◇ 已选通道 ─────────────────────────────────────────────────╮
│ Feishu — 飞书/Lark enterprise messaging. 文档: │
│ feishu │
├────────────────────────────────────────────────────────────╯
Config overwrite: /home/openclaw/.openclaw/openclaw.json (sha256 6bfc049a9d315f90c88b131fdf82d072a495e4cff91199d4f3a5307c72ca776c -> 867f76512e58effcf20bb0121f1cb0a37d3740eb86843682196e375410185776, backup=/home/openclaw/.openclaw/openclaw.json.bak)
Updated ~/.openclaw/openclaw.json
工作区正常:~/.openclaw/workspace
会话正常:~/.openclaw/agents/main/sessions
│
◇ 技能状态 ──────────╮
│ 符合条件:51 │
│ 缺少需求:0 │
│ 被允许列表阻止:0 │
├─────────────────────╯
│
◇ 现在配置技能?(推荐)
│ No
│
◇ 钩子 ───────────────────────────────────────────╮
│ 钩子让您能够在代理命令发出时自动执行操作。 │
│ 例如:在您发出/new时将会话上下文保存到内存中。 │
│ │
│ 了解更多:https://docs.clawd.bot/hooks │
├──────────────────────────────────────────────────╯
│
◇ 启用钩子?
│ 暂时跳过
Config overwrite: /home/openclaw/.openclaw/openclaw.json (sha256 867f76512e58effcf20bb0121f1cb0a37d3740eb86843682196e375410185776 -> f248f7b04215fdd25bd87889613f690a8dd2198a5fcb447e99af04596fe6b1b5, backup=/home/openclaw/.openclaw/openclaw.json.bak)
│
◇ Systemd ───────────────────────────────────────────────────────────────────────────────╮
│ Systemd user services are unavailable. Skipping lingering checks and service install. │
├─────────────────────────────────────────────────────────────────────────────────────────╯
│
◇
Feishu: ok
Agents: main (default)
Heartbeat interval: 30m (main)
Session store (main): /home/openclaw/.openclaw/agents/main/sessions/sessions.json (1 entries)
- agent:main:main (1m ago)
│
◇ 可选应用 ───────────────────╮
│ 为额外功能添加节点: │
│ - macOS应用(系统+通知) │
│ - iOS应用(相机/画布) │
│ - Android应用(相机/画布) │
├──────────────────────────────╯
│
◇ 控制界面 ─────────────────────────────────────────────────────────────────────────────────╮
│ 网页界面:http://127.0.0.1:18789/ │
│ 网页界面(带令牌):http://127.0.0.1:18789/?token=xxxxxxxx │
│ xxxxxxxx │
│ 网关WS:ws://127.0.0.1:18789 │
│ 网关:可访问 │
│ 文档:https://docs.clawd.bot/web/control-ui │
├────────────────────────────────────────────────────────────────────────────────────────────╯
│
◇ 启动TUI(最佳选项!) ────────────────────╮
│ 这是定义性的操作,使您的智能体成为您的。 │
│ 请慢慢来。 │
│ 您告诉它的越多,体验就会越好。 │
│ 我们将发送:"醒来吧,我的朋友!" │
├────────────────────────────────────────────╯
│
◇ 令牌 ──────────────────────────────────────────────────────────────────────────────╮
│ 网关令牌:网关+控制界面的共享认证。 │
│ 存储在:~/.openclaw/openclaw.json(gateway.auth.token)或OPENCLAW_GATEWAY_TOKEN。 │
│ 网页界面在此浏览器的localStorage中存储副本(clawdbot.control.settings.v1)。 │
│ 随时获取带令牌的链接:openclaw-cn dashboard --no-open │
├─────────────────────────────────────────────────────────────────────────────────────╯
│
◇ 您想如何孵化您的机器人?
│ 在TUI中孵化(推荐)
│
◇ 工作区备份 ────────────────────────────────────────────╮
│ 备份您的智能体工作区。 │
│ 文档:https://docs.clawd.bot/concepts/agent-workspace │
├─────────────────────────────────────────────────────────╯
│
◇ 安全 ──────────────────────────────────────────────────────────────────────────────╮
│ 在您的计算机上运行智能体是有风险的——加强您的设置:https://docs.clawd.bot/security │
├─────────────────────────────────────────────────────────────────────────────────────╯
│
◇ 网络搜索(可选) ───────────────────────────────────────────────╮
│ 如果希望您的智能体能够搜索网络,则需要API密钥。 │
│ │
│ Clawdbot使用Brave Search作为`web_search`工具。没有Brave Search │
│ API密钥,网络搜索将无法工作。 │
│ │
│ 交互式设置: │
│ - 运行:openclaw-cn configure --section web │
│ - 启用web_search并粘贴您的Brave Search API密钥 │
│ │
│ 替代方案:在网关环境中设置BRAVE_API_KEY(无需更改配置)。 │
│ 文档:https://docs.clawd.bot/tools/web │
├──────────────────────────────────────────────────────────────────╯
│
◇ 接下来 ─────────────────────────────────────────────────────╮
│ 接下来:https://clawd.bot/showcase("人们正在构建什么")。 │
├──────────────────────────────────────────────────────────────╯
│
└ 安装引导完成。使用上面的带令牌仪表盘链接控制Clawdbot。
openclaw-cn tui - ws://127.0.0.1:18789 - agent main - session main session agent:main:main
这是配置好的openclaw.json文件,不能直接用这个文件替换,因为安装向导还会生成上述目录中的其它配置文件。配好后则可以直接改这个配置文件。要点如下:
1、模型配了用智谱AI最新的旗舰模型GLM-5,api_key在配置的过程中粘贴进去,会保存进上面列出的文件中(具体在哪还没有研究)。
2、工作区在/home/openclaw/.openclaw/workspace目录下。
3、渠道配置了飞书,这个后面第四节再具体讲。这里配置飞书渠道和飞书开放平台配置飞书应用要交叉进行。这里要填入飞书开放平台创建的飞书应用的App ID与App Secret,然后OpenClaw会创建一个到飞书开放平台的长连接,然后飞书应用配置中才可以继续配置第6步:配置事件订阅。
4、gateway一节,告诉网关服务怎样启动,前面配置了网关服务使用这里的定义。这里的配置跟后面WEB Control UI的访问方式有关。
1)mode为local,只接受本地(即本机IP)访问,后面通过配置Nginx反向代理来用域名从公网上访问它。
2)bind为lan,绑定到服务器所有的IP地址,以便可以接收来自网络的访问。它默认的是localhost,或127.0.0.1,不会接受来自网络的访问。改成0.0.0.0也可以。
3)allowInsecureAuth为true,允许不安全的来访,来自网络上浏览器不安全的来访先要能够通过网络层的过滤,才能走到后面身份绑定和权限管理的步骤。
4)网关验证的方式是token,每次配置时会生成不同的随机长token,这比口令要强。配好后,会通过https://jeanye.cn/?token=xxxxxxxx这样的方式去访问WEB Control UI,通过HTTPS保护明文传输的token,通过长token保护WEB Control UI不会被非授权的人访问。
5)tailscale设置为off,我们通过HTTPS+token的方式来访问WEB Control UI,安全性有保证,不走tailscale的方式(因为配置可能繁琐,我也不熟悉)。
5、plugins一节,飞书的插件是OpenClaw中文社区版自带的,安装时已装好,不要再从网上(remote)下载,否则会报一大串警告信息,说检测到重复的插件ID。在配置飞书时选择使用本地的插件即可。
{
"meta": {
"lastTouchedVersion": "0.1.7",
"lastTouchedAt": "2026-03-05T08:58:00.259Z"
},
"wizard": {
"lastRunAt": "2026-03-05T08:58:00.246Z",
"lastRunVersion": "0.1.7",
"lastRunCommand": "configure",
"lastRunMode": "local"
},
"auth": {
"profiles": {
"zai:default": {
"provider": "zai",
"mode": "api_key"
}
},
"order": {
"zai": [
"zai:default"
]
}
},
"agents": {
"defaults": {
"model": {
"primary": "zai/glm-5"
},
"models": {
"zai/glm-5": {
"alias": "GLM-5"
}
},
"workspace": "/home/openclaw/.openclaw/workspace",
"compaction": {
"mode": "safeguard"
},
"maxConcurrent": 4,
"subagents": {
"maxConcurrent": 8
}
}
},
"messages": {
"ackReactionScope": "group-mentions"
},
"commands": {
"native": "auto",
"nativeSkills": "auto"
},
"channels": {
"feishu": {
"accounts": {
"default": {
"appId": "cli_xxxxxx",
"appSecret": "xxxxxxxx",
"domain": "feishu",
"enabled": true
}
}
}
},
"gateway": {
"port": 18789,
"mode": "local",
"bind": "lan",
"controlUi": {
"allowInsecureAuth": true
},
"auth": {
"mode": "token",
"token": "xxxxxxxx"
},
"tailscale": {
"mode": "off",
"resetOnExit": false
}
},
"plugins": {
"load": {
"paths": [
"/usr/lib/node_modules/openclaw-cn/extensions/feishu"
]
},
"entries": {
"feishu": {
"enabled": true
}
}
}
}
04
安装配置飞书应用
具体可以参阅这篇网文《Openclaw 最细部署指南》第6章《进阶配置篇》中飞书的配置,篇幅较长,此处不重复赘述。其中关键的一点是,配置飞书渠道和配置飞书应用要交叉进行,因为配置飞书应用时,要等渠道配置这边创建了一个到飞书开放平台的长连接,才可以继续配置事件订阅。而配置渠道时,又要用配置应用时创建的App ID与App Secret。
Step 5:启用机器人能力
第三部分(插在这里):先在OpenClaw中配置飞书渠道并启动网关
方式一:通过配置向导(推荐)
启动网关,确认运行状态
保存配置后,启动(或重启)OpenClaw网关:
Step 6(回到飞书):配置事件订阅
在左侧菜单点击"事件订阅"。
接收事件的方式,选"使用长连接接收事件"(WebSocket模式)。
选好之后,在下方"添加事件"里搜索并添加:
可以把im:message的权限都选上,至少需要im.message.receive_v1权限。
应用配置好后,要发布,每次应用配置有变化都要发布应用,然后才会起作用。
飞书应用的权限可以按需要授予,你可以询问小龙虾某项工作需要飞书应用的什么权限,再授权,方便起见,我把云文档和多维表格,还有用户信息的权限都给了。因为执行的结果输出到云文档,在飞书App里直接就可以打开看和下载。
05
测试飞书APP
打开飞书(App或网页版),在应用搜索栏里搜索你创建的飞书应用名称。
图2 飞书App中搜索飞书应用
点击该应用,发送一个打招呼的消息,OpenClaw会返回一条要求绑定(批准)设备的回复,否则不能继续访问:
图3 从飞书应用向OpenClaw发送指令
在openclaw用户下执行上面的命令完成设备配对,每个飞书账户只需要执行一次:
$ openclaw-cn pairing approve feishu APQ4GMTH
配对完成后,现在再在飞书APP中让OpenClaw执行一个测试的命令:
图4 OpenClaw返回工作的结果
可以看到,OpenClaw以用户openclaw的身份运行,工作目录是/home/openclaw/.openclaw/workspace,这正是安全的沙箱运行方式,即使大模型出错,或被入侵,爆炸影响的范围会仅限于其HOME目录下的文件,风险要小很多。
现在可以愉快地和小龙虾玩耍啦。
06
配置从公网访问WEB Control UI
对于IT专业人士来说,通过文本终端界面远程管理OpenClaw是很方便,但对应于非IT专业人士,还是WEB Control UI图形界面方便易用很多,安装配置好了,直接交付使用即可。
1、配置Nginx反向代理
因为OpenClaw网关配置为local模式,它只能从本地访问,所以配置Nginx反向代理来从公网访问WEB Control UI。
vi /etc/nginx/nginx.conf
配置要点:
1)map配置以支持web-socket连接,OpenClaw Contorl UI是个Vite框架的JavaScript应用,它通过WebSocket协议直接访问服务器(ws://127.0.0.1:18789)。
2)转发的URI定位到根目录,因为OpenClaw Contorl UI里对WebSocket的访问URL是程序中写死的/(ws://127.0.0.1:18789),不支持反向代理到子目录。反向代理占用根目录的问题,也可以通过子域名来解决,就是为OpenClaw申请一个专用的子域名(要付费),然后在Let's Encrypt中签个带子域名的数字证书。子域名和主域名都映射到同一个IP,由Nginx去分流。这里简单起见直接占用根目录了,因为在我的服务器上根目录原来就是个欢迎页,也没有别的用途。
3) 除了根URI外,其它反向代理的设置不受影响,比如这里VPN服务器mihomo Dashboard的反向代理。
4)反向代理中最关键的一句是:
proxy_set_header Origin http://127.0.0.1:18789;
浏览器的访问请求到达OpenClaw时,都带有Origin header,因为网关配置为local模式,OpenClaw不会接收其它IP来源的访问,直接就返回403 Forbidden错误,在WEB Control UI页面上就会显示与后端网关的连接是(见Issue#19248):
disconnected (1006): no reason
这个设置让Nginx替换所有浏览器请求的Origin hearder为loopback地址,OpenClaw就会认为是本地访问,予以通过。
反向代理的具体配置如下,配在https server下,用Lets's Encrypt免费的数字证书。
......
http {
......
# Support proxying of web-socket connections
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
......
# Server on http:443 http2
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name jeanye.cn;
# Let's Encrypt's cert & key
ssl_certificate /etc/letsencrypt/live/jeanye.cn/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/jeanye.cn/privkey.pem;
# / 根目录让给了OpenClaw,因为它的WebSocket要连接WSS://jeanye.cn根目录
# location / {
# root /srv/nginx;
# index index.html;
# autoindex on;
# }
......
location / {
proxy_pass http://127.0.0.1:18789;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Origin http://127.0.0.1:18789;
proxy_read_timeout 86400;
proxy_send_timeout 86400;
proxy_buffering off;
}
# Reverse proxy for mihomo dashboard
rewrite ^/mihomo$ $scheme://$http_host/mihomo/ permanent;
location /mihomo/ {
rewrite ^/mihomo/(.*)$ /$1 break;
proxy_pass http://localhost:9090/;
proxy_redirect / $scheme://$http_host/mihomo/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_read_timeout 20d;
proxy_buffering off;
}
}
}
2、从浏览器访问OpenClaw Control UI
输入地址https://jeanye.cn/?token=xxxxxxxx访问WEB Control UI,这个token就是前面配置网关时指定的访问token,比口令要长,有足够的复杂性可以保护Control UI免受非授权的访问。因为token是作为参数明文传输的,所以要在https加密连接下使用,有关用Let's Encrypt免费数字证书配置Nginx,请参阅我的知乎文章《在HTTS中使用Let's Encrypt的数字证书》。
图5 OpenClaw的Dashboard
Control UI中可以直接和OpenClaw对话,指挥它干活,这样对于电脑上输入数据很方便,可以直接从磁盘选择、打开、拷贝然后粘贴进去。
图6 在OpenClaw Dashboard中直接发送执行任务
07
交付
把小龙虾交付给用户,需要为飞书应用添加新成员。在飞书App中点击右上角的“+”按钮,选择“添加企业成员”,再选择“输入手机号”,输入手机号和新成员姓名,点击“添加成员”,会发送一条消息到对方的飞书App,对方确认即可。
图7 添加飞书App新成员
然后是在飞书应用中添加新成员。点击“成员管理”,“添加协作人员”,输入成员名字选中添加,并设定新成员的角色。
图8 飞书应用添加新成员
我在飞书应用中创建发布版本时设置了可用范围是所有员工,新成员在搜索应用时才可以看到这个飞书应用,新成员只能看到企业中Ta能看到的飞书应用,也可以设定飞书应用只有部分成员可见,然后选择可见成员的名单。
新成员搜到飞书应用后,在飞书App中向小龙虾发出指令,小龙虾会像前面一样要求应用所有者进行设备绑定(批准)。
图9 新成员也需要进行设备绑定
然后就可以正常使用了,这是女儿要求小龙虾生成了一个Excel报表,发回她的飞书App中浏览、下载,这样完整的任务流程就执行完成了。
图10 小龙虾创建了执行结果并写入到云文档
图11 小龙虾生成云文档的分享链接并返回到飞书App
全流程跑通,女儿现在拥有了一个24小时在线的小龙虾打工人,慢慢饲养调教即可。
Done。
08
总结
这个安全饲养小龙虾的方案,可以总结为几个要点。
1、 不用root运行Gateway
•用普通用户openclaw启动,运行在 沙箱环境
•避免了OpenClaw或Node.js被利用时对系统的全局权限
•防止潜在漏洞被用来提权或篡改系统文件
✅ 这比官方文档里直接用root 启动安全得多
2、公网访问通过HTTPS + token
•HTTPS:保证浏览器 ↔ Nginx ↔ Gateway 通信加密,防止中间人抓包token
•token:避免任何没有授权的人直接访问Gateway
•Origin header:模拟 local-origin,使 Gateway 在 local 模式下允许 WebSocket 连接
✅ 完全解决403/1006/1008断连问题,又保证安全
3、Gateway 运行在 local 模式 + Nginx 反向代理
•local 模式限制浏览器访问必须模拟 local-origin
•反向代理确保公网访问不会直接暴露18789
•长超时 + proxy_buffering off 保证 WebSocket 长连接稳定
✅ 结合 HTTPS + token,是当前最稳定的生产方案
这个部署方案在安全性和稳定性上是当前最优实践:普通用户运行、沙箱隔离、HTTPS + token、Nginx 反向代理、local 模式 + Origin 伪装。
