中转服务从零部署

这篇文章只保留真正能直接执行的部署步骤,目标是让一台新的云服务器尽快把 CPA / CLIProxyAPInew-api 跑起来。

如果你后面还要把 Codex、Claude Code 或其它客户端统一接进来,这篇文章就可以直接当部署底稿来用。以下内容默认基于 Docker 容器部署,且云服务器需提供登录方式。

这篇文档的范围很明确,只处理这两个项目:

  • CPA / CLIProxyAPI
  • new-api

一、服务器连接

当前线上服务器参考:

  • 公网 IP:139.155.128.49
  • 登录用户:ubuntu
  • SSH 私钥:C:\Users\Lenovo\.ssh\tencent\MuYue.pem

连接命令:

1
ssh -i "C:\Users\Lenovo\.ssh\tencent\MuYue.pem" ubuntu@139.155.128.49

二、安装 Docker 和 Docker Compose

在 Ubuntu 上执行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
sudo apt update
sudo apt install -y ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl enable docker
sudo systemctl start docker
sudo usermod -aG docker ubuntu

验证:

1
2
3
docker --version
docker compose version
sudo docker ps

注意:

  • 执行完 usermod -aG docker ubuntu 后,最好重新登录一次 SSH

三、部署 CPA / CLIProxyAPI

3.1 创建目录

1
2
3
4
mkdir -p /home/ubuntu/cliproxyapi/auths
mkdir -p /home/ubuntu/cliproxyapi/logs
mkdir -p /home/ubuntu/cliproxyapi/mihomo
cd /home/ubuntu/cliproxyapi

3.2 写 docker-compose.yml

保存为 /home/ubuntu/cliproxyapi/docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
services:
mihomo:
image: metacubex/mihomo:latest
container_name: mihomo
restart: unless-stopped
ports:
- "127.0.0.1:7891:7891"
volumes:
- /home/ubuntu/cliproxyapi/mihomo:/root/.config/mihomo

cli-proxy-api:
image: eceasy/cli-proxy-api:latest
container_name: cli-proxy-api
restart: unless-stopped
depends_on:
- mihomo
ports:
- "8317:8317"
volumes:
- /home/ubuntu/cliproxyapi/config.yaml:/CLIProxyAPI/config.yaml
- /home/ubuntu/cliproxyapi/auths:/root/.cli-proxy-api
- /home/ubuntu/cliproxyapi/logs:/CLIProxyAPI/logs

3.3 写 config.yaml

保存为 /home/ubuntu/cliproxyapi/config.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
host:
port: 8317
auth-dir: /root/.cli-proxy-api
proxy-url: "socks5://mihomo:7891"

remote-management:
allow-remote: true
secret-key: "<管理后台密码>"

api-keys:
- "<给客户端调用 CPA 的 API Key>"

debug: false

