OpenClaw控制机器人配置总结
架构说明
整个部署架构其实很清晰,主要就两个核心角色:
- OpenClaw Gateway机器:作为控制中心,IP地址是 192.168.1.5。
- OpenClaw Node 机器人:通常部署在树莓派这类设备上,它才是真正干活儿的执行端,负责提供摄像头、麦克风、扬声器等硬件能力。
它们之间的连接方式也很直接:通过 WebSocket 协议进行内网直连。这里有个关键点,为了在内网环境下简化配置,我们通过设置环境变量,允许使用明文的 ws:// 连接。当然,如果涉及到跨公网,那就必须切换为加密的 wss:// 或者使用 SSH 隧道了。
Gateway 配置关键点
要让 Gateway 准备好接收 Node 的连接,配置上需要关注几个核心参数。下面这段配置示例可以说把要点都涵盖了:
{
"port": 18789,
"mode": "local",
"bind": "lan", // 监听所有网络接口
"auth": {
"mode": "token", // 使用 token 认证
"token": "xxx" // 节点连接时需提供此 token
}
}
简单来说,就是让 Gateway 在本地模式运行,监听所有局域网接口,并启用 Token 认证机制来确保只有合法的 Node 才能接入。
Node 配置步骤
Node 端的配置,核心思路是将其包装成一个系统服务,确保它能随系统启动、异常退出后能自动恢复。下面我们一步步拆解。
1. 创建服务文件
首先,我们需要创建一个 systemd 服务文件,这是实现后台稳定运行的关键。文件内容大致如下:
[Unit] Description=OpenClaw Node Service After=network.target Wants=network.target [Service] Type=simple User=jack Group=jack WorkingDirectory=/home/jack EnvironmentFile=/home/jack/.openclaw/openclaw-node.env ExecStart=/usr/bin/openclaw node run --host $OPENCLAW_GATEWAY_HOST --port $OPENCLAW_GATEWAY_PORT --display-name "RaspPi-node" Restart=always RestartSec=10 StandardOutput=journal StandardError=journal [Install] WantedBy=multi-user.target
这个服务文件有几个配置项值得特别说明:
| 配置项 | 作用 | 备注 |
|---|---|---|
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 |
允许明文 ws:// 连接 | 仅用于可信内网,跨网需用 wss:// 或 SSH 隧道 |
EnvironmentFile |
分离敏感配置 | 便于管理和权限控制 |
Restart=always |
自动重连 | 网络断开或进程崩溃时自动恢复 |
这里有个小提示:如果 Gateway 的配置中 bind 参数设置的是 loopback(这是本地模式的默认值),那么远程的 Node 是无法直接连接它的。这时候,SSH 隧道就成了一个优雅的解决方案。
# 终端A:在Gateway机器上,将本地端口转发出去
ssh -N -L 18790:127.0.0.1:18789 user@gateway-host
# 终端B:Node通过本地隧道端口连接
export OPENCLAW_GATEWAY_TOKEN=""
openclaw node run --host 127.0.0.1 --port 18790 --display-name "Build Node"
2. 创建环境文件
敏感信息和连接参数最好独立出来,放在环境变量文件里。我们通常将其放在 /home/jack/.openclaw/openclaw-node.env。
OPENCLAW_GATEWAY_HOST=192.168.1.5 # Gateway IP
OPENCLAW_GATEWAY_PORT=18789 # Gateway 端口
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 # 允许内网明文连接
OPENCLAW_GATEWAY_TOKEN=f3b04ac3b2aa... # Gateway token
3. 创建 systemd 符号链接
为了让系统识别我们的服务,需要创建一个符号链接到 systemd 的系统目录。
sudo ln -s /home/jack/.openclaw/openclaw-node.service /etc/systemd/system/openclaw-node.service
4. 设置权限(安全)
由于环境文件包含了 Token 等敏感信息,务必限制其访问权限。
chmod 600 /home/jack/.openclaw/openclaw-node.env
5. 启动并启用服务
最后,重载 systemd 配置,启动服务并设置开机自启。
sudo systemctl daemon-reload
sudo systemctl start openclaw-node.service
sudo systemctl enable openclaw-node.service
6. Node权限配置
配置到这一步,Node 已经能连上 Gateway 了。但每次在 Gateway 上通过命令行向 Node 发送指令时,可能还会弹出一个授权确认框。为了提高自动化程度,我们可以预先配置好命令执行的白名单。
# 首先,查看一下当前针对 “RaspPi-node” 的审批配置
openclaw approvals get --node "RaspPi-node"
# 然后,为这个节点添加允许列表。有两种思路:
# 方法1:添加通配符,允许执行任何命令(适合完全受控的测试环境)
openclaw approvals allowlist add --node "RaspPi-node" "*"
# 方法2:精细化控制,只添加常用目录的允许列表(更安全)
openclaw approvals allowlist add --node "RaspPi-node" "/usr/bin/*"
openclaw approvals allowlist add --node "RaspPi-node" "/bin/*"
openclaw approvals allowlist add --node "RaspPi-node" "/usr/local/bin/*"
openclaw approvals allowlist add --node "RaspPi-node" "/home/jack/*"
# 如果追求便利性,通常推荐直接使用通配符 “*”
总结:OpenClaw添加新Node的步骤
好了,我们把整个流程串起来看,添加一个新 Node 其实就是以下几个标准动作:
-
在新机器上安装 OpenClaw:这是前提。
-
复制并修改模板文件:
mkdir -p ~/.openclaw # 复制服务文件模板,记得修改里面的 display-name # 复制环境文件模板,修改必要的连接配置 -
修改环境文件:这是连接的关键,确保以下变量正确:
OPENCLAW_GATEWAY_HOST: 填写 Gateway 的 IP 地址。OPENCLAW_GATEWAY_TOKEN: 填写从 Gateway 获取的 Token。- 保持
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1(仅限内网环境)。
-
创建符号链接并启动服务:即执行前面第3到第5步的操作。
-
在 Gateway 上批准配对:Node 启动后会向 Gateway 发起连接请求,需要在 Gateway 端手动批准。
# 在Gateway上列出待批准的设备 openclaw devices list # 批准特定的连接请求 openclaw devices approve# 当然,更直观的方式是直接登录 OpenClaw Gateway 的 Web 管理界面进行操作。 -
验证与测试:部署完成后,别忘了做一次健康检查。
# 查看服务运行状态 sudo systemctl status openclaw-node.service # 查看实时日志,排查问题 sudo journalctl -u openclaw-node.service -f # 在 Gateway 上确认节点状态 openclaw nodes status # 测试节点功能是否正常,例如列出摄像头 openclaw nodes camera list --node "节点名"
常见问题速查
最后,附上一个常见问题排查表,遇到问题时可以快速对照:
| 问题 | 解决方案 |
|---|---|
Failed to load environment files |
检查环境文件路径是否正确,以及文件是否存在。 |
SECURITY ERROR |
确认环境变量中已设置 OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1。 |
| 配对失败 | 在 Gateway 上执行 openclaw devices list 查看是否有待处理的连接请求。 |
| 连接不稳定 | 检查 Node 与 Gateway 之间的网络连通性,以及防火墙是否放行了相关端口。 |
