☰
内网服务器 OpenClaw 部署 + WebUI 内网直连 + 本地模型接入 全流程教程:TaoToken 统一 Key 配置与验证
2026/9/29 20:29:55 网站建设 项目流程

1. 内网服务器上跑 OpenClaw,为什么 WebUI 直连和本地模型接入总卡壳

内网服务器部署 OpenClaw 这件事,真正让人头疼的从来不是安装本身,而是装完之后那两步:局域网里的其他电脑怎么直接打开 WebUI,以及本地模型怎么接进去。我见过太多人卡在control ui requires device identity这个报错上,反复检查 token 却找不到原因,最后只能退回 SSH 隧道凑合用。

OpenClaw 是一个可以在服务器上常驻运行的 AI 工具网关,它自带 Control UI(也就是 WebUI),支持接入多种模型 Provider,适合放在内网做统一的 AI 入口。它的 Gateway 原生支持 TLS 终止,不需要额外装 nginx 就能让局域网设备通过 HTTPS 直连。但前提是你要把证书、绑定地址、允许来源这几项配对,否则浏览器会直接拒绝加载 Control UI。

这篇教程面向的是内网 Ubuntu 服务器场景,从零开始走完 OpenClaw 部署、本地模型接入、WebUI 内网直连的完整链路。同时我会把 TaoToken 统一 Key 的配置骨架嵌进config.toml和settings.json里,让你在接入本地模型之外,还能用同一套 Key 通道访问云端模型做对比验证。整个流程我按实际踩坑顺序排列,每一步都有可复制的命令和预期输出。

2. TaoToken 前置:统一 Key 与 API 通道准备

在开始配置 OpenClaw 之前,先把 TaoToken 的 Key 和通道准备好。这一步的意义在于:内网本地模型代理负责离线推理,TaoToken 负责在需要时提供云端模型的统一入口,两者共用一套配置结构,切换时只改 Provider 名称。

2.1 获取 API Key

访问 TaoToken 控制台创建 API Key:

https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=console

创建后你会拿到一个以sk-开头的 Key。这个 Key 同时适用于模型对话和 Coding Plan 场景,建议先创建一个专门给内网服务器用的 Key,方便后续按设备撤销。

2.2 确认 API 通道地址

TaoToken 的 API 基础地址是:

https://taotoken.net/api

这个地址兼容 OpenAI 的/v1/chat/completions和/v1/models接口格式。在 OpenClaw 里配置时,baseUrl填https://taotoken.net/api/v1,api字段填openai-completions。

2.3 验证 Key 可用性

在服务器上先做一次连通性测试,确认 Key 和网络都没问题:

curl -s https://taotoken.net/api/v1/models \ -H "Authorization: Bearer sk-你的Key" | head -c 800

如果返回模型列表 JSON,说明 Key 有效。如果返回 401,检查 Key 是否复制完整;如果超时,检查服务器出网策略。

注意:内网服务器如果完全离线,这一步可以跳过,直接用本地模型代理验证。TaoToken 通道适合有出网能力但需要统一管理的场景。

3. 可复制配置:config.toml 与 settings.json 骨架

OpenClaw 的配置分两层:~/.openclaw/openclaw.json是主配置,负责 Gateway、Provider、Agent 默认模型;settings.json用于 Control UI 侧的偏好设置。下面给出两份可直接复制的骨架。

3.1 openclaw.json 主配置骨架

{ "gateway": { "mode": "local", "auth": { "mode": "token", "token": "你的GatewayToken" }, "port": 18789, "bind": "lan", "controlUi": { "allowInsecureAuth": true, "allowedOrigins": [ "https://192.168.1.107:18789", "http://localhost:18789", "http://127.0.0.1:18789" ] }, "tls": { "enabled": true, "certPath": "/home/youruser/.openclaw/certs/server.crt", "keyPath": "/home/youruser/.openclaw/certs/server.key" } }, "models": { "providers": { "localproxy": { "baseUrl": "http://127.0.0.1:31415/v1", "apiKey": "local-proxy-key", "api": "openai-completions", "models": [ { "id": "auto", "name": "Auto Router", "reasoning": false, "contextWindow": 1048576, "contextTokens": 1048576, "maxTokens": 32768 } ] }, "taotoken": { "baseUrl": "https://taotoken.net/api/v1", "apiKey": "sk-你的TaoTokenKey", "api": "openai-completions", "models": [ { "id": "claude-sonnet-4-5", "name": "Claude Sonnet 4.5", "reasoning": true, "contextWindow": 200000, "contextTokens": 200000, "maxTokens": 8192 } ] } } }, "agents": { "defaults": { "model": { "primary": "localproxy/auto" } } } }

关键字段说明:

字段作用注意事项
gateway.bind绑定范围lan允许局域网访问,local仅本机
gateway.tls.enabled开启 TLSControl UI 必须 HTTPS 或 localhost
allowedOrigins允许的来源必须包含实际访问的https://IP:端口
models[].input输入类型不要写简单数值,格式不对会校验失败
models[].cost费用字段同上,建议直接省略

3.2 settings.json 骨架

Control UI 侧的settings.json位于~/.openclaw/settings.json,主要控制界面行为和默认会话参数:

{ "ui": { "theme": "dark", "defaultAgent": "defaults", "showTokenUsage": true }, "chat": { "defaultModel": "localproxy/auto", "streamResponse": true, "maxHistoryMessages": 50 }, "security": { "requireDeviceApproval": true, "sessionTimeoutMinutes": 480 } }

requireDeviceApproval设为true时,新设备首次访问需要服务器端批准,这是内网安全的基本保障。如果你在内网完全可信环境,可以设为false,但我不建议。

3.3 配置校验

写完配置后必须校验,不要直接重启:

