news 2026/10/3 12:33:03

【OpenClaw 实战】Ubuntu 双机 Gateway + Node 部署全流程 + 所有常见坑(2026版)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【OpenClaw 实战】Ubuntu 双机 Gateway + Node 部署全流程 + 所有常见坑(2026版)

1. 为什么要在 Ubuntu 上折腾双机 Gateway + Node

OpenClaw 是一个把大模型能力接到本地设备上的开源框架,简单说就是让云端的大脑指挥你本地电脑的浏览器、终端、截屏这些"手脚"。它支持两种角色:Gateway 是可信大脑,负责调度和鉴权;Node 是受控手脚,只提供有限能力。把这两者拆到两台 Ubuntu 机器上跑,好处很直接——Gateway 可以放在有公网 IP 的云主机上长期在线,Node 放在你本地笔记本上,需要的时候才连上去干活,既省资源又安全。

这套架构适合谁?如果你手上有两台 Ubuntu 机器(一台云主机、一台本地机,或者两台局域网机器),想让云端 Gateway 调用本地 Node 的浏览器自动化、系统查询、截屏能力,那这篇就是给你写的。我实测下来,整个链路最容易卡在三个地方:Gateway 默认只监听 loopback 导致外部连不上、新 Node 首次连接必须手动批准 pairing、以及 token 在 CLI 和 systemd 服务之间不一致。这三个坑我在 2026.2.15 版本上全踩了一遍,下面把完整流程和排障方法都摊开讲。

需要先明确一个预期:Node 模式在设计上就是"受限能力提供者"。它支持 browser(浏览器自动化)、system(基本系统查询)、canvas(截屏)、camera(部分版本),但不支持 exec(任意 shell 命令)、terminal(交互终端)、自定义 skill。你在配置文件里硬写node.caps = "exec,..."也会被忽略,这是官方安全设计,不是 bug。如果你需要 Node 跑任意 shell 命令,唯一办法是把它升级成独立 Gateway,后面会讲。

环境我用的两台机器:主机(Gateway)Ubuntu 24.04 带公网 IP,客户机(Node)Ubuntu 22.04 本地笔记本,display-name 设为 GOLD。OpenClaw 版本 2026.2.14 到 2026.2.15。目标是在 Telegram 里能调用/exec host=node:GOLD whoami这类命令。下面从环境准备开始,一步步来。

2. TaoToken 前置准备与 Gateway 侧安装配置

在动手配 OpenClaw 之前,先把模型接入这块搞定。OpenClaw 本身不绑定特定模型供应商,你需要一个能提供 OpenAI 兼容接口的服务。我用的是 TaoToken,它的 API 地址是https://taotoken.net/api,兼容 OpenAI 的/v1/chat/completions格式,直接填 Base URL 和 Key 就能用。官网在https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=,注册后在控制台生成 API Key。

拿到 Key 之后,先在 Gateway 主机上装 OpenClaw。用 npm 全局安装最新版:

npm install -g openclaw@latest openclaw doctor --fix

doctor --fix会自动修复一些常见的环境问题,比如缺失的依赖、权限配置。装完之后第一件关键事是改 Gateway 的监听地址。默认情况下 Gateway 只绑定 loopback(127.0.0.1),这意味着外部 Node 根本连不上,你会看到ECONNREFUSED或者 socket hang up。改成监听局域网:

openclaw config set gateway.bind lan

如果你想让 Gateway 监听所有网卡(更宽松,但靠 token 保护),可以用all。我建议先用lan,够用且相对收敛。

接下来生成 Gateway token,这是整个部署里最重要的一步,后面 90% 的 token mismatch 都出在这里:

openclaw doctor --generate-gateway-token --force openclaw config get gateway.auth.token

把输出的 token 复制下来存好,Node 侧要用同一个值。注意--force会覆盖旧 token,如果你之前已经配过 Node,重新生成后所有 Node 都得更新 token。

然后配置模型接入。OpenClaw 的模型配置可以写在~/.openclaw/config.json里,也可以走环境变量。我习惯用配置文件,结构大概是这样:

{ "gateway": { "bind": "lan", "auth": { "token": "你的Gateway-token" } }, "models": { "default": { "baseUrl": "https://taotoken.net/api", "apiKey": "你的TaoToken-Key", "model": "claude-sonnet-4-20250514" } } }

Model ID 按你实际在 TaoToken 控制台看到的填,不同模型 ID 不一样。配好之后启动 Gateway 服务,用 systemd 托管:

openclaw gateway install-daemon systemctl --user enable --now openclaw-gateway.service systemctl --user status openclaw-gateway.service

确认状态是 running。最后放行防火墙端口,默认是 18789:

sudo ufw allow 18789/tcp

到这里 Gateway 侧就绪。如果你在云主机上,还要确认云厂商的安全组也放行了 18789,这个经常被忘,表现就是本地 curl 通、外部连不上。

3. 可复制的双机配置片段与 Node 注册

