ARTICLE DETAIL

资讯详情

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

OpenClaw 搭建全流程(保姆级):用 TaoToken 统一 Key 打通 Node.js 与 Docker 网关

OpenClaw 搭建全流程(保姆级):用 TaoToken 统一 Key 打通 Node.js 与 Docker 网关 1. 从零跑通 OpenClawNode.js 与 Docker 网关搭建到底难在哪OpenClaw 是一个把大模型能力接到本地网关、再分发到各类通讯渠道的开源项目适合想自己掌控模型调用链路、又不想被单一厂商绑死的开发者。它的核心检索词其实就三个OpenClaw、Node.js、Docker 网关。你要做的事说穿了不复杂——准备运行环境、装依赖、起容器、配网关鉴权、发一条测试消息确认链路通。但真正动手时卡人的往往不是某一步有多难而是步骤之间的衔接Node 版本不对导致 npm 装不上Docker 端口没放行导致网关起不来模型 Key 分散在好几个平台导致配置混乱。我自己第一次搭的时候最烦的就是 Key 管理。OpenClaw 要接模型服务Node 侧要读环境变量Docker 容器里又要单独注入一遍同一个 Key 在三个地方各写一份改一次要同步三处漏一处就报鉴权失败。后来我把模型通道统一收敛到 TaoToken 上用同一个 Key 走同一个 API 地址Node 本地跑和 Docker 容器跑读的是同一套配置这个问题才算彻底解决。这篇就按真实搭建顺序走一遍先确认 Node.js 环境再装 npm 依赖然后容器化部署最后配网关并用 TaoToken 统一 Key 完成鉴权联通的验证。每一步都给可复制的命令和配置片段你照着敲就能跑通。适合有基础命令行经验、想本地或服务器自建 OpenClaw 网关的人。全程不需要额外网络工具只要你的机器能正常访问 npm 源和模型 API 地址即可。先说清楚整体链路免得你中途迷路。OpenClaw 的运行分两层一层是 Node.js 进程负责网关逻辑和消息路由另一层是 Docker 容器把网关和依赖打包成可移植的镜像。模型调用通过环境变量注入的 Base URL 和 API Key 完成网关监听默认 18789 端口。你要验证的“通”指的是发一条消息后网关能把请求转发到模型服务并拿回响应。下面从环境准备开始。2. TaoToken 前置准备统一 Key 与 API 通道怎么配在动 OpenClaw 之前先把模型通道这块理清楚不然后面配置会反复返工。TaoToken 在这里扮演的角色是统一入口你不需要在 OpenClaw 里分别填 OpenAI、智谱、百炼各自的 Key 和地址而是用 TaoToken 的一个 Key 加一个 Base URL让网关通过它去调用后端模型。这样 Node 本地调试和 Docker 容器部署读的是同一份凭证切换模型也不用改代码。第一步是拿到 Key。打开 TaoToken 控制台进入 API Keys 页面创建一个新 Key复制出来先存好。这个 Key 就是后面环境变量里的TAOTOKEN_API_KEY。创建入口在这里https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 。注意 Key 只在创建时完整显示一次关掉页面就看不到了所以复制后立刻贴到你的密码管理器或临时文件里。第二步是确认 API 地址。TaoToken 的 API 根地址是https://taotoken.net/api这个地址不加任何查询参数直接作为 Base URL 使用。OpenClaw 里凡是要求填base_url或OPENAI_BASE_URL的地方都填这个。模型 ID 按你实际要用的填比如gpt-4o、claude-3-5-sonnet这类具体可用列表在文档里查https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。第三步是理解为什么要统一。OpenClaw 的网关在启动时会读取环境变量Node 进程和 Docker 容器如果各自维护一套 Key很容易出现“本地能跑、容器里 401”的情况。用 TaoToken 统一后你只需要维护一份.env文件Docker Compose 通过env_file引用它Node 通过dotenv读取它两边看到的是同一个TAOTOKEN_API_KEY和同一个 Base URL。改模型、换 Key 都只动一个地方。这里给一个最小化的环境变量清单后面各步骤都会引用它# .env 文件放在项目根目录 TAOTOKEN_API_KEYsk-你的TaoToken密钥 TAOTOKEN_BASE_URLhttps://taotoken.net/api OPENCLAW_MODEL_IDgpt-4o OPENCLAW_GATEWAY_PORT18789注意.env文件不要提交到 Git加到.gitignore里。Docker 构建时也不要把这个文件 COPY 进镜像用运行时注入的方式传进去。如果你还没决定用哪个模型可以先在模型对话页面试一下调用效果确认 Key 和地址没问题再往下走https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite 。这一步能帮你提前排除 Key 无效或地址写错的问题省得在 OpenClaw 里排查半天。3. 可复制配置Node.js 环境、npm 依赖与 Docker 网关这一节是全文的操作核心按顺序做就行。先确认 Node.js 版本OpenClaw 要求 22.x 及以上。用node -v看当前版本低于 22 就用 nvm 升级# 安装 nvm如果还没有 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash source ~/.bashrc # 安装并使用 Node.js 22 nvm install 22 nvm use 22 node -v # 应输出 v22.x.x npm -vNode 就绪后装 OpenClaw。推荐用 npm 全局安装版本可控npm install -g openclawlatest openclaw --version如果你更习惯 pnpm把上面第一条换成pnpm add -g openclawlatest即可。装完后openclaw命令应该能直接调用。这一步常见的坑是 npm 源太慢导致超时可以临时切到国内镜像npm config set registry https://registry.npmmirror.com接下来是 Docker 容器化部署。先确认 Docker 和 Compose 可用docker --version docker compose version然后准备docker-compose.yml。这个文件把网关服务、环境变量、端口映射都定义好关键是env_file指向你前面写的.env这样容器里读到的就是同一份 TaoToken 配置# docker-compose.yml services: openclaw-gateway: image: openclaw/gateway:latest container_name: openclaw-gateway restart: unless-stopped env_file: - .env environment: - OPENCLAW_GATEWAY_PORT${OPENCLAW_GATEWAY_PORT} - OPENAI_API_KEY${TAOTOKEN_API_KEY} - OPENAI_BASE_URL${TAOTOKEN_BASE_URL} - OPENCLAW_MODEL_ID${OPENCLAW_MODEL_ID} ports: - ${OPENCLAW_GATEWAY_PORT}:18789 volumes: - ./data:/app/data healthcheck: test: [CMD, curl, -f, http://localhost:18789/health] interval: 30s timeout: 5s retries: 3这里有个细节要说明OpenClaw 内部很多地方沿用 OpenAI 兼容的变量名所以OPENAI_API_KEY和OPENAI_BASE_URL实际填的是 TaoToken 的值。这不是让你去用 OpenAI而是因为兼容层读的是这两个变量名。把 TaoToken 的 Key 和地址映射进去网关就会通过 TaoToken 通道调用模型。如果你不用 Docker想直接在 Node 侧跑网关那就用dotenv加载.env后启动# 在项目根目录 npm install dotenv node -r dotenv/config $(which openclaw) gateway --port 18789 --verbose或者更简单先把环境变量 export 出来再启动export OPENAI_API_KEY$TAOTOKEN_API_KEY export OPENAI_BASE_URL$TAOTOKEN_BASE_URL openclaw gateway --port 18789 --verboseDocker 方式启动docker compose up -d docker compose logs -f openclaw-gateway日志里看到网关监听 18789 且没有鉴权报错就说明容器起来了。如果日志里出现local proxy failed或连接超时先检查.env里的 Base URL 是不是写成了带路径的形式正确写法就是https://taotoken.net/api不要多加/v1之类的后缀。4. 验证请求网关鉴权联通与成功结果确认配置写完不算通得发一条真实请求确认链路。OpenClaw 提供了message send子命令可以直接往指定渠道发测试消息。先确认网关在跑curl -s http://localhost:18789/health返回{status:ok}之类的 JSON 就说明网关进程正常。接着发测试消息openclaw message send \ --to 你的渠道ID \ --message 你好OpenClaw如果你还没绑通讯渠道可以用网关自带的调试接口直接打模型验证鉴权是否通过curl -X POST http://localhost:18789/v1/chat/completions \ -H Content-Type: application/json \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -d { model: $OPENCLAW_MODEL_ID, messages: [{role: user, content: ping}] }这个请求会经过 OpenClaw 网关网关再用环境变量里的 TaoToken 配置去调用模型。如果返回里有choices字段和正常的content说明整条链路通了请求进网关、网关带 Key 转发到 TaoToken、TaoToken 路由到模型、响应原路返回。成功的结果长这样重点看choices[0].message.content有没有内容{ id: chatcmpl-xxx, object: chat.completion, choices: [ { index: 0, message: { role: assistant, content: pong }, finish_reason: stop } ], usage: { prompt_tokens: 5, completion_tokens: 2, total_tokens: 7 } }如果这一步通了再去绑通讯渠道、配开机自启这些就都是锦上添花。我建议先把这条 curl 验证跑通再折腾渠道绑定因为渠道那边出问题会掩盖模型鉴权的问题排查起来更绕。验证通过后你可以把openclaw gateway注册成守护进程用openclaw onboard --install-daemon走一遍向导把开机自启配上。5. 本篇常见错排查401、local proxy failed 与 reading choices搭建过程中最容易撞的几个报错我按出现频率排一下每个都给定位思路。401 Unauthorized。这个基本是 Key 没传对。先确认.env里TAOTOKEN_API_KEY没有多余空格或换行再确认 Docker 容器里确实读到了这个变量docker compose exec openclaw-gateway env | grep -i api_key如果容器里看不到说明env_file路径不对或者.env不在 compose 文件同级目录。还有一种情况是 Key 复制时漏了尾部字符重新去控制台生成一个再试。local proxy failed。这个报错通常出现在网关尝试连接模型服务时原因多是 Base URL 写错或网络不通。检查OPENAI_BASE_URL是不是https://taotoken.net/api不要带尾部斜杠也不要自己拼/v1。然后在容器里手动测一下连通性docker compose exec openclaw-gateway curl -s -o /dev/null -w %{http_code} https://taotoken.net/api返回 401 或 404 都说明网络是通的只是没带鉴权如果直接超时那是容器网络出口的问题检查 Docker 的 DNS 配置。reading choices 相关报错。类似cannot read property choices of undefined说明网关拿到了响应但结构不对通常是模型 ID 填错导致返回了错误对象。确认OPENCLAW_MODEL_ID是 TaoToken 支持的模型名去文档里核对一遍。另外检查请求头里的Authorization格式必须是Bearer加 Key中间一个空格。OAuth 或登录态报错。如果你之前用openclaw models auth login-xxx绑过某个厂商的 OAuth现在又想切到 TaoToken旧凭证可能还在缓存里。清一下配置目录再重启rm -rf ~/.openclaw/auth docker compose restart openclaw-gateway端口占用。18789 被别的进程占了网关起不来。查一下lsof -i :18789有占用就改.env里的OPENCLAW_GATEWAY_PORT同时改 compose 的端口映射两边保持一致。排查的核心思路就一条先确认环境变量在容器里可见再确认网络能到 TaoToken最后确认模型 ID 和请求格式对。这三层逐层排除基本没有解决不了的。6. 长期编码与 Agent 场景把统一 Key 用顺手的几个建议跑通之后如果你打算把 OpenClaw 当长期在用的网关有几个习惯能省不少事。第一是把.env做成模板文件.env.example提交到仓库真实.env留在本地团队协作时别人复制一份填自己的 Key 就行。第二是模型 ID 不要写死在代码里全部走环境变量换模型时只改一行。第三如果你还要接 Claude Code 这类编码工具可以让它们共用同一个 TaoToken Key。Claude Code 的接入配置里填的 Base URL 同样是https://taotoken.net/apiKey 用同一个这样 OpenClaw 网关和编码工具走的是同一条通道额度和管理都集中在一处。接入文档在这里https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。第四长期跑 Agent 任务的话建议把网关做成 systemd 服务或 Dockerrestart: unless-stopped避免进程挂了没人拉起来。日志用docker compose logs定期看一眼重点盯 401 和超时这两类。最后说个我踩过的坑一开始我把 Key 直接写进docker-compose.yml的environment里后来换 Key 忘了改 compose 文件容器里还是旧 Key排查了半天。改成env_file引用.env之后改 Key 只动一个文件再没出过这种问题。统一 Key 的价值不只是省事更是让配置只有一个真相来源。
返回列表