news 2026/10/10 14:49:58

云服务器 OpenClaw + 飞书 + DeepSeek 部署实战:把 endpoint 改到 TaoToken 的完整配置

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
云服务器 OpenClaw + 飞书 + DeepSeek 部署实战:把 endpoint 改到 TaoToken 的完整配置

1. 云服务器 OpenClaw 部署前,先把模型通道这件事想清楚

OpenClaw 是一个可以跑在云服务器上的开源 AI Agent 网关,它能通过飞书、Web UI 等渠道接收消息,再调用底层大模型完成对话、云文档操作、联网搜索等任务。适合谁?适合手里有一台 2 核 4G 小机器、想给自己或小团队搭一个私有 AI 助手的开发者。你不需要公网 IP,飞书走 WebSocket 长连接就能接入。

但真正跑起来之前,有一个容易被忽略的环节:模型 endpoint 和鉴权配置。OpenClaw 的 Onboarding 向导默认让你填一个 OpenAI 兼容的 API Base URL,很多人直接填了模型厂商的官方地址。这样做本身没问题,但当你后续想换模型、想统一管理多个渠道的 Key、想看调用量的时候,就会发现自己被绑死在单一入口上。

我这次部署的目标很明确:用 Docker 在云服务器上跑 OpenClaw Gateway,接入飞书机器人,底层模型走 DeepSeek,但 endpoint 和鉴权统一改到 TaoToken 通道。这样做的直接好处是,以后换模型只需要改一个 Base URL 和 Model ID,不用动 OpenClaw 本身的配置结构;同时所有渠道的调用都从一个入口出去,排查问题的时候链路清晰。

整条链路是这样的:飞书消息 → OpenClaw Gateway(Docker 容器)→ TaoToken 统一通道 → DeepSeek 模型 → 返回结果。Web UI 和飞书共用同一个 Gateway,配置只写一份。

下面我会按实际部署顺序,把 docker-compose 片段、环境变量清单、飞书回调验证步骤、连通性自检命令全部给出来。你跟着做,一次跑通的概率会高很多。

2. TaoToken 前置准备:拿 Key、选通道、确认 Base URL

在动 Docker 之前,先把 TaoToken 这边的准备工作做完。这一步不复杂,但顺序不能乱。

首先访问官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 注册账号。注册完成后进入控制台,找到 API Keys 管理页面。这里你可以创建多个 Key,建议按用途分开:一个给 OpenClaw 的 Gateway 用,一个留着做测试。创建时把 Key 复制下来,格式通常是 sk- 开头的一长串,后面配置环境变量要用。

然后是选通道。TaoToken 提供多种接入方式,对于 OpenClaw 这种走 OpenAI 兼容协议的场景,你只需要确认两件事:Base URL 和 Model ID。Base URL 统一用 https://taotoken.net/api,注意这个地址后面不加任何 UTM 参数,直接写就行。Model ID 根据你实际要调的模型来填,比如 deepseek-chat 对应 DeepSeek 的对话模型。

如果你后续打算长期跑编码类 Agent 任务,可以了解一下 Coding Plan,它在调用额度和通道稳定性上有针对性优化。如果只是先验证模型能不能通,可以直接用模型对话页面发一条测试消息,确认 Key 有效、通道正常,再回到服务器上配置。接入文档在 doc 页面有完整的参数说明,遇到不确定的字段先去那里查。

这里有个细节要注意:OpenClaw 的 Onboarding 向导里,LLM 提供商要选 “Custom Provider (Any OpenAI or Anthropic compatible endpoint)”,然后 API Base URL 填 https://taotoken.net/api,Endpoint 兼容模式选 “OpenAI-compatible (Uses /chat/completions)”。这样 OpenClaw 就会把所有模型请求发到 TaoToken 的统一入口,由 TaoToken 再转发到 DeepSeek。

Key 的管理建议:不要把 Key 直接写进 docker-compose.yml 或者 Dockerfile,统一放在 .env 文件里,通过 --env-file 加载。这样镜像可以复用,Key 泄露的风险也小。如果你用 git 管理部署脚本,记得把 .env 加进 .gitignore。

3. 可复制配置:docker-compose 片段与环境变量清单

这一节是全文的核心,所有配置都可以直接复制。我先把目录结构定下来,后面所有路径都基于这个结构。

