ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

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

【OpenClaw 实战】Ubuntu 双机 Gateway + Node 部署全流程 + 所有常见坑(2026版) 1. 为什么要在 Ubuntu 上折腾双机 Gateway NodeOpenClaw 是一个把大模型能力接到本地设备上的开源框架简单说就是让云端的大脑指挥你本地电脑的浏览器、终端、截屏这些手脚。它支持两种角色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后面会讲。环境我用的两台机器主机GatewayUbuntu 24.04 带公网 IP客户机NodeUbuntu 22.04 本地笔记本display-name 设为 GOLD。OpenClaw 版本 2026.2.14 到 2026.2.15。目标是在 Telegram 里能调用/exec hostnode: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_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content注册后在控制台生成 API Key。拿到 Key 之后先在 Gateway 主机上装 OpenClaw。用 npm 全局安装最新版npm install -g openclawlatest openclaw doctor --fixdoctor --fix会自动修复一些常见的环境问题比如缺失的依赖、权限配置。装完之后第一件关键事是改 Gateway 的监听地址。默认情况下 Gateway 只绑定 loopback127.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。最后放行防火墙端口默认是 18789sudo ufw allow 18789/tcp到这里 Gateway 侧就绪。如果你在云主机上还要确认云厂商的安全组也放行了 18789这个经常被忘表现就是本地 curl 通、外部连不上。3. 可复制的双机配置片段与 Node 注册Node 侧的配置核心就三样Gateway 地址、token、display-name。先在客户机上装 OpenClawnpm install -g openclawlatest openclaw doctor --fix然后设置 Gateway token 环境变量。这里有个坑如果你用 systemd 跑 Node环境变量要在 service 文件里设光在 shell 里 export 是不够的。先手动跑一次触发 pairingexport 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] DescriptionOpenClaw Node Afternetwork.target [Service] Typesimple EnvironmentOPENCLAW_GATEWAY_TOKEN你的Gateway-token EnvironmentOPENCLAW_LOG_LEVELdebug ExecStart/usr/bin/openclaw node run --host [公网IP] --port 18789 --display-name GOLD Restarton-failure RestartSec5 [Install] WantedBydefault.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/apiKey 填 TaoToken 控制台生成的Model ID 填你实际要用的模型。这三样在 Gateway 的 config.json 里配好Node 侧不需要重复配模型它只负责提供能力。4. 验证请求与成功结果确认配置完别急着上 Telegram先在命令行逐项验证这样出问题好定位。第一步在 Gateway 主机上确认 Node 已注册openclaw nodes status --node GOLD openclaw devices listGOLD 应该出现在 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 hostnode:GOLD browser.proxy再测系统查询/exec hostnode: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 / ECONNREFUSEDGateway 绑定在 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_LEVELdebugGateway 侧journalctl --user -u openclaw-gateway.service -f实时看日志。常见原因是 token 不一致或者网络中间有拦截。token 不匹配unauthorizedCLI 和 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 --verboseNode 已 paired 但 capabilities 只有 browser/system没有 exec这不是错误是 Node 模式的设计限制。Node 是受控手脚exec 这种高危能力不开放。如果你确实需要跑任意 shell必须把 GOLD 升级成独立 Gatewaypkill -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注意结尾不要多加/v1OpenClaw 会自己拼。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_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite。想先试试模型对话效果可以直接在https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite里聊几句。API Key 管理在https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite接入文档在https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite。如果你用的是 Claude Code 这类工具想接 TaoToken 的 Anthropic 兼容端点配置在https://taotoken.net/claude-code-anthropic?utm_sourcetaotoken_aicg_blog_endutm_contentclaude_codeutm_campaignrewrite。Coding Plan 详情在https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite。最后说个实用技巧Node 的 display-name 别用默认值起个有意义的名字比如 GOLD这样在openclaw devices list和 Telegram 命令里都好识别。另外 token 轮换后记得同步更新所有 Node 的 systemd Environment不然会出现部分 Node 连不上、部分正常的情况排查起来很费时间。整个部署的核心三板斧就是 bind lan pairing approve token 统一把这三样守住双机架构就很稳。
返回列表