Node 侧的配置核心就三样:Gateway 地址、token、display-name。先在客户机上装 OpenClaw:

npm install -g openclaw@latest openclaw doctor --fix

然后设置 Gateway token 环境变量。这里有个坑:如果你用 systemd 跑 Node,环境变量要在 service 文件里设,光在 shell 里 export 是不够的。先手动跑一次触发 pairing:

export OPENCLAW_GATEWAY_TOKEN="你的Gateway-token" openclaw node run --host [公网IP] --port 18789 --display-name "GOLD" --verbose

--verbose会打印详细日志,第一次连的时候特别有用。运行后 Node 会向 Gateway 发起配对请求,但不会自动通过,需要你在 Gateway 侧手动批准。

回到 Gateway 主机,查看待批准的设备:

openclaw devices list

你会看到 GOLD 处于 Pending 状态,记下它的 request-id 前缀,然后批准:

openclaw devices approve <request-id前缀>

或者直接批准最新的:

openclaw devices approve --latest

批准之后,Node 侧应该会打印 connected。如果没打印,先别急,看下一节的排障。

如果你想让 Node 开机自启,用 systemd 托管。创建~/.config/systemd/user/openclaw-node.service:

[Unit] Description=OpenClaw Node After=network.target [Service] Type=simple Environment=OPENCLAW_GATEWAY_TOKEN=你的Gateway-token Environment=OPENCLAW_LOG_LEVEL=debug ExecStart=/usr/bin/openclaw node run --host [公网IP] --port 18789 --display-name "GOLD" Restart=on-failure RestartSec=5 [Install] WantedBy=default.target

注意ExecStart里的 openclaw 路径要用which openclaw查出来的绝对路径,systemd 不认 shell 的 PATH。然后:

systemctl --user daemon-reload systemctl --user enable --now openclaw-node.service systemctl --user status openclaw-node.service

这里再强调一次三件套:Base URL 填https://taotoken.net/api,Key 填 TaoToken 控制台生成的,Model ID 填你实际要用的模型。这三样在 Gateway 的 config.json 里配好,Node 侧不需要重复配模型,它只负责提供能力。

4. 验证请求与成功结果确认

配置完别急着上 Telegram,先在命令行逐项验证,这样出问题好定位。

第一步,在 Gateway 主机上确认 Node 已注册:

openclaw nodes status --node GOLD openclaw devices list

GOLD 应该出现在 Paired 列表里,状态是 online。如果显示 offline,说明 Node 进程没跑或者连接断了。

第二步,测试模型接入是否通。在 Gateway 主机上直接发一个请求:

curl https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer 你的TaoToken-Key" \ -H "Content-Type: application/json" \ -d '{ "model": "claude-sonnet-4-20250514", "messages": [{"role": "user", "content": "说一句话证明你在工作"}] }'

如果返回正常的 JSON 带 choices 字段,说明模型链路没问题。如果报 401,检查 Key 有没有复制全;如果报 model not found,检查 Model ID 拼写。

第三步,在 Telegram 里测试 Node 能力。先测浏览器能力:

/exec host=node:GOLD browser.proxy

再测系统查询:

/exec host=node:GOLD system.run whoami

注意system.run只能跑白名单内的查询类命令,不是任意 shell。如果你想跑whoami这种,它属于 system 能力范围。如果你试exec跑任意命令,会发现 Node 根本不支持,返回 capabilities 里没有 exec。

第四步,确认 Node 的实际能力列表:

openclaw nodes status --node GOLD --verbose

输出里会列出 caps,正常应该是browser, system加上可能的canvas。如果只有browser, system没有exec,这是正常的,不是配置错误。

实测下来,只要这四步都过,整个双机链路就通了。Telegram 里调用 Node 命令能返回结果,说明 Gateway 调度、Node 执行、结果回传整条链路都正常。

5. 常见报错逐项排查

这一节是重点,我把踩过的坑按报错关键词列出来,对照着查。

socket hang up / ECONNREFUSED:Gateway 绑定在 loopback,外部连不上。解决:openclaw config set gateway.bind lan,然后重启 Gateway 服务systemctl --user restart openclaw-gateway.service。别忘了检查云安全组和 ufw。

pairing required, closed (1008):新 Node 首次连接需要手动批准。解决:Gateway 侧openclaw devices approve --latest。这个报错很常见,因为很多人以为连上就自动配对了。

批准后 Node 仍 hang 住,无 connected 输出:日志级别不够,看不到细节。解决:Node 侧export OPENCLAW_LOG_LEVEL=debug,Gateway 侧journalctl --user -u openclaw-gateway.service -f实时看日志。常见原因是 token 不一致或者网络中间有拦截。

token 不匹配,unauthorized:CLI 和 Gateway 服务用的 token 不同。systemd 的 Environment 会覆盖 config 里的值。解决:以 Gateway 服务的 token 为准,统一所有地方。清理~/.openclaw/device-auth.json后重新配对:

rm ~/.openclaw/device-auth.json openclaw node run --host [公网IP] --port 18789 --display-name "GOLD" --verbose