/opt/openclaw/ # 项目根目录 /opt/openclaw/.env # 环境变量文件 /opt/openclaw-data/config/ # 持久化配置,挂载到容器 /home/node/.openclaw /opt/openclaw-data/workspace/ # Agent 工作区,挂载到容器 workspace

先写 .env 文件。这里把 TaoToken 的 Base URL、Key、Model ID 全部集中管理:

# /opt/openclaw/.env OPENCLAW_CONFIG_DIR=/opt/openclaw-data/config OPENCLAW_WORKSPACE_DIR=/opt/openclaw-data/workspace OPENCLAW_GATEWAY_PORT=18789 OPENCLAW_BRIDGE_PORT=18790 OPENCLAW_GATEWAY_BIND=0.0.0.0 OPENCLAW_IMAGE=openclaw:local OPENCLAW_GATEWAY_TOKEN=placeholder_will_be_replaced HOME=/home/node TERM=xterm-256color # TaoToken 统一通道配置 TAOTOKEN_BASE_URL=https://taotoken.net/api TAOTOKEN_API_KEY=sk-你的TaoTokenKey TAOTOKEN_MODEL_ID=deepseek-chat

注意 OPENCLAW_GATEWAY_TOKEN 这里先写占位值,Onboarding 跑完后再替换成真实 Token。TAOTOKEN_API_KEY 换成你控制台里创建的那个 Key。

接下来是 docker-compose.yml。我用 compose 而不是纯 docker run,是因为后面加 Tavily 环境变量、改资源限制的时候,compose 改起来更清晰:

# /opt/openclaw/docker-compose.yml version: "3.8" services: openclaw-gateway: image: openclaw:local container_name: openclaw-gateway restart: unless-stopped init: true networks: - openclaw-net env_file: - /opt/openclaw/.env ports: - "18789:18789" - "18790:18790" volumes: - /opt/openclaw-data/config:/home/node/.openclaw - /opt/openclaw-data/workspace:/home/node/.openclaw/workspace deploy: resources: limits: cpus: "1.5" memory: 2500M command: node /app/openclaw.mjs gateway --port 18789 --verbose networks: openclaw-net: driver: bridge ipam: config: - subnet: 172.30.0.0/24 gateway: 172.30.0.1

这里有几个关键点。第一,env_file 指向 .env,所有环境变量自动注入容器。第二,volumes 把 config 和 workspace 挂到宿主机,容器删了数据还在。第三,deploy.resources.limits 限制 CPU 1.5 核、内存 2500M,防止小机器被吃光。第四,command 里用 node /app/openclaw.mjs 而不是 openclaw 命令,因为项目用 pnpm 管理依赖,入口文件是 .mjs。

构建镜像的命令:

cd /opt/openclaw docker build \ --build-arg NPM_CONFIG_REGISTRY=https://registry.npmmirror.com \ -t openclaw:local -f Dockerfile .

构建完成后,先跑 Onboarding 向导。这一步会生成真实的 Gateway Token,并写入模型配置。注意向导里 API Base URL 填 https://taotoken.net/api,API Key 填你的 TaoToken Key,Model ID 填 deepseek-chat:

docker run --rm -it \ --name openclaw-onboard \ --network openclaw-net \ --env-file /opt/openclaw/.env \ -v /opt/openclaw-data/config:/home/node/.openclaw \ -v /opt/openclaw-data/workspace:/home/node/.openclaw/workspace \ openclaw:local \ node /app/openclaw.mjs onboard

向导跑完后,配置文件在 /opt/openclaw-data/config/openclaw.json。你需要做三处修正:把 bind 从 loopback 改成 lan,把 .env 里的 Token 替换成真实值,把模型上下文窗口从默认的 4096 改成 131072。前两步用 sed 和 grep 组合完成:

sed -i 's/"bind": "loopback"/"bind": "lan"/' /opt/openclaw-data/config/openclaw.json T=$(grep -oP '"token":\s*"\K[^"]+' /opt/openclaw-data/config/openclaw.json) sed -i "s/^OPENCLAW_GATEWAY_TOKEN=.*/OPENCLAW_GATEWAY_TOKEN=$T/" /opt/openclaw/.env

上下文窗口的修正用 Python 脚本处理,因为 JSON 嵌套比较深:

python3 - <<'EOF' import json p = '/opt/openclaw-data/config/openclaw.json' c = json.load(open(p)) m = c['models']['providers']['deepseek']['models'][0] m['contextWindow'] = 131072 m['maxTokens'] = 8192 json.dump(c, open(p, 'w'), indent=2) print('context window fixed') EOF

