1. 为什么要在 1Panel 里私有化部署 OpenClaw
OpenClaw 是一个开源的多模型 AI 聊天客户端,支持 OpenAI 兼容协议,只要改一下 Base URL 就能接各种大模型 API。它的界面和 ChatGPT 类似,但数据完全跑在你自己的服务器上,适合团队内部试用、对比不同模型效果,或者单纯不想把对话记录留在第三方平台。1Panel 则是一个开源的 Linux 服务器运维面板,自带应用商店、反向代理、HTTPS 证书申请,把原本需要手写 docker-compose 和 Nginx 配置的流程压缩成点几下鼠标。
把这两个东西组合起来,解决的其实是一个很具体的痛点:多模型 Key 分散管理。以前团队里每个人手里可能都有好几个平台的 Key,Claude 一个、GPT 一个、DeepSeek 一个,谁用了多少、哪个 Key 快过期了,全靠脑子记。私有化部署 OpenClaw 之后,所有模型调用统一走一个入口,Key 只配一次,团队成员用同一个地址访问,切换模型就像切换下拉菜单。再配合 TaoToken 的统一 Key,Base URL 填一次,后面加模型只是改 Model ID 的事。
这篇文章面向的是有一台 Linux 服务器、想快速搭一个内部 AI 聊天入口的人。不需要你精通 Docker,也不需要你会写 Nginx 配置,跟着步骤走,10 分钟左右能跑起来。我试过在 2C4G 的轻量服务器上部署,同时三四个人用没什么压力。下面从环境准备开始,把 docker-compose 配置、TaoToken 的 Base URL 填写位置、以及部署后怎么验证连通性都写清楚。
2. TaoToken 前置准备与统一 Key 获取
在动手部署 OpenClaw 之前,先把 Key 的事情理清楚。OpenClaw 本身只是个客户端,它不生产模型能力,需要你给它一个能调用的 API 入口。TaoToken 在这里扮演的角色就是统一入口:你不需要分别去注册 Claude、GPT、DeepSeek 的账号,只需要在 TaoToken 拿一个 Key,然后把 Base URL 指向它的 API 地址,后面想用什么模型,改 Model ID 就行。
先访问 TaoToken 官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 注册账号。注册流程不复杂,邮箱验证之后就能进控制台。登录之后找到 API Keys 页面,路径是控制台左侧菜单里的「API Keys」,点「创建新 Key」,给它起个名字,比如openclaw-team,方便后面区分用途。创建完会显示一串sk-开头的字符串,复制下来存好,这个就是后面要填进 OpenClaw 的 API Key。
这里有个细节要注意:TaoToken 的 API 地址是 https://taotoken.net/api ,不带 UTM 参数。在 OpenClaw 里填 Base URL 的时候,通常需要带上/v1后缀,也就是https://taotoken.net/api/v1,因为 OpenClaw 走的是 OpenAI 兼容协议,默认会往/v1/chat/completions发请求。如果你填的地址少了/v1,检查连接的时候可能会报 404,这个后面排障部分会细说。
模型 ID 方面,TaoToken 支持不少主流模型,你在控制台的模型列表里能看到可用的 Model ID。常见的比如claude-sonnet-4-20250514、gpt-5.5、deepseek-chat这些,具体以你控制台显示的为准。建议先在 TaoToken 的「模型对话」页面手动发一条消息,确认 Key 本身是通的,再去配 OpenClaw。这样万一后面连不上,你能快速判断是 Key 的问题还是 OpenClaw 配置的问题。
提示:Key 创建后只显示一次,关掉页面就看不到了。如果没存下来,只能删掉重建。建议直接存进密码管理器,或者先临时记在便签里,配完 OpenClaw 再删。
3. 1Panel 应用商店部署 OpenClaw 与可复制配置
如果你服务器上还没装 1Panel,先 SSH 登上去跑一行安装命令:
curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh装完会输出面板地址、用户名、密码,记下来。云服务器记得在安全组放行 18443 端口,不然页面打不开。登录 1Panel 后台后,左边菜单进「应用商店」,搜索OpenClaw,点安装。安装界面会让你填端口和数据目录,端口默认 3210,不冲突就别改;数据目录保持默认;外部访问打开。点确认,等一两分钟容器拉起来。
如果你更习惯用 docker-compose 管理,或者 1Panel 应用商店里暂时搜不到(版本低于 v1.10 会搜不到,可以用1pctl update升级),也可以手动写一份 compose 文件。下面这份是我实际用过的配置,放在/opt/openclaw/docker-compose.yml:
version: "3.8" services: openclaw: image: openclaw/openclaw:latest container_name: openclaw restart: unless-stopped ports: - "3210:3210" environment: - OPENAI_API_KEY=sk-你的TaoTokenKey - OPENAI_BASE_URL=https://taotoken.net/api/v1 - DEFAULT_MODEL=claude-sonnet-4-20250514 volumes: - ./data:/app/data这份配置里三个环境变量是关键:OPENAI_API_KEY填你在 TaoToken 创建的 Key,OPENAI_BASE_URL填https://taotoken.net/api/v1,DEFAULT_MODEL填你想默认使用的 Model ID。如果你用 1Panel 应用商店安装,这些参数可以在安装界面的「环境变量」或安装后的「参数设置」里填,效果一样。
启动命令:
cd /opt/openclaw docker compose up -d跑完之后docker ps应该能看到 openclaw 容器在运行。访问http://你的服务器IP:3210,能看到 OpenClaw 的登录或聊天界面就说明容器起来了。这时候它还只是个空壳,需要进设置里把模型服务商配上。
进 OpenClaw 界面后,左下角齿轮图标进设置,找到「语言模型」或「AI 服务商」,添加一个 OpenAI 类型的服务商。API Key 填 TaoToken 的 Key,API 代理地址填https://taotoken.net/api/v1。填完点「检查」或「测试连接」,如果返回模型列表,说明通了。然后在模型列表里勾选你要用的,比如claude-sonnet-4-20250514、gpt-5.5、deepseek-chat,保存。
注意:Base URL 末尾的
/v1不能少。OpenClaw 默认会往{base_url}/chat/completions发请求,如果你只填https://taotoken.net/api,实际请求会打到https://taotoken.net/api/chat/completions,路径不对就会 404。
4. 验证请求与成功结果确认
配置填完之后,别急着关设置页面,先做一次连通性验证。OpenClaw 的设置里一般有个「检查」按钮,点下去它会拿你填的 Base URL 和 Key 去请求模型列表接口。如果配置正确,你会看到一个模型列表弹出来,里面包含 TaoToken 支持的模型 ID。这一步成功,说明 Key 和 Base URL 都没问题。
如果设置页面没有检查按钮,或者你想更直接地验证,可以回到聊天界面,右上角选一个模型,发一条测试消息,比如「你好,请回复 OK」。正常情况下几秒内会看到流式输出。如果消息发出去一直转圈没反应,或者报错,那就需要排查了。
更底层的验证方式是用 curl 直接打 TaoToken 的接口,排除 OpenClaw 本身的干扰:
curl https://taotoken.net/api/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer sk-你的TaoTokenKey" \ -d '{ "model": "claude-sonnet-4-20250514", "messages": [{"role": "user", "content": "回复 OK"}] }'如果这条命令返回了正常的 JSON 响应,里面有choices字段和模型回复内容,说明 TaoToken 侧完全正常,问题在 OpenClaw 配置。如果这条命令就报 401,那就是 Key 的问题;报 404,那就是 URL 路径问题。
成功的结果长这样:聊天界面里模型正常回复,流式输出一个字一个字蹦出来,代码块有高亮,Markdown 渲染正常。这时候你可以再切换另一个模型发一条消息,确认多模型切换也没问题。我实测下来,从点开设置到验证通过,大概两三分钟。
提示:验证的时候建议用
claude-sonnet-4-20250514这类响应快的模型,别一上来就用推理型模型,不然等半天以为卡死了。
5. 本篇常见错误排查
部署过程中最容易卡住的地方就那么几个,我把真实遇到过的报错和解决办法列出来,你对照着看。
报错一:401 invalid_api_key
{"error":{"message":"Incorrect API key provided: sk-xxxx...xxxx.","type":"invalid_request_error","code":"invalid_api_key"}}这个基本就是 Key 填错了。最常见的原因是复制的时候前面多了空格,或者 Key 被截断了。从密码管理器复制的时候特别容易带空格。解决办法:把 Key 删掉重新粘贴,粘贴后光标移到最前面按几下退格,确保没有隐藏字符。如果还不行,去 TaoToken 控制台重新创建一个 Key 试试。
报错二:404 Not Found 或 reading choices 报错
{"error":{"message":"Not Found","type":"invalid_request_error"}}或者 OpenClaw 日志里出现error reading choices。这通常是 Base URL 路径不对。检查你填的是不是https://taotoken.net/api/v1,末尾的/v1有没有漏。如果填的是https://taotoken.net/api,请求会打到错误路径。另外注意不要填成https://taotoken.net/api/v1/chat/completions,Base URL 只需要到/v1这一层。
报错三:local proxy failed 或连接超时
local proxy failed: dial tcp 127.0.0.1:3210: connect: connection refused这个一般是容器没起来,或者端口映射有问题。先docker ps看 openclaw 容器在不在运行,如果状态是Exited,用docker logs openclaw看日志。常见原因是 3210 端口被占用,改一下 compose 里的端口映射,比如改成3211:3210,然后重启容器。
报错四:WebSocket 连接失败
WebSocket connection to 'wss://chat.yourdomain.com/api/ws' failed: Error during WebSocket handshake: Unexpected response code: 502这个出现在你配了反向代理之后。1Panel 默认的反向代理配置没加 WebSocket 支持,流式输出会断。解决办法:进 1Panel 的网站设置,找到「配置文件」,在location /块里加三行:
proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade";保存后重载 Nginx,刷新页面就好了。
报错五:OAuth 或登录态异常
如果你给 OpenClaw 开了访问密码,但登录后一直跳回登录页,检查一下浏览器是不是禁用了 Cookie,或者反向代理有没有正确传递 Header。1Panel 反代默认会带Host和X-Real-IP,一般不用改。如果用了 CDN,需要在 CDN 侧也放行 WebSocket。
报错六:1Panel 应用商店搜不到 OpenClaw
版本太低。v1.10 以上才有 OpenClaw。在 1Panel 后台「面板设置」→「关于」里看版本号,低于 v1.10 的话跑1pctl update升级,升级完刷新页面再搜。
6. 长期使用建议与统一 Key 管理
部署跑通只是第一步,后面长期用起来,有几个地方值得提前规划。首先是 Key 的管理。TaoToken 的统一 Key 好处是只配一次,但如果你团队人多,建议按用途拆 Key,比如openclaw-dev给开发用,openclaw-pm给产品用,这样在 TaoToken 控制台看用量的时候能区分开。OpenClaw 本身支持多服务商并存,你可以在设置里加多个 provider,聊天时随时切换,但 Base URL 都指向 TaoToken,Key 用不同的。
其次是反向代理和 HTTPS。用 IP 裸奔访问不太安全,特别是要给团队其他人用的时候。1Panel 自带网站管理,创建反向代理指向http://127.0.0.1:3210,然后申请 Let's Encrypt 证书开强制 HTTPS,整个过程鼠标点点就行。证书自动续期,不用手动管。配完记得加前面说的那三行 WebSocket 配置,不然流式输出会断。
再就是模型选择。OpenClaw 里可以勾选多个模型,聊天时右上角切换。我的习惯是日常对话用claude-sonnet-4-20250514,写代码用gpt-5.5,快速问答用deepseek-chat。这些 Model ID 在 TaoToken 控制台都能查到,填进 OpenClaw 的模型列表就行。如果你后面想加新模型,不用改 Base URL,也不用换 Key,只在 OpenClaw 里加一个 Model ID 就完事。
如果你需要更细的用量统计,比如看每个人分别花了多少 Token,单靠 OpenClaw 做不到。我的做法是在 TaoToken 控制台按 Key 维度看调用记录,每笔请求的 Token 消耗和费用都能看到。如果你团队规模再大一点,可以考虑给每个人单独发 Key,这样统计更清晰。
最后,如果你后面想把这套东西接到 Coding Plan 或者做 Agent 开发,TaoToken 的 Coding Plan 页面有更详细的接入说明,Base URL 和 Key 的用法跟这里一致,只是调用方式不同。模型对话页面也可以直接在线试模型,不用部署就能验证 Key 通不通。接入文档里有各种语言的示例代码,遇到问题可以先翻文档。
部署完之后,最容易忘的就是 WebSocket 那三行配置。我踩过一次坑,流式输出不工作,查了半天以为是 Key 的问题,结果是 Nginx 没配 Upgrade。记住这个,能省你半小时。