CPA中转站搭建教程:CLIProxyAPI + NewAPI 账号池网关
面向开发者和站长的 CPA中转站搭建教程:解释 CLIProxyAPI 与 NewAPI 分工、账号池架构、部署路径、接入测试、安全配置和常见排障。
先说结论
搭 CPA中转站,核心问题通常不是“装哪个面板”,而是怎么把 Codex、Claude Code、Gemini CLI、Grok Build 或 OpenAI 兼容上游变成稳定可管理的 API,再交给 NewAPI、团队用户或 AI 编程工具使用。
最常见的 CPA中转站架构是:
这套方案更适合开发者、站长和小团队搭一个可控的账号池 API 网关。你可以用它自用、团队内部分发、测试不同上游,也可以研究中转站供应链;如果准备公网运营,需要先把风控、凭证安全、访问控制和合规边界想清楚。
CPA中转站是什么
CPA 通常是 CLIProxyAPI 的简称。官方文档把 CLIProxyAPI 定义为一个为 CLI 提供 OpenAI、Gemini、Claude、Codex、Grok 兼容 API 接口的代理服务器,并支持 OAuth 登录、多账户轮询、流式响应、函数调用、多模态输入和 OpenAI 兼容上游接入。
在 CPA + NewAPI 架构里,它的角色更具体:
| 层级 | 负责什么 |
|---|---|
| 账号层 | Codex、Claude Code、Gemini CLI、Grok Build、AI Studio、OpenAI 兼容上游 |
| CPA 层 | 把账号、OAuth 登录态或上游 Key 转成统一 API |
| NewAPI 层 | 渠道、用户、令牌、额度、模型价格和统一出口 |
| 客户端层 | Claude Code、Codex、Cursor、OpenCode、Cherry Studio、SDK |
完整的 CPA中转站通常分两层:CPA 负责“账号如何变 API”,NewAPI 负责“API 如何分发给用户”。如果只自用,可以先不上 NewAPI;如果要多人使用,就需要分发层。
什么时候该用 CPA + NewAPI
不要一开始就把结构做重。CPA + NewAPI 能解决多人分发问题,但也会增加配置、排障和安全成本。
| 你的目标 | 建议方案 |
|---|---|
| 只想自己把一个账号转 API | 先单独部署 CPA |
| 想给 2-10 人团队发统一 Key | CPA + NewAPI 或 CPA + 轻量面板 |
| 想把 Codex、Claude Code、Gemini CLI 多个来源统一起来 | CPA + NewAPI 更合适 |
| 想做公开注册、充值、额度、价格管理 | NewAPI 这类分发层基本不可少 |
| 想把订阅账号能力公开售卖 | 不建议,先确认平台条款、风控和凭证隔离 |
第一次部署建议先做一个只允许自己访问的内网或本地版本,用一个账号、一个模型、一个客户端跑通。确认 CPA 能调用、NewAPI 渠道能测试、客户端能稳定使用后,再接域名、Cloudflare、支付和用户系统。
部署前准备
准备这些东西:
- 一台 Linux 服务器,建议 Ubuntu 22.04+,至少 2 核 2GB 起步。
- Docker 和 Docker Compose v2。
- 一个域名,后续给 NewAPI 或对外 API 使用。
- 你合法持有的上游账号或 API Key。
- 一个只用于测试的低权限 API Key,不要一上来用主账号高额度 Key。
服务器端口建议:
| 服务 | 常见端口 | 建议 |
|---|---|---|
| CPA / CLIProxyAPI | 8317 | 只给 NewAPI 或可信 IP 访问 |
| NewAPI | 3000 | 通过域名和 HTTPS 对外 |
| Nginx / Caddy | 80 / 443 | 负责 TLS 和反向代理 |
如果 CPA 和 NewAPI 在同一台机器上,优先让 CPA 只监听本机或只允许内网访问。对外入口一般应该放在 NewAPI,而不是 CPA 管理面板。
第一步:部署 CLIProxyAPI,也就是 CPA
官方文档提供 macOS、Linux、Windows、Docker 和 Docker Compose 多种方式。站长场景建议用 Docker Compose,因为配置、认证目录和备份都更清楚。
官方 Docker 最小运行方式类似这样:
docker run --rm \
-p 8317:8317 \
-v /path/to/your/config.yaml:/CLIProxyAPI/config.yaml \
-v /path/to/your/auth-dir:/root/.cli-proxy-api \
eceasy/cli-proxy-api:latest
如果用 Docker Compose,官方流程是克隆仓库、复制 config.example.yaml 为 config.yaml,然后启动:
git clone https://github.com/router-for-me/CLIProxyAPI.git
cd CLIProxyAPI
cp config.example.yaml config.yaml
docker compose up -d
启动后先看日志:
docker compose logs -f
不要急着接 NewAPI。先确认 CPA 本身能跑起来,再处理账号登录和上游配置。
第二步:配置 CPA 的基础安全项
CPA 会处理配置、请求认证和账号凭证,安全配置要比普通博客后台更严肃。
在 config.yaml 里优先检查这些项:
host: "127.0.0.1"
port: 8317
remote-management:
allow-remote: false
secret-key: "换成强随机管理密钥"
auth-dir: "~/.cli-proxy-api"
api-keys:
- "换成给 NewAPI 使用的强随机 key"
debug: false
logging-to-file: true
usage-statistics-enabled: true
这里的重点不是照抄,而是理解边界:
host如果填127.0.0.1,CPA 只允许本机访问,适合同机 NewAPI。remote-management.allow-remote不要随便开,管理 API 能改运行时配置和认证文件。secret-key要用强随机值,不要用admin、123456、项目名。api-keys是 CPA 对外服务认证,后面 NewAPI 接 CPA 时会用到。auth-dir是凭证目录,备份和权限都要管好。
如果 NewAPI 和 CPA 不在同一台服务器,8317 也不要直接全网开放。至少做防火墙白名单、反向代理认证、强密钥和日志审计。
第三步:登录或接入上游账号
CPA 支持多种上游,站长最常用的是 Codex、Claude Code、Gemini CLI 和 OpenAI 兼容提供商。
Docker Compose 场景下,官方文档给出的登录命令包括:
# OpenAI Codex
docker compose exec cli-proxy-api /CLIProxyAPI/CLIProxyAPI -no-browser --codex-login
# Claude Code
docker compose exec cli-proxy-api /CLIProxyAPI/CLIProxyAPI -no-browser --claude-login
# Gemini CLI
docker compose exec cli-proxy-api /CLIProxyAPI/CLIProxyAPI -no-browser --login
-no-browser 会打印登录地址,适合服务器环境。登录完成后,认证文件会进入你挂载的 auth-dir。这个目录就是账号池的核心资产。
如果你接的是 OpenAI 兼容上游,例如 OpenRouter 或其他兼容 Base URL,则在 CPA 的提供商配置中添加对应 base-url、api-key、模型列表和别名。
第四步:先用 CPA 做本地最小测试
在接 NewAPI 前,先用最小请求确认 CPA 可用。假设 CPA 暴露在本机 8317,并且你配置了 CPA_API_KEY:
export CPA_BASE_URL="http://127.0.0.1:8317/v1"
export CPA_API_KEY="填入 config.yaml 里的 api key"
curl -sS "$CPA_BASE_URL/chat/completions" \
-H "Authorization: Bearer $CPA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5-codex",
"messages": [
{
"role": "user",
"content": "Reply with exactly: cpa-ok"
}
],
"stream": false
}'
如果这里失败,先不要改 NewAPI 渠道。优先排查 CPA:
| 错误 | 优先检查 |
|---|---|
| 401 | CPA API Key 是否和 config.yaml 一致 |
| 404 | Base URL 是否应该带 /v1,模型名是否存在 |
| 429 | 上游账号是否限流或额度耗尽 |
| 502 / 503 | 上游登录态、代理、网络和账号状态 |
| 返回 HTML | 请求打到了错误的反代地址或面板端口 |
第五步:把 CPA 接入 NewAPI
NewAPI 这层主要负责把 CPA 变成一个可管理渠道。常见流程是:
- 登录 NewAPI 管理后台。
- 进入渠道管理,新增渠道。
- 渠道类型选择 OpenAI 兼容或对应兼容类型。
- Base URL 填 CPA 地址,例如
http://127.0.0.1:8317/v1。 - 密钥填 CPA 的
api-keys。 - 模型列表填你希望 NewAPI 暴露的模型。
- 保存后做渠道测试。
- 创建 NewAPI 令牌,再用 NewAPI 的 Base URL 给客户端使用。
同机部署时,NewAPI 到 CPA 可以走 127.0.0.1 或 Docker 网络服务名。公网用户不应该直接拿 CPA 的 Key,而是拿 NewAPI 发出的用户 Token。
CPA、NewAPI、客户端字段怎么对应
最容易填错的是 Base URL 和 API Key。按这个表先对齐:
| 位置 | Base URL 填什么 | API Key 填什么 | 给谁用 |
|---|---|---|---|
| CPA 本地测试 | http://127.0.0.1:8317/v1 | CPA config.yaml 里的 api-keys | 管理员自测 |
| NewAPI 渠道 | CPA 的内网或本机地址,例如 http://127.0.0.1:8317/v1 | CPA api-keys | NewAPI 调 CPA |
| 终端客户端 | NewAPI 对外地址,例如 https://api.example.com/v1 | NewAPI 发出的用户令牌 | Codex、Claude Code、Cursor、SDK |
| 不建议 | CPA 裸露公网地址 | CPA 底层 Key | 终端用户 |
一句话:CPA Key 给 NewAPI,不要直接给终端用户;终端用户拿 NewAPI 的 Base URL 和 Token。
第六步:给开发者客户端使用
CPA中转站的最终价值,是让开发者工具能稳定接入。不同客户端要看协议。
Codex
官方文档的 Codex 客户端配置思路是修改 ~/.codex/config.toml 和 ~/.codex/auth.json。如果直接连 CPA,base_url 通常类似:
model_provider = "cliproxyapi"
model = "gpt-5.5"
model_reasoning_effort = "high"
[model_providers.cliproxyapi]
name = "cliproxyapi"
base_url = "http://127.0.0.1:8317/v1"
wire_api = "responses"
auth.json:
{
"OPENAI_API_KEY": "sk-dummy"
}
如果你让用户走 NewAPI,就把 base_url 换成 NewAPI 对外地址,把 Key 换成 NewAPI 令牌。
如果你使用 OAuth 登录模式,官方示例还会用 experimental_bearer_token、requires_openai_auth 和 supports_websockets 等字段。不要把所有配置混在一起;先选一种模式跑通,再继续改模型和推理等级。
Claude Code
Claude Code 常见环境变量包括:
export ANTHROPIC_BASE_URL="http://127.0.0.1:8317"
export ANTHROPIC_AUTH_TOKEN="填入可用 key"
export ANTHROPIC_DEFAULT_OPUS_MODEL="gpt-5-codex(high)"
export ANTHROPIC_DEFAULT_SONNET_MODEL="gpt-5-codex(medium)"
export ANTHROPIC_DEFAULT_HAIKU_MODEL="gpt-5-codex(low)"
注意:普通 OpenAI chat 请求能通,不代表 Claude Code 一定能用。Claude Code 对模型名、流式、Anthropic 兼容行为更敏感,必须单独测试。
CC Switch
如果你经常在官方 API、NewAPI、CPA、本地模型之间切换,可以把跑通后的 Base URL 和 Key 放进 CC Switch 管理。顺序一定是先手动跑通,再交给配置管理工具。
CPA中转站常见架构
自用架构
适合开发者自己用,结构简单,问题少。
小团队架构
适合 2-20 人团队。NewAPI 负责发 Key、限制额度和看用量,CPA 负责账号池。
公开分发架构
如果要对外分发,重点已经不只是部署 CPA,还要考虑支付、风控、滥用、日志、备份、账号异常和客服。
上线前检查清单
| 检查项 | 合格标准 |
|---|---|
| CPA 管理接口 | 不裸露公网,强密钥,最好只允许本机或白名单 |
| CPA API Key | 强随机,和管理密钥分开 |
| 认证目录 | 有备份,有权限控制,不进公开仓库 |
| NewAPI 渠道 | 渠道测试通过,模型列表和价格不乱填 |
| 客户端测试 | curl、Codex、Claude Code 至少各跑一次最小请求 |
| 日志 | 能看到失败原因,但不记录明文用户 Key |
| 风控 | 单用户额度、频率限制、异常请求处理 |
| 域名和证书 | 对外只暴露 HTTPS |
最容易踩的坑
1. CPA 和 NewAPI 的 Base URL 填错
CPA 自身面板地址、CPA API 地址、NewAPI 对外地址不是一回事。
| 地址 | 用途 |
|---|---|
http://127.0.0.1:8317 | CPA 服务或管理面板 |
http://127.0.0.1:8317/v1 | OpenAI 兼容 API 常用地址 |
https://api.example.com/v1 | NewAPI 对外给用户的地址 |
客户端填错地址时,常见表现是 404、返回 HTML、模型不存在。
2. 把 CPA Key 直接发给用户
如果你是站长,不要把 CPA 的底层 Key 发给终端用户。用户应该拿 NewAPI 的令牌。CPA Key 泄露后,别人可能绕过你的用户、额度和计费层。
3. 只看能不能回复,不测工具链
中转站能回答一句话,只能说明最小 chat 请求通了。开发者还要测:
- 流式输出是否稳定。
- Codex 的 Responses 协议是否可用。
- Claude Code 的 Anthropic 兼容变量是否生效。
- 长上下文是否被截断。
- NewAPI 后台扣费和返回 usage 是否大体一致。
4. 过早打开远程管理
CLIProxyAPI 的管理 API 可以管理运行时配置和认证文件,官方文档也明确管理 API 请求需要管理密钥。远程管理不是不能开,而是不能裸开。
5. 把账号池当成 SLA
多账号轮询只能缓解单账号限流,不等于服务稳定。上游改规则、账号风控、OAuth 失效、模型下线,都会让 CPA中转站突然出问题。
常见报错怎么排
| 现象 | 优先检查 |
|---|---|
| 401 Unauthorized | Key 填错,或把 NewAPI 用户 Key 填到了 CPA 测试里 |
| 404 Not Found | Base URL 层级错了,常见是漏了 /v1 或打到面板地址 |
| 429 Too Many Requests | 上游账号限流、额度耗尽,或客户端重试过快 |
| 502 / 503 | CPA 上游登录态失效、网络代理异常、账号不可用 |
| 返回 HTML | 请求打到了 NewAPI 面板、Nginx 默认页或错误域名 |
| 模型不存在 | CPA 模型名、NewAPI 模型映射、客户端模型名没有对齐 |
| 普通 curl 能通,Claude Code / Codex 不通 | 协议、流式、Responses API 或 Anthropic 兼容配置不匹配 |
排障顺序
出问题时按这条链路排,不要只在 NewAPI 面板里反复调整:
- 上游账号是否正常:登录态、额度、封禁、区域、代理。
- CPA 是否正常:日志、配置、模型名、API Key、认证目录。
- CPA 最小 curl 是否正常:先绕过 NewAPI 测。
- NewAPI 渠道是否正常:Base URL、密钥、模型映射、渠道状态。
- 客户端是否正常:Codex、Claude Code、Cursor 的协议和环境变量。
- 反向代理是否正常:Nginx、Cloudflare、HTTPS、请求头、超时。
这个顺序能省很多时间。很多“模型不可用”看起来像客户端配置问题,实际是 CPA 登录态、Base URL 或上游账号先出了问题。
这篇教程适合的最终方案
| 使用场景 | 推荐方案 | 适用边界 |
|---|---|---|
| 开发者自用 | ✅ CPA 单独部署 + 本地客户端直接连 | 最简单,适合先跑通账号、模型和客户端 |
| 小团队 | ✅ CPA + NewAPI + 内部令牌 + 白名单访问 | 适合团队共用 Base URL、Token 和额度管理 |
| 小规模公开分发 | 🟡 CPA 内网部署 + NewAPI 对外 + HTTPS + 额度限制 + 日志审计 | 可以试运营,但要控制用户规模和上游风险 |
| 不建议 | ❌ CPA 裸露公网 + 管理密钥弱口令 + 直接给用户 CPA Key + 无风控售卖 | 会绕过用户、额度和访问控制,不适合真实运营 |