source ~/.nvm/nvm.sh openclaw config validate

期望输出:

Config valid: /home/youruser/.openclaw/openclaw.json

如果报models.providers.xxx.models.0.input: Invalid input,说明你在 models 数组里写了input或cost字段且格式不对。直接删掉这两个字段即可。

4. 验证请求:从本地模型到 TaoToken 通道

配置写完只是第一步,真正要确认的是两条链路都能跑通。

4.1 验证本地模型代理

先确认本地代理在监听:

ss -tlnp | grep 31415

然后直接请求本地代理的 chat 接口:

curl -s -X POST http://127.0.0.1:31415/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer local-proxy-key" \ -d '{"model":"auto","messages":[{"role":"user","content":"hi"}],"max_tokens":16}'

返回里如果带_routed_via字段,说明 auto 路由正常工作。

4.2 验证 TaoToken 通道

curl -s -X POST https://taotoken.net/api/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer sk-你的TaoTokenKey" \ -d '{"model":"claude-sonnet-4-5","messages":[{"role":"user","content":"hi"}],"max_tokens":16}'

返回正常内容即通道可用。如果你想在浏览器里直接对比两个模型的效果,可以打开模型对话页面:

https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=model_chat

4.3 验证 Gateway 端到端

重启 Gateway 后检查日志:

export XDG_RUNTIME_DIR=/run/user/$(id -u) systemctl --user restart openclaw-gateway sleep 8 journalctl --user -u openclaw-gateway --no-pager -n 20 | grep -iE "agent model|listening|ready"

期望看到:

agent model: localproxy/auto (thinking=off, fast=off) listening on https://0.0.0.0:18789

4.4 验证 WebUI 直连

在服务器本地用 curl 测试 HTTPS:

curl -sk -o /dev/null -w "%{http_code}\n" https://192.168.1.107:18789/

返回200说明 TLS 和端口都正常。然后在局域网另一台电脑浏览器打开https://192.168.1.107:18789,如果证书已导入受信任根,应该直接进入登录页。

5. 本篇常见错排查:从证书到设备配对

这一节按报错现象组织,每条都给出原因和动作。

5.1 control ui requires device identity

现象:浏览器打开http://192.168.1.107:18789直接报这个错。

原因:Control UI 只在安全上下文(HTTPS 或 localhost)下生成设备身份,明文 HTTP 访问内网 IP 不满足条件。token 认证不能替代这个限制。

动作:开启gateway.tls.enabled,用https://访问。不要试图用allowInsecureAuth绕过,它只在 localhost 下放宽。

5.2 pairing required: device is not approved yet

现象:HTTPS 通了、token 填对了,仍然进不去,日志显示phase=auth_validated。

原因:新设备首次连接会生成配对请求,需要服务器端批准。

动作:

source ~/.nvm/nvm.sh openclaw devices list openclaw devices approve <requestId>

批准后再openclaw devices list,设备应进入 Paired 列表。

5.3 No pending device request matches

现象:执行 approve 时报这个错。

原因:配对请求有有效期,过期后无法批准。

动作:让浏览器刷新 Control UI 页面重新生成请求,然后在有效期内尽快批准。

5.4 models.0.input: Invalid input

现象:openclaw config validate报这个错。

原因:在models[]里写了"input": 0.0或"cost": 0.0这类简单数值,格式不符合校验要求。

动作:直接删掉input和cost字段,重新校验。

5.5 custom model providers must declare models

现象:用openclaw config set分步写 Provider 时报这个错。

原因:增量校验时缺少models字段。

动作:自定义 Provider 必须一次性完整写入 JSON,不要分步 set。可以先用 base64 传输脚本改 JSON,再 validate。

5.6 HTTP 000 / 连不上

现象:curl 返回 000,浏览器无法连接。

原因:Gateway 未启动或绑定地址不对。

动作:

systemctl --user status openclaw-gateway journalctl --user -u openclaw-gateway --no-pager -n 30

检查bind是否为lan,端口是否被占用。

5.7 浏览器证书警告

现象:访问https://192.168.1.107:18789提示证书不受信任。

原因:自签证书未导入本机受信任根。

动作:把server.crt拷到本机,Windows 下执行:

Import-Certificate -FilePath C:\path\to\server.crt -CertStoreLocation Cert:\CurrentUser\Root

导入后重启浏览器即可。

6. 长期编码与 Agent 场景的 Key 管理

如果你打算把 OpenClaw 作为长期编码助手或 Agent 运行平台,Key 的管理方式需要提前规划。内网本地模型代理适合高频、低延迟的日常调用,TaoToken 通道适合需要更强推理能力的复杂任务。

对于长期编码场景,建议使用 Coding Plan 来统一管理调用配额和 Key 轮换:

https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=coding_plan

在 OpenClaw 里,你可以把agents.defaults.model.primary设为localproxy/auto,然后在具体 Agent 配置里覆盖为taotoken/claude-sonnet-4-5,实现按任务切换。这样日常对话走本地,复杂重构走云端,Key 和通道都在同一套配置里管理。

如果你需要为不同设备或不同 Agent 分配独立 Key,可以在 API Keys 页面按用途创建:

https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=api_keys

每个 Key 可以单独撤销,不影响其他设备。内网服务器建议用一个专用 Key,方便审计和轮换。

配置接入相关的完整文档在:

https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=doc

如果你用的是 Claude Code 或 Anthropic 风格的接入方式,可以参考:

https://taotoken.net/claude-code-anthropic?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=claude_code

整个链路跑通后,日常维护只需要三条命令:openclaw gateway status看状态,openclaw doctor做健康检查,openclaw devices list管理设备。配置改动后先openclaw config validate再重启,能避免大部分启动失败。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询