到这里,TaoToken 的 endpoint 和鉴权配置就全部落到 OpenClaw 的配置文件里了。启动 Gateway:

cd /opt/openclaw docker compose up -d

4. 验证请求:连通性自检与飞书回调确认

容器起来之后,不要急着去飞书发消息,先做三层自检。第一层是容器状态,第二层是 Gateway HTTP 响应,第三层是模型通道连通性。

容器状态检查:

docker ps --filter "name=openclaw-gateway" \ --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"

预期输出里 STATUS 应该是 Up,PORTS 显示 0.0.0.0:18789-18790->18789-18790/tcp。如果容器反复重启,用 docker logs openclaw-gateway --tail 50 看日志。

Gateway HTTP 响应检查:

curl -s -o /dev/null -w "HTTP状态码: %{http_code}\n" http://localhost:18789/

返回 200 说明 Gateway 在监听。如果返回 000,检查安全组和 ufw 是否放行了 18789 端口。

模型通道连通性检查,这一步直接验证 TaoToken 的 endpoint 是否配对了:

docker exec openclaw-gateway node /app/openclaw.mjs models test \ --provider deepseek --model deepseek-chat

如果输出里出现 Verification successful 或者类似的成功标识,说明 OpenClaw 已经能通过 TaoToken 的 Base URL 调到 DeepSeek 模型。如果报 401,说明 Key 不对;如果报 connection refused,说明 Base URL 写错了。

飞书回调验证要等飞书应用配置完之后做。先在飞书开放平台把事件订阅配好,选择“使用长连接接收事件”,添加 im.message.receive_v1 事件。然后在服务器上确认飞书通道状态:

docker exec openclaw-gateway node /app/openclaw.mjs channels status

预期输出里 Feishu 那一行应该是 enabled, configured, running。如果 configured 是 false,说明 App ID 或 App Secret 没写进去,重新执行 config set 命令。

最后在飞书里给机器人发一条消息,比如“你好”。机器人会先回复配对码,你在服务器上批准:

docker exec openclaw-gateway node /app/openclaw.mjs pairing approve feishu <配对码>

批准后再发一条消息,如果 AI 正常回复,整条链路就通了。首条消息有几秒延迟是正常的,因为 Agent 要加载 workspace 里的 SOUL.md 和 USER.md。

5. 本篇常见错排查:401、local proxy failed、reading choices、OAuth

部署过程中最容易卡住的几个报错,我按实际遇到的频率排个序,每个都给出定位方法和修复命令。

401 Unauthorized。这个通常出现在模型调用阶段,日志里会写 “invalid api key” 或者 “authentication failed”。原因一般是 .env 里的 TAOTOKEN_API_KEY 没填对,或者 Onboarding 时填的 Key 和 .env 里的不一致。排查方法:

docker exec openclaw-gateway env | grep TAOTOKEN_API_KEY

确认输出的 Key 和你控制台里的一致。如果不一致,改 .env 后必须删容器重建,docker restart 不会重新读 env 文件:

docker compose down && docker compose up -d

local proxy failed。这个报错说明 OpenClaw 尝试走本地代理但失败了。常见原因是环境变量里残留了 HTTP_PROXY 或 HTTPS_PROXY,或者 Base URL 写成了 localhost 但容器内没有对应服务。检查:

docker exec openclaw-gateway env | grep -i proxy

如果有输出,在 .env 里把这些变量清空,然后重建容器。另外确认 TAOTOKEN_BASE_URL 是 https://taotoken.net/api,不是 http,也不是带路径的地址。

reading choices。这个报错一般出现在模型返回格式不符合预期的时候,日志里会写 “cannot read property choices of undefined”。根因通常是 Base URL 指向了一个不兼容 OpenAI 协议的端点,或者 Model ID 填错了。确认两件事:Base URL 是 https://taotoken.net/api,Model ID 是 deepseek-chat。如果用的是其他模型,去 doc 页面查对应的 Model ID。

OAuth 相关报错。如果你在飞书配置阶段看到 OAuth 字样,通常是飞书应用的权限没开全,或者事件订阅没配。回到飞书开放平台,确认 im:message、im:message:send_as_bot、im:message.p2p_msg:readonly 这三个权限已开通,事件订阅里 im.message.receive_v1 已添加。改完权限后必须发布新版本才生效。

