用 CLIProxyAPI 搭建多账号 Codex 代理池
背景
有多个 OpenAI / Codex 订阅账号时,在不同客户端之间手动切换又麻烦又浪费——每个账号有独立的使用频率限制,但单个客户端固定用某一个账号时,其余的额度就闲置了。
理想状态是:多个账号的额度合在一起,对外暴露成一个统一的 API 端点,自动做负载均衡和故障转移。任何时候任何客户端接入,都只用一个 API key,后端自动把请求分配到有余量的账号上。
CLIProxyAPI(以下称 CPA)正是干这个的。它把 Codex、Claude Code、Gemini CLI、Grok Build 等 CLI 工具的 OAuth 凭证转换成标准 OpenAI/Gemini/Claude 兼容 API,内置多账号轮询和 token 自动刷新。
本文记录在一台 Debian VPS 上的完整部署过程。
目标与约束
- 多个 Codex 账号聚合:每个账号独立 OAuth 凭证,支持自动 token 刷新
- 统一 API 端点:对外暴露标准
/v1/chat/completions,所有客户端共用 - 自动轮询:CPA 内置 round-robin,请求自动分配到可用账号
- 无头服务器友好:VPS 没有桌面环境,OAuth 登录需要通过 SSH 端口转发或管理面板完成
- systemd 部署:不使用 Docker,以节省磁盘空间
- 最小配置:只做 Codex 通道,其他 provider 按需再开
安装
CPA 官方提供了一键安装脚本,自动检测架构、下载二进制、创建目录结构:
curl -fsSL https://raw.githubusercontent.com/brokechubb/cliproxyapi-installer/refs/heads/master/cliproxyapi-installer | bash安装后目录结构:
~/cliproxyapi/├── cli-proxy-api # 主程序二进制├── config.yaml # 配置文件├── cliproxyapi.service # systemd 服务文件├── static/ # 管理面板前端资源└── 7.1.19/ # 版本目录(旧版本保留最近 2 个)配置
核心文件是 ~/cliproxyapi/config.yaml,最小可用配置如下:
host: "0.0.0.0" # 监听所有网络接口port: 8317 # 主 API 端口auth-dir: "~/.cli-proxy-api" # OAuth 凭证存储目录api-keys: - "sk-your-secret-api-key" # 对外统一 API 密钥debug: false
remote-management: allow-remote: true # 允许远程访问管理面板 secret-key: "your-password" # 管理面板登录密钥(启动时自动 hash)说明:
api-keys是客户端连接 CPA 时使用的 API key,格式随意(sk-前缀是 OpenAI 惯例)secret-key是管理面板的登录密码,明文写入即可,CPA 启动后自动哈希auth-dir下的文件是各账号的 OAuth 凭证 JSON
添加 Codex 账号(OAuth 登录)
CPA 的 OAuth 回调地址固定为 http://localhost:1455/auth/callback。VPS 没有桌面环境,需要借助 SSH 端口转发完成回调。
方法:SSH 正向隧道
核心思路:把本机 1455 端口转发到 VPS 的 1455 端口,让 OAuth 回调能回到 CPA。
第一步:停掉正在运行的 CPA(释放 1455 端口)。
第二步:在 VPS 上以交互模式启动 CPA 的 OAuth 登录流程:
cd ~/cliproxyapi./cli-proxy-api --codex-login此时 CPA 会:
- 生成 PKCE 验证码
- 在本地
localhost:1455启动 OAuth 回调监听 - 打印一个
https://auth.openai.com/oauth/authorize?...授权链接
第三步:在本机建立 SSH 隧道(PowerShell):
ssh -L 1455:localhost:1455 root@你的VPS_IP -i "C:\Users\xxx\.ssh\id_ed25519"第四步:本机浏览器打开授权链接 → 完成 OpenAI 登录 → 授权回调 localhost:1455 → 通过 SSH 隧道回到 CPA。
登录成功后,凭证自动保存到 ~/.cli-proxy-api/codex-{email}.json。
第五步:多个账号重复上述流程,每个账号生成独立的凭证文件。
凭证文件格式
自动生成的凭证文件结构:
{ "id_token": "eyJ...", "access_token": "eyJ...", "refresh_token": "eyJ...", "account_id": "user-xxx", "email": "someone@example.com", "last_refresh": "2026-05-23T20:00:00+08:00", "type": "codex", "expired": "2026-05-23T21:00:00+08:00"}文件名规则:codex-{email}.json。如果需要在不同机器之间迁移账号,直接复制这个目录即可。
systemd 部署
安装脚本已经生成了 cliproxyapi.service 文件,但默认是 user 级别。推荐设为系统级,确保开机自启:
sudo cp ~/cliproxyapi/cliproxyapi.service /etc/systemd/system/sudo systemctl daemon-reloadsudo systemctl enable --now cli-proxy-api
# 确认运行状态sudo systemctl status cli-proxy-api
# 查看日志journalctl -u cli-proxy-api -f此时 API 端点 http://VPS_IP:8317/v1 和管理面板 http://VPS_IP:8317/admin 已经可用。
客户端对接
Codex CLI
修改 ~/.codex/config.toml(或项目内的 .codex/config.toml):
[model_providers.openai]base_url = "http://VPS_IP:8317/v1"api_key = "sk-your-secret-api-key"如果文件中已有其他 provider 配置,只改动 OpenAI 段即可。之后 Codex CLI 的所有请求都会经过 CPA,由 CPA 在后端多账号间自动轮询分配。
其他 OpenAI 兼容客户端
几乎所有支持自定义 base URL 的客户端都能接入。比如 Open WebUI、ChatBox、Continue、Cursor 等,只需把 API base URL 指向 http://VPS_IP:8317/v1,API key 填入 CPA 配置中的密钥即可。
生产环境建议
http:// 明文传输 token 并不安全。生产使用建议在前端套一层反向代理:
server { listen 443 ssl; server_name cpa.example.com;
ssl_certificate /etc/ssl/certs/cpa.pem; ssl_certificate_key /etc/ssl/private/cpa.key;
location / { proxy_pass http://127.0.0.1:8317; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_read_timeout 300s; # 流式响应可能需要较长时间 }}管理面板
启用 remote-management 后,浏览器打开 http://VPS_IP:8317/admin,用配置中的 secret-key 登录。
面板提供:
- 各账号状态与额度概览
- 在线添加 / 删除 OAuth 账号(远程浏览器模式)
- API key 管理
- 实时请求日志
在线添加账号时,面板会生成授权 URL,在本地浏览器完成登录后,把回调 URL 粘贴回面板即可,无需 SSH 隧道。
关键决策
- 选 systemd 而非 Docker:VPS 磁盘空间有限,直接安装二进制比 Docker 镜像省几百 MB
- SSH 正向隧道做 OAuth:比管理面板的远程浏览器模式更可靠,回调不会卡在浏览器跳转
- 最小化配置:先只开 Codex 通道、关闭
debug和usage-statistics,按需再扩展其他 provider - 凭证可迁移:所有 OAuth 文件集中在
~/.cli-proxy-api/,迁移机器时直接scp目录即可
相关项目
- CLIProxyAPI — 主项目,35k+ stars
- codex-register — 批量注册 OpenAI 账号并生成 CPA 兼容授权文件
- CPA-Manager — 满血管理面板,支持账号巡检、配额检测、用量统计
- cliproxyapi-installer — 一键安装与升级脚本
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!