Files
test/cpa-deploy/01-部署操作手册.md
T
2026-11-05 14:10:48 +08:00

175 lines
7.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# CPA 部署操作手册(你动手版)
> 目标链路:`Claude Code → https://api.trivoo.website (New API) → cli-proxy-api (CPA) → 你的 Google AI Pro 账号(Gemini / 反重力 Claude 模型)`
> 环境:腾讯云新加坡 Ubuntu 24.04(43.156.118.130),New API 已在运行
> 原则:**服务器上只新增 /opt/cpa,不动你现有的 new-api / nginx / xray**
---
## 总流程(6 步)
| 步骤 | 在哪做 | 干什么 | 大约耗时 |
|---|---|---|---|
| ① | 本地电脑 | 双击 `tunnel.bat` 开 SSH 隧道 | 10 秒 |
| ② | 本地一条命令 | 把部署脚本送进服务器执行 | 2-3 分钟 |
| ③ | 本地浏览器 | 管理面板里 OAuth 登录 Google 账号 | 3 分钟 |
| ④ | 浏览器 | New API 后台加一个渠道 | 1 分钟 |
| ⑤ | 本地 | 配 Claude Code / CCS | 2 分钟 |
| ⑥ | 本地 | 全链路验证 | 1 分钟 |
每步都有 ✅ 检查点,过了再走下一步,不会乱。
---
## ① 开隧道(本地)
双击 `F:\AI\docker\cpa-deploy\tunnel.bat`,出现提示后**保持窗口开着**(关掉窗口 = 隧道断开)。
它的作用:把你本地的 8317/8085/1455/54545/51121/11451 端口接到服务器上。
- 8317 = 管理面板
- 51121 等其余端口 = Google OAuth 授权时的回调端口(**必须通**,否则登录卡在最后一步)
✅ 检查点:浏览器打开 `http://localhost:8317/management.html`,能加载出页面(此时可能还是部署前,打不开就先做第②步)。
> 卡住不动 = SSH 没连上,先在 PowerShell 里手动 `ssh ubuntu@43.156.118.130` 确认能登录。
---
## ② 执行部署脚本(本地 PowerShell 一条命令)
打开 PowerShell,原样粘贴执行:
```powershell
(Get-Content F:\AI\docker\cpa-deploy\deploy-cpa.sh) -join "`n" | ssh ubuntu@43.156.118.130 "sudo bash -s"
```
脚本做的事(幂等,重复跑安全):建 `/opt/cpa` → 生成随机密钥写入 config.yaml → 写 docker-compose.yml → 建 `ai-net` 网络并把 new-api 挂进来 → 启动 `cli-proxy-api` 容器 → 自检 → **打印两把钥匙**。
✅ 检查点(看输出):
1. `cli-proxy-api | Up ...` 且端口全是 `127.0.0.1:xxxx->xxxx`(只有回环,公网摸不到)
2. `no key (expect 401)` → HTTP 401;`with key (expect 200)` → HTTP 200
3. 末尾打印 `MGMT_KEY` 和 `CPA_API_KEY`(sk-cpa- 开头)——**复制存好**,忘了随时在服务器上 `sudo cat /opt/cpa/KEYS.txt`
---
## ③ OAuth 登录 Google 账号(本地浏览器)
1. 确认 ① 的隧道窗口开着,浏览器访问 `http://localhost:8317/management.html`
(首次访问 CPA 会自动从 GitHub 下载面板,转几秒到十几秒属正常)
2. 连接信息:服务地址填 `http://localhost:8317`,管理密钥填 **MGMT_KEY**
3. 在面板里找「凭证 / Auth 管理」类的登录入口,选你要挂的渠道:
- **Antigravity(反重力)**:Google AI Pro 订阅的主战场——Gemini 模型 + Claude Sonnet/Opus (thinking) 都从这里出
- **AI Studio / Gemini**:Gemini 模型的另一条渠道
4. 点登录 → 弹出 Google 授权页 → 选中你的 Pro 账号 → 允许
→ 浏览器会跳 `localhost:51121/...`,隧道把它送回服务器 → 面板里出现凭证文件 = 成功
**备用方案**(面板上找不到登录入口时用命令行):
```powershell
ssh ubuntu@43.156.118.130
sudo docker exec -it cli-proxy-api /CLIProxyAPI --antigravity-login --no-browser
```
它会打印一条授权 URL,复制到本地浏览器打开授权即可(回调靠隧道)。
查看所有支持的登录命令:`sudo docker exec -it cli-proxy-api /CLIProxyAPI --help`
✅ 检查点(服务器上执行,看到凭证文件 + 模型列表非空):
```powershell
ssh ubuntu@43.156.118.130 "sudo ls /opt/cpa/auths && sudo docker exec cli-proxy-api sh -c 'wget -qO- http://127.0.0.1:8317/v1/models --header \"Authorization: Bearer $(sudo grep -oE \"sk-cpa-[0-9a-f]+\" /opt/cpa/config.yaml | head -1)\" | head -c 600'"
```
> 国内账号疑虑:OAuth 走的是 AI Studio/反重力渠道,看的是**出口 IP(新加坡)**,不是账号注册地。如果某个模型 403/配额异常,换渠道再试或确认订阅生效。
---
## ④ New API 加渠道(浏览器后台)
打开 `https://api.trivoo.website` → 渠道 → 创建渠道:
| 字段 | 填什么 |
|---|---|
| 类型 | **Claude**(保 Anthropic 协议端到端,Claude Code 的 thinking/工具调用不丢) |
| 名称 | `cpa-antigravity`(随意) |
| 代理 / Base URL | `http://cli-proxy-api:8317`(容器内网直连,不走公网) |
| 密钥 | **CPA_API_KEY**(sk-cpa- 开头那把) |
| 模型 | 从上一步 ✅ 检查点输出的模型列表里抄(逐个回车成标签) |
提交后点渠道卡片右上角**测速图标**。
✅ 检查点:出现绿色延迟数字 = New API → CPA → Google 全通了。
---
## ⑤ 配 Claude Code(本地)
编辑 `C:\Users\<你>\.claude\settings.json`(用 CCS 的话就在 CCS 里加一个供应商,值一样——茨米说的"当成 codex 那样加"就是这个):
```json
{
"env": {
"ANTHROPIC_AUTH_TOKEN": "sk-你在NewAPI建的令牌",
"ANTHROPIC_BASE_URL": "https://api.trivoo.website",
"API_TIMEOUT_MS": "600000",
"CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY": "1"
},
"model": "渠道里填的某个模型名"
}
```
> 没有现成令牌就去 New API 后台「API 密钥」建一个(你自己的指南里写过这步)。
---
## ⑥ 全链路验证(本地 PowerShell)
```powershell
curl.exe -s https://api.trivoo.website/v1/messages `
-H "x-api-key: sk-你的NewAPI令牌" `
-H "anthropic-version: 2023-06-01" `
-H "content-type: application/json" `
-d '{\"model\":\"渠道里的模型名\",\"max_tokens\":64,\"messages\":[{\"role\":\"user\",\"content\":\"用一句话打个招呼\"}]}'
```
✅ 检查点:返回 JSON 里有 `"content":[{"type":"text"...` = **全链路打通** 🎉
然后开 Claude Code 随便聊两句,New API 后台「日志」里能看到这条调用。
---
## 日常运维速查(服务器上)
```bash
cd /opt/cpa
docker compose logs -f --tail=50 # 看 CPA 日志
docker compose restart # 重启 CPA
docker compose down # 停止(数据在 ./auths ./config.yaml,不丢)
sudo cat /opt/cpa/KEYS.txt # 查两把钥匙
sudo ls /opt/cpa/auths # 看已登录的账号凭证
```
**两个注意**:
1. 只有第③步(OAuth 登录)和用管理面板时才需要开隧道,平时 CPA 自己在服务器上跑,不需要 tunnel.bat
2. 如果你以后 `docker compose up -d --force-recreate` 重建了 new-api 容器,要补一句把网络接回去:
`sudo docker network connect ai-net new-api`
## 彻底卸载(恢复原样)
```bash
cd /opt/cpa && docker compose down
sudo docker network disconnect ai-net new-api || true
sudo docker network rm ai-net
sudo rm -rf /opt/cpa
```
不影响 new-api / nginx / xray / 域名证书的任何东西。
## 常见问题
| 症状 | 原因/解法 |
|---|---|
| 面板打不开 | tunnel.bat 窗口被关了;或第②步没成功,`docker ps` 看 cli-proxy-api 是否 Up |
| Google 授权后跳转的 localhost 页面打不开/连接被拒 | 隧道没转发对应回调端口(重开 tunnel.bat,它含全部 6 个端口) |
| `/v1/models` 是空的 `[]` | 账号没登录成功,看 `/opt/cpa/auths` 有没有文件,重做第③步 |
| 渠道测试 503/no available channel | 模型名没抄对:渠道里填的名字必须和 `/v1/models` 输出完全一致 |
| 某模型 429/403 | 配额或订阅问题:换渠道(AI Studio ↔ 反重力)试,确认 Pro 订阅生效中 |