Node 已 paired 但 capabilities 只有 browser/system,没有 exec:这不是错误,是 Node 模式的设计限制。Node 是受控手脚,exec 这种高危能力不开放。如果你确实需要跑任意 shell,必须把 GOLD 升级成独立 Gateway:

pkill -f "openclaw node run" openclaw gateway run --port 18790 openclaw doctor --generate-gateway-token --force

然后两个 Gateway 通过同一个 Telegram 群 +/sessions_send互发任务,或者用 webhook/Redis 做任务桥接。

OAuth 相关报错:如果你在配置模型时用了需要 OAuth 的供应商,可能会遇到 token 过期。TaoToken 用的是 API Key 方式,不涉及 OAuth,所以填好 Key 就行。如果你混用了其他供应商的 OAuth 配置,检查~/.openclaw/config.json里有没有残留的 oauth 字段,清掉。

reading choices 报错:通常是模型返回格式不对,或者 Base URL 填错导致返回了 HTML 错误页。检查 Base URL 是不是https://taotoken.net/api,注意结尾不要多加/v1,OpenClaw 会自己拼。

local proxy failed:如果你本地配了代理,OpenClaw 请求可能走代理失败。检查环境变量HTTP_PROXY/HTTPS_PROXY,临时 unset 掉再试。

排查的核心思路就一条:先确认 Gateway 在跑且监听正确,再确认 token 一致,最后确认 Node 已批准。这三步过了,剩下的都是能力范围问题,不是连接问题。

6. 后续接入与能力扩展

双机跑通之后,如果你想继续扩展,有几个方向。最直接的是把 Node 升级成 Gateway 来获得完整权限,前面讲过步骤。两个 Gateway 协作最简单的方式是同一个 Telegram 群加/sessions_send互发任务,更稳的是用 webhook 或 Redis 做任务桥接,社区里已经有不少成功案例。

模型接入这块,如果你要长期跑编码或 Agent 任务,可以考虑 TaoToken 的 Coding Plan,适合高频调用场景。需要管理多个 Key 或者查看用量,去控制台https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite。想先试试模型对话效果,可以直接在https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=model_chat&utm_campaign=rewrite里聊几句。API Key 管理在https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite,接入文档在https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite。

如果你用的是 Claude Code 这类工具,想接 TaoToken 的 Anthropic 兼容端点,配置在https://taotoken.net/claude-code-anthropic?utm_source=taotoken_aicg_blog_end&utm_content=claude_code&utm_campaign=rewrite。Coding Plan 详情在https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan&utm_campaign=rewrite。

最后说个实用技巧:Node 的 display-name 别用默认值,起个有意义的名字比如 GOLD,这样在openclaw devices list和 Telegram 命令里都好识别。另外 token 轮换后记得同步更新所有 Node 的 systemd Environment,不然会出现部分 Node 连不上、部分正常的情况,排查起来很费时间。整个部署的核心三板斧就是 bind lan + pairing approve + token 统一,把这三样守住,双机架构就很稳。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/3 12:32:58

结构体字节对齐与总线Fault:嵌入式开发避坑指南

1. 一个字节引发的HardFault&#xff0c;到底值不值 结构体字节对齐这个话题&#xff0c;在嵌入式圈子里属于那种“平时没人提&#xff0c;出事要人命”的典型。我见过太多项目&#xff0c;功能跑得好好的&#xff0c;某天加了个字段、换了个编译器版本、或者把结构体指针强转了…

作者头像 李华
网站建设 2026/10/3 12:32:14

后端接口设计规范,这10条建议请收好

1. 用名词复数命名资源&#xff0c;别用动词URL应该指向资源&#xff0c;不是动作。GET /users 比 GET /getUserList 干净得多。新增用 POST /users&#xff0c;删除用 DELETE /users/1&#xff0c;更新用 PUT /users/1。动词留给HTTP方法&#xff0c;URL只负责定位。别在路径里…

作者头像 李华
网站建设 2026/10/3 12:31:59

Threadripper PRO 7975WX 默频 CPU-Z 跑分与复测指南

这次我们来看一颗工作站级别的 32 核处理器&#xff1a;AMD Ryzen Threadripper PRO 7975WX。感谢粉丝 "Val-halla" 提供的实测视频&#xff0c;这颗 U 在完全默认频率的状态下跑完了 CPU-Z 基准测试&#xff0c;单核与多核得分都记录得很完整。这篇文章就以这份测试…

作者头像 李华
网站建设 2026/10/3 12:30:49

DRV8818+PIC24双极步进电机驱动板设计实战:接线、固件与调参

这两年做小型工业机械臂和自动化设备&#xff0c;步进电机的控制板试了不少方案。早期图省事直接买现成的A4988模块&#xff0c;调试确实快&#xff0c;但一到产线连续运转&#xff0c;散热和稳定性就开始拖后腿。后来干脆自己设计驱动板&#xff0c;核心组合就是TI的DRV8818PW…

作者头像 李华