说明:

  • remote-management.secret-key:CPA 管理后台密码
  • api-keys:给 new-api 或其他客户端调用 /v1/* 的 Bearer key

3.4 写 mihomo/config.yaml

保存为 /home/ubuntu/cliproxyapi/mihomo/config.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
allow-lan: true
mode: rule
log-level: info
ipv6: true
socks-port: 7891

proxy-providers:
sub:
type: http
url: "<你的订阅地址>"
path: ./providers/subscription.txt
interval: 86400
header:
User-Agent:
- "mihomo/1.18.3"
health-check:
enable: true
url: "https://www.gstatic.com/generate_204"
interval: 300
timeout: 5000

proxy-groups:
- name: "PROXY"
type: url-test
use:
- sub
url: "https://www.gstatic.com/generate_204"
interval: 300
tolerance: 50

rules:
- MATCH,PROXY

3.5 启动 CPA

1
2
3
4
5
cd /home/ubuntu/cliproxyapi
docker compose up -d
docker compose ps
docker logs --tail 200 cli-proxy-api
docker logs --tail 200 mihomo

3.6 验证 CPA

检查根路径:

1
curl http://127.0.0.1:8317/

预期会返回:

1
{"endpoints":["POST /v1/chat/completions","POST /v1/completions","GET /v1/models"],"message":"CLI Proxy API Server"}

检查模型接口:

1
curl -H "Authorization: Bearer <CPA 的 API Key>" http://127.0.0.1:8317/v1/models

如果还没登录账号,这一步可能没有模型;先继续下一步账号登录。

四、给 CPA 登录 GPT Plus / Codex 账号

4.1 打开管理页

1
http://服务器IP:8317/management.html

remote-management.secret-key 登录。

4.2 登录账号

在管理页里进入 OAuth / Codex 登录页,开始登录。

流程:

  1. 点击开始 Codex 登录
  2. 浏览器打开 OpenAI 授权页
  3. 登录 GPT Plus / Codex 账号
  4. 浏览器跳转到:
1
http://localhost:1455/auth/callback?code=...&scope=...&state=...
  1. 复制完整回调 URL
  2. 回到管理页提交
  3. 等待状态变成成功

成功后,服务器上会出现新文件:

1
find /home/ubuntu/cliproxyapi/auths -maxdepth 1 -type f

五、部署 new-api

5.1 拉代码

1
2
3
cd /home/ubuntu
git clone https://github.com/QuantumNous/new-api.git
cd /home/ubuntu/new-api

5.2 使用项目自带 compose 启动

1
2
3
docker compose up -d
docker compose ps
docker logs --tail 200 new-api

5.3 验证 new-api

1
curl http://127.0.0.1:3000/api/status

预期包含:

1
"success": true

六、在 new-api 中接入 CPA

6.1 先拿到 Docker 网关地址

new-api 容器不能直接用 127.0.0.1:8317 去访问 CPA

必须先执行:

1
sudo docker inspect new-api --format '{{range .NetworkSettings.Networks}}{{.Gateway}} {{end}}'

当前线上实测值是:

1
172.18.0.1

但新服务器上不要写死,重新查。

6.2 在 new-api 后台新增渠道

进入 new-api 管理后台,新增一个 OpenAI 类型渠道:

  • 类型:OpenAI
  • 名称:cliproxyapi
  • Base URL:http://<Docker网关IP>:8317
  • API Key:填写 CPA 的 api-keys 里那个值
  • 模型:按 CPA /v1/models 返回的模型填写

当前线上实测跑通的模型包括:

  • gpt-5
  • gpt-5.1
  • gpt-5.1-codex
  • gpt-5.1-codex-mini
  • gpt-5.1-codex-max
  • gpt-5.2
  • gpt-5.2-codex
  • gpt-5.3-codex
  • gpt-5.3-codex-spark
  • gpt-5.4
  • gpt-5.4-mini
  • gpt-5-codex
  • gpt-5-codex-mini

七、验证整条链路

7.1 验证 CPA

1
curl -H "Authorization: Bearer <CPA 的 API Key>" http://127.0.0.1:8317/v1/models

7.2 验证 new-api

new-api 的 token 去请求:

1
2
curl http://127.0.0.1:3000/v1/models \
-H "Authorization: Bearer <new-api token>"

7.3 验证真实聊天请求

1
2
3
4
curl http://127.0.0.1:3000/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <new-api token>" \
-d '{"model":"gpt-5.4-mini","messages":[{"role":"user","content":"Reply with exactly: ok"}],"max_tokens":8}'

八、必要注意事项

只保留这几个最关键的:

  • 先部署 CPA,再部署 new-api
  • new-api 连接 CPA 时,不要写 127.0.0.1:8317
  • CPA 的 OAuth 登录完成后,要及时提交完整回调 URL
  • 管理后台密码和 CPA API key 建议自己重新生成
  • new-api 自带 compose 里的数据库默认密码是 123456,正式长期运行建议修改
  • 重要目录建议至少保留:
    • /home/ubuntu/cliproxyapi/config.yaml
    • /home/ubuntu/cliproxyapi/auths/
    • /home/ubuntu/cliproxyapi/mihomo/config.yaml
    • /home/ubuntu/new-api/data/