1. 为什么要在 VPS 上部署 OpenClaw 龙虾
OpenClaw 是一个可以常驻在服务器上的 AI 助手框架,社区里习惯叫它“龙虾”。它能接入飞书、网页聊天、终端等多种入口,背后挂上大模型之后,就变成了一个 7×24 小时在线的私人助理。适合谁?适合想把 AI 助手固定在一个稳定环境里、不想每次开电脑都重新跑一遍的人,也适合想拿国产模型做“饲料”来喂龙虾、控制成本的开发者。
我这次的目标很明确:在一台 VPS 上从零把 OpenClaw 跑起来,接上飞书机器人,然后用 TaoToken 的统一 Key 通道接入国产模型,完成端到端连通性测试。整个过程会给出可复制的 Docker Compose 配置、环境变量模板、飞书验证步骤,以及部署中最容易踩的环境依赖和模型对接坑。
先说清楚前提。这个教程是在服务器上直接部署,给的是较高权限,所以不要放重要文件或私人信息,也不要和龙虾聊敏感内容。服务器建议选非中国大陆节点,内存 4G 以上,系统用 Debian 12 这类 LTS 版本比较稳。通讯工具需要一个飞书账号,用来做机器人接入。
为什么强调“国产模型做饲料”?因为龙虾本身只是个壳,真正干活的是背后的模型。国外模型能力强但成本和网络门槛都高,国产模型在中文场景下表现已经够用,配合 TaoToken 的统一 API 通道,可以做到一个 Key 管多个模型,切换起来不用改代码。下面从环境准备开始,一步步来。
2. TaoToken 前置准备:统一 Key 与 API 通道
在动手部署之前,先把模型通道准备好,否则龙虾跑起来也没饲料。TaoToken 的作用是提供一个统一的 API 入口,你只需要一个 Key,就能调用多个国产模型,不用为每个厂商单独申请、单独配置。对龙虾这种需要频繁切换模型的场景来说,省事很多。
第一步是拿到 API Key。访问官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 注册登录后,进入控制台创建 Key。控制台地址是 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite ,在 API Keys 页面可以新建和管理密钥,页面地址 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite 。创建时建议给 Key 起个能认出来的名字,比如openclaw-vps,方便后面排查。
拿到 Key 之后,要确认两件事:Base URL 和 Model ID。TaoToken 的 API 入口是 https://taotoken.net/api ,注意这个地址不带 UTM 参数,配置时直接填这个。Model ID 则取决于你想用哪个国产模型,常见的有glm-4、qwen-plus、deepseek-chat等,具体以控制台模型列表为准。这三个要素——Base URL、Key、Model ID——是后面所有配置的核心,缺一不可。
如果你还没想好先用哪个模型,可以先去模型对话页面试一下,地址 https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=model-chat&utm_campaign=rewrite ,在里面直接发消息验证 Key 是否可用、模型是否正常返回。这一步能提前排除 Key 无效或余额不足的问题,避免部署到一半才发现模型调不通。
对于长期跑编码或 Agent 任务的场景,可以考虑 Coding Plan,地址 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite ,它更适合高频调用。不过本篇先聚焦基础接入,用普通 Key 就够了。文档地址在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite ,遇到参数不确定时可以对照查。
注意:Key 只显示一次,创建后立刻复制保存。如果泄露,去控制台吊销重建,不要图省事继续用。
准备好这三样东西后,就可以进入服务器部署环节了。下面所有配置里的YOUR_TAOTOKEN_KEY都要替换成你自己的 Key,YOUR_MODEL_ID替换成实际模型 ID。
3. 可复制配置:Docker Compose 与环境变量模板
这一节是整篇的核心,给出可以直接复制的配置文件。我试过用 Docker Compose 来管 OpenClaw,好处是环境隔离干净,重启、升级都方便,不会把服务器系统搞乱。下面这份docker-compose.yml可以直接用,路径建议放在/opt/openclaw/docker-compose.yml。
version: "3.8" services: openclaw: image: openclaw/openclaw:latest container_name: openclaw restart: unless-stopped ports: - "18789:18789" env_file: - .env volumes: - ./data:/root/.openclaw environment: - TZ=Asia/Shanghai对应的环境变量模板放在同目录的.env文件里,路径/opt/openclaw/.env。这份模板把模型通道、飞书接入需要的占位都列出来了:
# TaoToken 统一 API 通道 OPENAI_BASE_URL=https://taotoken.net/api OPENAI_API_KEY=YOUR_TAOTOKEN_KEY OPENCLAW_DEFAULT_MODEL=YOUR_MODEL_ID # 服务端口与访问 OPENCLAW_PORT=18789 OPENCLAW_GATEWAY_TOKEN=YOUR_GATEWAY_TOKEN # 飞书接入(后续 channels add 时也会用到) FEISHU_APP_ID=YOUR_FEISHU_APP_ID FEISHU_APP_SECRET=YOUR_FEISHU_APP_SECRET # 时区 TZ=Asia/Shanghai这里有几个点要说明。OPENAI_BASE_URL填 TaoToken 的 API 地址,因为 OpenClaw 兼容 OpenAI 协议,所以走这个变量就能对接。OPENCLAW_GATEWAY_TOKEN是网页访问的认证 Token,可以自己生成一串随机字符,比如用openssl rand -hex 24生成。FEISHU_APP_ID和FEISHU_APP_SECRET先留空也行,等飞书应用创建后再补。
如果你更习惯用 TOML 配置,OpenClaw 也支持~/.openclaw/openclaw.json这种 JSON 形式。下面是一个最小可用的 JSON 片段,路径对应容器内的/root/.openclaw/openclaw.json:
{ "gateway": { "auth": { "token": "YOUR_GATEWAY_TOKEN" } }, "models": { "default": "YOUR_MODEL_ID", "providers": { "taotoken": { "baseUrl": "https://taotoken.net/api", "apiKey": "YOUR_TAOTOKEN_KEY" } } } }启动命令很简单,在/opt/openclaw目录下执行:
docker compose up -d然后看日志确认没有报错:
docker compose logs -f openclaw如果日志里出现模型连接失败,先检查.env里的 Key 和 Base URL 是否填对。如果出现端口占用,改docker-compose.yml里的映射端口即可。这套配置的好处是,模型通道和飞书配置都集中在.env,改起来不用动主配置。
提示:
data目录会持久化龙虾的会话和配置,升级镜像前先备份这个目录,避免数据丢失。
配置写完后,先别急着接飞书,用下面的验证步骤确认模型通道是通的,再往下走。
4. 验证请求与飞书接入:端到端连通性测试
配置写好后,第一步是验证模型通道。最直接的方式是在容器里发一个请求,确认 TaoToken 能正常返回。进入容器:
docker compose exec openclaw bash然后在容器内用 curl 测试:
curl https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer YOUR_TAOTOKEN_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "YOUR_MODEL_ID", "messages": [{"role": "user", "content": "你好,请回复一句话"}] }'如果返回里有choices字段和正常内容,说明模型通道通了。如果返回 401,说明 Key 有问题;如果返回reading choices之类的解析错误,多半是 Model ID 填错或模型不存在。这一步过了,再打开网页 UI 验证。
网页访问地址是http://你的服务器IP:18789/chat?token=YOUR_GATEWAY_TOKEN。注意 Token 要换成你自己生成的,不要用示例里的。如果页面报 1008,就是 Token 没带对或没生效,检查.env里的OPENCLAW_GATEWAY_TOKEN和 URL 里的 token 是否一致。正常打开后,在 Chat 界面发一条消息,确认龙虾能回复,说明模型和网页入口都通了。
接下来接飞书。先去飞书开放平台创建企业自建应用,添加“机器人”能力。然后在服务器上执行:
docker compose exec openclaw openclaw channels add按提示选择飞书,填入FEISHU_APP_ID和FEISHU_APP_SECRET。接着在飞书后台配置权限,用批量导入的方式把权限代码贴进去,再在“事件与回调”里选择长连接接收事件,添加im.message.receive_v1。创建版本并发布,让权限生效。
发布后给飞书机器人发消息,会提示需要配对。回到服务器执行配对命令:
docker compose exec openclaw openclaw pairing approve feishu YOUR_CODE把YOUR_CODE换成飞书里收到的实际代码。配对成功后,再回飞书发消息,就能正常聊天了。到这里,VPS 部署、模型接入、飞书打通就全部完成了。
5. 本篇常见错误排查
部署过程中最容易卡在几个地方,这里按真实报错对照排查。
401 Unauthorized:模型请求返回 401,基本是 Key 问题。检查.env里的OPENAI_API_KEY是否复制完整,有没有多余空格。如果 Key 刚创建,确认控制台里余额或额度正常。还有一种情况是 Base URL 写成了带路径的地址,正确写法是https://taotoken.net/api,不要多加/v1之外的路径。
local proxy failed:这个报错通常出现在容器网络配置上。如果服务器本身有网络限制,容器可能连不上外部 API。先确认容器内能解析域名:
docker compose exec openclaw ping -c 2 taotoken.net如果解析失败,检查 Docker 的 DNS 配置,可以在docker-compose.yml里加dns: [8.8.8.8]。如果解析正常但请求超时,检查服务器防火墙出站规则。
reading choices 解析错误:返回体里没有choices字段,多半是 Model ID 不对。去控制台确认模型列表里的准确 ID,注意大小写和连字符。有些模型需要特定前缀,填错就会返回错误结构。
OAuth 相关报错:如果日志里出现 OAuth 字样,通常是飞书应用配置问题。检查FEISHU_APP_ID和FEISHU_APP_SECRET是否匹配,权限是否已发布生效。飞书应用没发布时,事件回调不会触发,配对也会失败。
网页 1008 错误:Token 认证失败。确认 URL 里的 token 和.env里的OPENCLAW_GATEWAY_TOKEN完全一致,包括大小写。如果改过.env,要重启容器:
docker compose restart openclaw端口占用:启动时报端口被占用,改docker-compose.yml里的18789:18789左边那个端口,比如改成18790:18789,然后重新docker compose up -d。
排查时养成看日志的习惯,docker compose logs -f openclaw会实时输出错误,大部分问题看日志就能定位。如果模型通道反复失败,先去模型对话页面单独测一下 Key,排除是 Key 本身的问题还是配置问题。
6. 继续用 TaoToken 管理你的龙虾饲料
龙虾跑起来之后,真正的日常是喂它。国产模型的好处是成本可控,配合 TaoToken 的统一 Key,切换模型不用改代码,改一个环境变量重启就行。比如你想从glm-4换到deepseek-chat,只改.env里的OPENCLAW_DEFAULT_MODEL,然后docker compose restart openclaw即可。
如果你打算长期跑编码或 Agent 任务,Coding Plan 会更合适,地址 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite 。接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite ,遇到新模型或参数问题可以对照。Key 管理在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite ,建议定期轮换。
最后给个实用技巧:把.env和data目录一起备份,换服务器时直接搬过去,改一下 IP 就能继续用。龙虾的会话记录都在data里,别弄丢。模型通道这边,TaoToken 的 API 入口 https://taotoken.net/api 保持稳定,配置一次就能长期用。