还有一个隐蔽的坑:模型上下文窗口太小。报错信息是 “Model context window too small (4096 tokens). Minimum is 16000.”。这是 Onboarding 默认值导致的,按第 3 节的 Python 脚本改成 131072 就行。

6. 后续维护与 CTA

日常维护主要做三件事:看日志、备份数据、更新镜像。看日志用 docker logs openclaw-gateway --tail 100 -f,重点看有没有 401 或 timeout。备份就是把 /opt/openclaw-data/ 打包:

tar -czf /root/openclaw-backup-$(date +%Y%m%d).tar.gz /opt/openclaw-data/

更新镜像的流程是 git pull、docker build、docker compose down、docker compose up -d。因为数据都在宿主机挂载目录里,重建容器不会丢配置。

如果你在排障过程中需要重新生成 Key 或者查接入参数,直接去 API Keys 页面操作,接入文档在 doc 页面。想先验证模型通道是否正常,可以用模型对话页面发一条测试消息,不用动服务器。长期跑编码类 Agent 任务的话,Coding Plan 在调用额度上更适合持续使用。

整条链路跑通之后,你手里就有了一个能通过飞书对话、能操作云文档、能联网搜索的私有 AI 助手,而底层模型通道是统一管理的。以后换模型、加渠道,只需要改 .env 里的 Base URL 和 Model ID,OpenClaw 本身不用动。

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

PyTorch CNN实战:MNIST手写数字识别课设包完整解析

简介&#xff1a;这份资源面向深度学习入门者与课程设计需求的学生&#xff0c;围绕卷积神经网络识别MNIST手写数字这一经典实验展开&#xff0c;帮助读者理解CNN的基本结构与训练流程。压缩包共11个文件&#xff0c;约176KB&#xff0c;包含Python脚本、Word设计报告、Markdow…

作者头像 李华
网站建设 2026/10/10 14:48:31

VOC手机检测数据集从零构建:标注、转换与踩坑指南

简介&#xff1a;面向目标检测算法训练与验证的数据集资源&#xff0c;围绕手机目标识别场景构建&#xff0c;适合使用YOLO、Faster-RCNN等主流框架的算法工程师、科研人员及计算机视觉学习者。包内共一万五千余个文件&#xff0c;包含五千余张真实场景jpg图片&#xff0c;以及…

作者头像 李华
网站建设 2026/10/10 14:46:03

LivePortrait 本地部署实战:ONNX 导出与 onnxruntime C++/Python 推理

简介&#xff1a;本资源面向希望在人像动画生成方向落地的开发者与算法工程师&#xff0c;提供一套基于onnxruntime推理的LivePortrait部署程序&#xff0c;同时给出C与Python两套实现&#xff0c;便于在桌面端或工程环境中集成。压缩包共14个文件&#xff0c;约459KB&#xff…

作者头像 李华
网站建设 2026/10/10 14:45:21

给AI编程助手补上长期记忆:claude-mem本地记忆工具实战指南

最近我在调整 AI 辅助编程的工作流时&#xff0c;踩了一个特别真实的坑&#xff1a;模型的单次对话能力再强&#xff0c;它依然不记得你昨天做过什么。上午我花了二十分钟跟命令行里的编程助手解释某个服务的调用约定&#xff0c;下午换了个文件继续写代码&#xff0c;它又把同…

作者头像 李华
网站建设 2026/10/10 14:44:47

SD卡参数错误不慌:镜像备份与数据恢复全流程

被“参数错误”吓到过的人应该不少。插上SD卡准备导照片&#xff0c;双击盘符&#xff0c;屏幕上弹出一句“无法访问&#xff0c;参数错误”&#xff0c;那一刻多数人的第一反应就是&#xff1a;完了&#xff0c;几年照片全没了。但如果你真的因此把卡格式化或者直接扔进抽屉吃…

作者头像 李华
网站建设 2026/10/10 14:43:27

C# WinForms图书管理系统:数据库设计与远程连接全实践

这个项目标题放在技术社区里&#xff0c;属于一眼就能看明白类型的那种——C# WinForms、图书管理、数据库、图片管理&#xff0c;还附带一套完整文档。我当初做类似项目时踩了不少坑&#xff0c;今天专门把它拆开揉碎聊一聊&#xff0c;希望能给正在做课设、毕设&#xff0c;或…

作者头像 李华