使用Docker Compose部署Workbuddy2api-panel进行反代的踩坑记录
Workbuddy2api-panel是Sliverkiss/workbuddy2api的增强分支,是一个自托管的CodeBuddy反向代理网关,能够将腾讯CodeBuddy包装为统一的/v1/chat/completions接口。在此,使用Docker Compose将它部署在NAS上。
项目地址
https://github.com/linguo2625469/workbuddy2api-panel
安装部署
本次使用Docker Compose的方式在绿联NAS的UGOS Pro中进行安装部署。
准备
首先下载项目文件,将其上传至NAS,并使用SSH登录进入NAS。
绿联NAS的UGOS Pro是基于Debian魔改的,共享文件夹依据存储池顺序以/volume{N}/{共享文件夹名}/...的形式被挂载。
进入NAS中的项目目录后,复制一份配置文件,并配置api_key
1 | cp config.example.json config.json |
安装
执行以下命令进行构建
1 | sudo docker compose up -d --build |
问题排查
这次在UGOS Pro上部署遇到了之前在Docker Desktop上没遇到的新坑,特此记录一下。
Ports are not available
docker compose启动时显示
1 | Error response from daemon: ports are not available: exposing port TCP 0.0.0.0:7863 -> 127.0.0.1:0: listen tcp 0.0.0.0:7863: bind: An attempt was made to access a socket in a way forbidden by its access permissions. |
此问题是由于项目默认的7863 端口,正好落在Windows系统保留的端口区间7786–7885之内。解决方法是修改docker-compose.yml中的端口号。
1 | ports: |
RUN go mod download
docker构建时提示
1 | => ERROR [wb2api build 4/6] RUN go mod download 60.4s |
这个问题出现在Go模块代理上。proxy.golang.org是Google的服务器,国内直连必然超时解决办法为给构建阶段换国内Go模块代理。
编辑Dockerfile进行如下修改。
1 | # syntax=docker/dockerfile:1 |
RUN apk add –no-cache wget ca-certifi
1 | => ERROR [wb2api stage-1 2/11] RUN apk add --no-cache wget ca-certifi 703.7s |
这个问题是运行阶段apk add连不上Alpine默认源dl-cdn.alpinelinux.org,还是通过添加代理来解决。
编辑Dockerfile,在apk add前加一行sed把默认源替换成阿里云镜像。
1 | ... |
Read config permission denied
DOCKER运行时显示
1 | load config: read config: open /app/config.json: permission denied |
这个问题是镜像里容器默认以app用户(uid 10001)运行,而宿主机上config.json的属主是你自己,权限不允许uid 10001读它,所以启动读配置时被拒。
可以参考README-常见问题进行修改。
1 | 方案 1(推荐,非 root):让容器以你自己的 uid 运行——挂载目录本来就是你建的 |
使用反代后的API
由于workbuddy2api-panel只暴露OpenAI兼容接口,没有/v1/messages(Anthropic Messages)和 /v1/responses(OpenAI Responses)这两个协议端点,所以Codex和Claude Code可以使用CC Switch进行API中转。
Codex
Codex只能使用Responses API协议,具体步骤如下。
切到Codex标签 → + → 自定义配置(Custom)。
在API Key中填写workbuddy的api_key
请求地址填写实际地址,如
http://127.0.0.1:17863展开高级选项:
上游格式:选 OpenAI Chat Completions(需开启路由)
模型映射:获取并设置模型映射
Claude Code
Claude Code只能使用Anthropic Messages协议,具体步骤如下。
- 切到 Claude Code 标签 → + → 自定义配置(Custom)。
- 在API Key中填写workbuddy的api_key
- 请求地址填写实际地址,如
http://127.0.0.1:17863 - 展开高级选项:
- 上游格式:选 OpenAI Chat Completions(需开启路由)
- 认证字段:保持默认 ANTHROPIC_AUTH_TOKEN;别改成 ANTHROPIC_API_KEY,否则会导致401/403
- 模型映射:至少填「默认兜底模型」;可选把Sonnet/Opus 映射到主力模型、Haiku 映射到一个便宜快速的模型
Deepseek Harness
由于Deepseek Harness支持OpenAI Chat Cpmpletions,可以直接接入无需借助CC Switch反代。
- API协议选择
OpenAI Chat Cpmpletions - API地址后面需加
/v1,比如http://127.0.0.1:17863/v1