# CPA(CLIProxyAPI)部署全流程 把 Google AI Pro 订阅转成 API,给 Codex / Claude Code 用。 实测时间:2026-11-05,VPS:腾讯云新加坡 Ubuntu 24.04(43.156.118.130)。 最终链路: - 直连:Codex → `localhost:8317`(SSH 隧道)→ CPA → Google - 经 NewAPI:Codex → `https://api.trivoo.website` → NewAPI → CPA → Google --- ## 一、前置条件 1. VPS 上已有 Docker、NewAPI(`new-api` 容器在跑) 2. Google AI Pro 订阅有效 3. 本地有 `deploy-cpa.sh` 和 `tunnel.bat`(放同一目录,如 `F:\AI\docker\cpa-deploy\`) --- ## 二、部署 CPA ### 1. 开隧道 双击 `tunnel.bat`,输入 VPS 的 ubuntu 用户密码(输入时不显示字符,输完回车)。 **"没反应"是正常的**——隧道建好就是静默挂着。窗口保持开着。 ### 2. 跑部署脚本 新开 PowerShell: ```powershell (Get-Content F:\AI\docker\cpa-deploy\deploy-cpa.sh) -join "`n" | ssh ubuntu@43.156.118.130 "sudo bash -s" ``` ### 3. 检查输出 - `cli-proxy-api | Up`,6 个端口全绑 `127.0.0.1`(8317/8085/1455/54545/51121/11451) - 无 key → HTTP 401,有 key → HTTP 200 - 输出两把钥匙,收好(也在服务器 `/opt/cpa/KEYS.txt`): - `MGMT_KEY`:进管理面板用 - `CPA_API_KEY`(`sk-cpa-` 开头):给 NewAPI 渠道 / 直连用 --- ## 三、面板登录排障(必看,有坑) 浏览器开 `http://localhost:8317/management.html`(隧道必须开着),输 MGMT_KEY。 ### 坑 1:403 "remote management disabled" 原因是部署脚本生成的 `config.yaml` 里 `management.allow-remote: false` 把管理 API 整个关了。 修复(SSH 到服务器,root): ```bash sed -i 's/allow-remote: false/allow-remote: true/' /opt/cpa/config.yaml cd /opt/cpa && docker compose restart ``` **安全性**:端口本来就只绑了 `127.0.0.1`(`docker ps` 可验证),公网连不进来,改成 `true` 也只有隧道能进。 ### 坑 2:别用 `grep -v 'key'` 看配置 配置里的 `secret-key` 存的是 bcrypt 哈希,`grep -v 'key'` 会把它过滤掉,让你误以为没配。看完整配置直接 `cat`。 ### 坑 3:不要手动往配置里加明文 secret-key CPA 启动时会自动把明文哈希后写回,手动加会导致 `mapping key "secret-key" already defined` 重复键,容器起不来(restart 循环)。 --- ## 四、OAuth 登录(Antigravity) 1. 面板左侧 **OAuth 登录** 2. 找到 **Antigravity**,点 `+`,弹窗里点 **打开链接** 3. Google 授权页选 Pro 账号 → 允许 4. 跳回 `localhost:1455` 显示 **Authentication successful!** 即成功 5. 面板 **认证文件** 页能看到 Antigravity 凭证 --- ## 五、Codex 直连 CPA(同事的野路子,最快) ccswitch → Codex 供应商 → 新建: - 名称:`cpa.gemini` - API 请求地址:`http://localhost:8317/v1` - API Key:`CPA_API_KEY` - 模型列表:点"获取模型列表",选 `gemini-3-flash` / `gemini-3.8-flash-high` 等真名 **前提**:tunnel.bat 一直开着。 ### 排障 - Codex 报 `404 (no body)`:模型名不对。浏览器开 `http://localhost:8317/v1/models`,返回 `{"error":"Missing API key"}` 说明端点正常,只是缺 key;然后去 ccswitch 里重新拉模型列表。 - `429 Too Many Requests`:Google 限流,等几分钟再试,别连续刷。 --- ## 六、走 NewAPI(公网,不用开隧道) ### 1. NewAPI 建渠道 渠道 → 添加渠道 → 选 **OpenAI** 类型(Codex 说 OpenAI 协议): - 名称:`CPA-Gemini-OpenAI` - API 地址:`http://cli-proxy-api:8317`(**不要加 `/v1`**,页面有提示) - API 密钥:`CPA_API_KEY` - 模型:**从上游获取**,会拉到 8 个(2 个 Claude + 5 个 Gemini 真名 + 1 个 OpenAI),勾选 5 个 Gemini - 分组 `default`,启用,创建 → 测试 > 注意:Anthropic 类型的渠道拉到的是混淆过的 Claude 壳名字(`claude-fable-5-dd-...`),OpenAI 类型拉到的是 Gemini 真名。给 Codex 用选 OpenAI 类型。 ### 2. ccswitch 加供应商 - 名称:`newapi-gemini` - API 请求地址:`https://api.trivoo.website/v1` - API Key:你的 NewAPI token(`sk-` 开头,之前配 DeepSeek 用的那个) - 模型:获取列表,选 gemini 模型 ### 3. 验证 NewAPI → 使用日志,能看到成功的调用记录(模型、Token、耗时)即跑通。 --- ## 七、两条路怎么选 | | 直连 CPA | 经 NewAPI | |---|---|---| | 地址 | `localhost:8317/v1` | `api.trivoo.website/v1` | | 隧道 | 必须一直开 | 不用 | | 延迟 | 少一跳 | 多一跳 | | 管理 | 无 | NewAPI 统一看日志/计费 | 不冲突,可并存,ccswitch 里切换供应商就行。 --- ## 八、跟 Claude Code 的关系 本流程是给 **Codex** 用的(OpenAI 协议)。如果也要给 Claude Code 用: - NewAPI 里再建一个 **Anthropic** 类型渠道,API 地址 `http://cli-proxy-api:8317`(不加 `/v1`),模型从上游拉(会是 Claude 壳名字,全选) - ccswitch 里 Claude Code 供应商指向 `https://api.trivoo.website` --- ## 九、一句话总结 部署(隧道+脚本)→ 面板 `allow-remote: true` → OAuth 登录 Antigravity → Codex 直连 `localhost:8317/v1` 或经 NewAPI(OpenAI 类型渠道)。429 等几分钟,404 检查模型名。