1. 树莓派上 OpenClaw Gateway 仪表盘登录失败,到底卡在哪
OpenClaw 是一个可以在本地跑起来的 AI 代理网关,它把模型调用、工具执行、设备配对这些能力统一收进一个 Gateway 服务里,再通过浏览器上的仪表盘(Control UI)来管理。树莓派因为功耗低、能 7×24 小时挂着,成了很多人部署 OpenClaw Gateway 的首选硬件。但真正上手之后你会发现,仪表盘登录这一步特别容易翻车:浏览器要么直接连不上,要么页面打开了却报跨域,要么提示必须用 HTTPS,最后好不容易进去了又卡在 pairing required。
这些报错看起来五花八门,其实背后是四个层层递进的问题:端口只绑了 localhost、跨域白名单没配、浏览器安全上下文限制、设备配对没审批。它们会按顺序出现,你解决一个才会暴露下一个。这篇就按这个顺序,把每一步的配置文件、命令和验证动作都写清楚,同时把模型调用的 Key 统一交给 TaoToken 管理,避免你在多个平台之间来回切换 Key。适合已经在树莓派上装好 OpenClaw、但仪表盘死活登不进去的人,也适合准备部署、想提前避坑的人。
我试过在一台 4B 上反复重装了三遍才把这条链路走通,下面这些配置都是实测能跑通的版本,你可以直接抄。
2. 先把 TaoToken 统一 Key 准备好
OpenClaw Gateway 本身负责网关和仪表盘,但真正调用模型时需要一个 API 通道。与其在每个模型平台单独申请 Key、再分别填进配置,不如用 TaoToken 做统一入口:一个 Key 就能覆盖多种模型,配置里只维护一处,换模型时不用改代码。
操作路径很直接。先打开官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 注册并登录,然后进入控制台 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite 创建 API Key。创建完记得立刻复制,页面刷新后就看不到完整 Key 了。
拿到 Key 之后,OpenClaw 里所有需要模型能力的地方都指向同一个 API 地址 https://taotoken.net/api(这个地址不加 UTM 参数,直接写进配置即可)。如果你后面还要接 Claude Code 这类编码工具,可以另外看下 Coding Plan https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite ,它和 Gateway 用的是同一套 Key 体系,不用重复申请。
注意:Key 属于敏感信息,别直接提交到 Git 仓库。建议放在环境变量或者单独的 secrets 文件里,配置文件里用引用方式读取。
3. 可复制的 config.toml 骨架与四层配置
OpenClaw 的配置在不同版本里可能是 JSON 也可能是 TOML,这里给你一份 TOML 骨架,字段含义和 JSON 版一致,你按自己实际版本调整格式即可。核心是把 bind、allowedOrigins、TLS、auth 四块配全。
# ~/.openclaw/config.toml [gateway] port = 18789 mode = "local" bind = "lan" # 关键:从 localhost 改成 lan,监听 0.0.0.0 [gateway.tls] enabled = true certFile = "/home/pi/.openclaw/certs/cert.pem" keyFile = "/home/pi/.openclaw/certs/key.pem" [gateway.controlUi] allowedOrigins = [ "http://localhost:18789", "http://127.0.0.1:18789", "https://192.168.5.5:18789" # 换成你树莓派的实际局域网 IP ] [gateway.auth] mode = "token" token = "你的TaoToken统一Key" [model] apiBase = "https://taotoken.net/api" apiKey = "你的TaoToken统一Key"第一层 bind。默认只绑 127.0.0.1,局域网其他设备根本连不上。改成 lan 之后,服务会监听所有网卡,这是后面所有排查的前提。
第二层 allowedOrigins。浏览器同源策略会拦截跨源请求,你必须把访问仪表盘用的地址(带协议和端口)写进白名单,否则页面能打开但接口全挂。
第三层 TLS。浏览器规定,非 localhost 的 HTTP 页面属于不安全上下文,OpenClaw 的设备身份机制在这种环境下直接拒绝工作。所以局域网 IP 访问必须上 HTTPS。
第四层 auth。这里填的就是上一步拿到的 TaoToken 统一 Key,Gateway 和模型调用共用同一个,省得你维护两份。
改完配置后重启服务:
sudo openclaw gateway restart如果你用的是 JSON 版配置(~/.openclaw/openclaw.json),把上面 TOML 的层级结构翻译成嵌套对象即可,字段名完全一样。
4. 生成证书、重启并验证登录
TLS 这块需要自己签一张证书。在树莓派上执行:
mkdir -p ~/.openclaw/certs openssl req -x509 -newkey rsa:4096 \ -keyout ~/.openclaw/certs/key.pem \ -out ~/.openclaw/certs/cert.pem \ -days 365 -nodes \ -subj "/C=CN/ST=Beijing/L=Haidian/O=HomeLab/CN=192.168.5.5"把 CN 后面的 IP 换成你树莓派的实际地址,国家代码保持两位。生成后确认两个文件都在 ~/.openclaw/certs/ 下,路径和配置里写的一致。
重启服务,然后在局域网另一台电脑的浏览器里访问:
sudo openclaw gateway restart # 浏览器打开 https://192.168.5.5:18789自签名证书会弹“连接不安全”,点高级、继续访问即可。页面加载出来后,如果提示 disconnected (1008): pairing required,说明前面三层都通了,只剩最后一步设备审批。
保持浏览器页面开着(让它持续发起配对请求),回到树莓派终端执行:
openclaw devices list你会看到一条待审批记录,包含 Request ID、Role 和创建时间。复制那个 Request ID,执行:
openclaw devices approve 4f9db1bd-a1cc-4d3f-b643-2c195262464e看到 Approved 提示后刷新浏览器,仪表盘就能正常进入了。整个链路走通后,模型调用会自动走 TaoToken 的 API 通道,你在仪表盘里切换模型、发测试对话都不需要再改配置。
5. 本篇常见错排查
连不上、连接超时:先确认 bind 是不是还停在 localhost。用ss -tlnp | grep 18789看监听地址,如果是 127.0.0.1 就说明配置没生效,检查配置文件路径对不对、服务有没有真正重启。
origin not allowed:allowedOrigins 里必须写完整来源,包括协议和端口。你从 https 访问,白名单里却写的是 http,一样会被拦。IP 变了也要同步更新。
Control UI requires device identity:这是安全上下文报错,八成是 TLS 没启用或者证书路径写错。确认 certFile、keyFile 指向的文件真实存在,且服务有读取权限。
pairing required 反复出现:审批后如果还提示,检查是不是换了浏览器或清了缓存,设备身份会重新生成,需要再审批一次。另外确认 auth.mode 是 token 且 token 填的是有效的 TaoToken Key。
模型调用报 401:Gateway 登录和模型调用是两套鉴权,仪表盘能进不代表 Key 有效。去控制台 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite 核对 Key 是否被删或过期,接入细节可以对照文档 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite 。
6. 按场景选对入口,少走回头路
排障和接入阶段,重点是把 Key 和通道配对,直接去 API Keys 页面 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 把 apiBase 填对。想先验证模型通不通,用模型对话 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=model-chat&utm_campaign=rewrite 发一条测试消息最快。如果你打算长期在树莓派上跑编码或 Agent 任务,Coding Plan https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite 和 Gateway 共用同一套 Key,配置一次就能两边复用。
最后留个实用习惯:把 config.toml 里所有和 IP、路径相关的值集中写在文件顶部,换网络环境时只改这几行,比满文件找字段省事得多。