最近折腾了一套自己的 AI 中转站,主要用到两个东西:New APICLI Proxy API Plus

New API 负责统一管理渠道、模型、令牌、用户和日志;CLI Proxy API Plus 负责把一些 CLI/OAuth 类模型能力转换成 OpenAI 兼容接口(例如将chat gpt套餐转化成兼容接口提供给New API作为渠道使用)。

以下是我自己整理的一套部署流程,尽量写成从零开始照着操作就能搭好的版本。
注意:文档里面的密码、密钥都用占位符,不要把真实密码直接写到博客里。

功能描述

简单来说,这套东西搭好后大概是这样:

本地客户端 / Codex / 其他调用方
        ↓
New API 统一入口
        ↓
CLI Proxy API Plus
        ↓
上游模型账号 / API Key / OAuth 登录态

New API 主要做这些事:

  • 统一管理不同渠道。
  • 统一生成下游调用令牌。
  • 查看调用日志、用量、消耗。
  • 给不同用户、不同分组设置可用模型。
  • 对外暴露一个 OpenAI 兼容接口。

CLI Proxy API Plus 主要做这些事:

  • 接收 OpenAI 兼容格式的请求。
  • 转发到 Codex、Claude、Gemini、OpenAI 兼容服务等上游。
  • 支持 API Key 和 OAuth 登录态。
  • 支持模型别名、模型转发、重试、管理面板等。

我个人理解是:
CLI Proxy API Plus 更像“底层转发器”,New API 更像“后台管理系统”。

一、服务器准备

我这里以一台普通云服务器为例,阿里云、腾讯云、雨云、RackNerd、Vultr 都差不多。

1. 推荐配置

如果只是自己用,配置不用太高:

CPU:2 核
内存:2G 起步,4G 更舒服
硬盘:40G 起步
系统:Alibaba Cloud Linux / CentOS / Debian / Ubuntu 都可以
地区:尽量选择访问上游模型比较稳定的地区

如果你后面要给多人使用,建议至少:

CPU:2 核以上
内存:4G 以上
硬盘:60G 以上

2. 需要开放的端口

在云服务器安全组中开放以下端口:

22     SSH 登录服务器
3000   New API 后台
8317   CLI Proxy API Plus 接口,按需开放
80     如果后面要配域名和 Nginx
443    如果后面要配 HTTPS

注意:

3306 MySQL 不建议对公网开放
6379 Redis 不建议对公网开放

MySQL 和 Redis 给 Docker 内部用就行,不要随便暴露到公网。

3. 登录服务器

本地 Windows 可以用 Windows TerminalXShellFinalShellTermius

SSH 登录方式如下:

ssh root@你的服务器公网IP

如果 SSH 端口不是 22,比如改成了 2222:

ssh root@你的服务器公网IP -p 2222

登录后大概会看到:

[root@xxx ~]#

这就说明已经进服务器了。

二、安装基础环境

先安装一些常用工具:

yum install -y curl wget git vim unzip

有些系统没有 yum,比如 Debian/Ubuntu,可以用:

apt update
apt install -y curl wget git vim unzip

1. 安装 Docker

直接使用官方安装脚本:

curl -fsSL https://get.docker.com | bash

启动 Docker:

systemctl enable docker
systemctl start docker

检查 Docker 是否正常:

docker version
docker compose version

能看到版本号就可以。

2. 创建统一目录和 Docker 网络

我建议把所有中转站相关的东西都放在 /opt/ai-gateway 下,后期找起来方便。

mkdir -p /opt/ai-gateway
cd /opt/ai-gateway

创建一个公共 Docker 网络,让 New API 可以直接通过容器名访问 CLI Proxy API Plus

docker network create ai-gateway-network

如果提示已经存在,不用管,继续下一步。

三、部署 New API

New API 官方镜像是:

calciumion/new-api:latest

官方说明中支持 SQLite、MySQL、PostgreSQL,个人测试可以用 SQLite,但是长期使用建议直接 MySQL。
这里我用 MySQL + Redis + New API 的方式部署。

1. 创建目录

mkdir -p /opt/ai-gateway/new-api
cd /opt/ai-gateway/new-api

2. 创建 docker-compose.yml

执行:

vim docker-compose.yml

写入以下内容:

services:
  new-api:
    image: calciumion/new-api:latest
    container_name: new-api
    restart: always
    command: --log-dir /app/logs
    ports:
      - "3000:3000"
    volumes:
      - ./data:/data
      - ./logs:/app/logs
    environment:
      - TZ=Asia/Shanghai
      - SQL_DSN=root:你的MySQL密码@tcp(mysql:3306)/new-api
      - REDIS_CONN_STRING=redis://:你的Redis密码@redis:6379
      - ERROR_LOG_ENABLED=true
      - BATCH_UPDATE_ENABLED=true
      - NODE_NAME=new-api-node-1
    depends_on:
      - mysql
      - redis
    networks:
      - ai-gateway-network
    healthcheck:
      test: ["CMD-SHELL", "wget -q -O - http://localhost:3000/api/status | grep -o '\"success\":\\s*true' || exit 1"]
      interval: 30s
      timeout: 10s
      retries: 3

  mysql:
    image: mysql:8.2
    container_name: new-api-mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 你的MySQL密码
      MYSQL_DATABASE: new-api
    volumes:
      - mysql_data:/var/lib/mysql
    networks:
      - ai-gateway-network

  redis:
    image: redis:latest
    container_name: new-api-redis
    restart: always
    command: ["redis-server", "--requirepass", "你的Redis密码"]
    networks:
      - ai-gateway-network

volumes:
  mysql_data:

networks:
  ai-gateway-network:
    external: true

注意几点:

1. docker-compose.yml 对缩进非常敏感,mysql、redis、new-api 必须同级缩进。
2. SQL_DSN 里的数据库名是 new-api,要和 MYSQL_DATABASE 保持一致。
3. 密码建议用复杂一点,但不要包含 @、#、&、?、/ 这种容易影响连接串解析的字符。
4. 如果密码里一定要用特殊符号,需要做 URL 编码,不然 New API 可能连不上 MySQL。

3. 启动 New API

docker compose up -d

查看容器:

docker ps

查看日志:

docker logs -f new-api

如果没报错,浏览器访问:

http://你的服务器公网IP:3000

4. 登录 New API

常见默认账号密码:

用户名:root
密码:123456

如果默认密码不对,就按页面提示注册或初始化。

第一次登录后先做三件事:

1. 修改 root 密码
2. 关闭不需要的公开注册
3. 检查系统设置和站点名称

New API 的登录页也可以直接访问:

http://你的服务器公网IP:3000/login

四、部署 CLI Proxy API Plus

CLI Proxy API Plus 是一个 OpenAI 兼容代理,官方文档里默认端口是 8317,配置文件是 config.yaml

1. 创建目录

mkdir -p /opt/ai-gateway/cli-proxy-api-plus
cd /opt/ai-gateway/cli-proxy-api-plus

2. 准备配置文件

先生成两个密钥:

openssl rand -hex 32
openssl rand -hex 32

第一个作为:

API_KEY

第二个作为:

MANAGEMENT_KEY

创建配置文件:

vim config.yaml

写入:

host: ""
port: 8317

auth-dir: "/root/.cli-proxy-api"

api-keys:
  - "替换成你的API_KEY"

remote-management:
  allow-remote: true
  secret-key: "替换成你的MANAGEMENT_KEY"
  disable-control-panel: false

debug: false
request-retry: 3

routing:
  strategy: "round-robin"

# 如果服务器访问上游模型不稳定,可以配置代理。
# 没有代理就保持为空。
proxy-url: ""

# 示例:如果你有传统 API Key,可以写到这里。
# 没有就先注释掉,后面通过 OAuth 登录。
#
# claude-api-key:
#   - api-key: "sk-ant-xxx"
#
# gemini-api-key:
#   - api-key: "AIzaSyxxx"
#
# openai-compatibility:
#   - name: "openrouter"
#     base-url: "https://openrouter.ai/api/v1"
#     api-key-entries:
#       - api-key: "sk-or-v1-xxx"
#     models:
#       - name: "openai/gpt-4o-mini"
#         alias: "gpt-4o-mini"

注意:

API_KEY 是给 New API 调用 CLI Proxy API Plus 用的。
MANAGEMENT_KEY 是进 CLI Proxy API Plus 管理接口用的。
这两个不要写成一样。

3. 创建 docker-compose.yml

vim docker-compose.yml

写入:

services:
  cli-proxy-api-plus:
    image: eceasy/cli-proxy-api-plus:latest
    container_name: cli-proxy-api-plus
    restart: unless-stopped
    ports:
      - "127.0.0.1:18317:8317"
    volumes:
      - ./config.yaml:/CLIProxyAPI/config.yaml
      - ./auths:/root/.cli-proxy-api
      - ./logs:/CLIProxyAPI/logs
    networks:
      - ai-gateway-network

networks:
  ai-gateway-network:
    external: true

这里我把容器的 8317 映射到了服务器本机的 127.0.0.1:18317

原因是:

1. New API 和 CLI Proxy API Plus 在同一个 Docker 网络里,可以直接访问 cli-proxy-api-plus:8317。
2. 服务器公网不直接暴露 8317,安全一点。
3. 如果后续确实要公网访问,再用 Nginx 单独代理。

启动:

docker compose up -d

查看日志:

docker logs -f cli-proxy-api-plus

测试接口:

curl -H "Authorization: Bearer 替换成你的API_KEY" \
  http://127.0.0.1:18317/v1/models

如果返回模型列表,说明 CLI Proxy API Plus 已经起来了。

4. 如果镜像拉取失败

有时候会遇到这种报错:

pull access denied for eceasy/cli-proxy-api-plus

这时候可以改成源码构建:

cd /opt/ai-gateway
git clone https://github.com/KooshaPari/cliproxyapi-plusplus.git
cd cliproxyapi-plusplus
docker build -t local/cli-proxy-api-plus:latest .

然后把 /opt/ai-gateway/cli-proxy-api-plus/docker-compose.yml 里的镜像改成:

image: local/cli-proxy-api-plus:latest

再启动:

cd /opt/ai-gateway/cli-proxy-api-plus
docker compose up -d

五、CLI Proxy API Plus 登录上游账号

CLI Proxy API Plus 有两种上游方式:

1. 直接填 API Key
2. 使用 OAuth 登录

如果你有传统 API Key,直接写进 config.yaml 最简单。

如果你要接 Codex、Claude Code、Gemini CLI 这类账号登录态,就需要运行登录命令。

1. Codex / OpenAI OAuth 登录

cd /opt/ai-gateway/cli-proxy-api-plus
docker compose exec cli-proxy-api-plus /CLIProxyAPI/CLIProxyAPI -no-browser --codex-login

它会输出一个登录地址。复制到浏览器打开,登录你的账号,完成授权后回到命令行看是否成功。

2. Claude 登录

cd /opt/ai-gateway/cli-proxy-api-plus
docker compose exec cli-proxy-api-plus /CLIProxyAPI/CLIProxyAPI -no-browser --claude-login

3. Gemini 登录

cd /opt/ai-gateway/cli-proxy-api-plus
docker compose exec cli-proxy-api-plus /CLIProxyAPI/CLIProxyAPI -no-browser --login

注意:

登录成功后,认证信息会保存在 ./auths 目录。
这个目录很重要,不要随便删除。
如果删除了,就要重新登录。

六、把 CLI Proxy API Plus 接入 New API

进入 New API 后台:

http://你的服务器公网IP:3000

进入:

渠道管理 -> 添加渠道

基础配置参考:

类型:OpenAI
名称:CLI Proxy API Plus
密钥:CLI Proxy API Plus 配置中的 API_KEY
API地址:http://cli-proxy-api-plus:8317/v1

这里重点注意:

如果 New API 和 CLI Proxy API Plus 在同一个 ai-gateway-network 里,
API 地址就写:
http://cli-proxy-api-plus:8317/v1

不要写:
http://127.0.0.1:8317/v1

因为在 New API 容器里面,127.0.0.1 指的是 New API 自己,不是宿主机,也不是 CLI Proxy API Plus。

1. 模型怎么填

模型必须填 CLI Proxy API Plus 实际支持的模型名。

比如 CLI Proxy API Plus 里能返回:

gpt-5
gpt-5-codex
gpt-5.1
gpt-5.2

那 New API 里就填这些模型。

不要凭感觉乱填,比如:

gpt-5.5-pro

如果上游没有这个模型,调用时会报:

unknown provider for model xxx

这种 502 一般不是 New API 坏了,而是模型名没有在 CLI Proxy API Plus 里配置成功。

2. 测试渠道

保存渠道后,点测试。

如果测试成功,就可以去:

令牌管理 -> 新建令牌

创建一个下游 API Key。

之后客户端就可以调用 New API:

curl http://你的服务器公网IP:3000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer 你的NewAPI令牌" \
  -d '{
    "model": "gpt-5",
    "messages": [
      {
        "role": "user",
        "content": "你好"
      }
    ]
  }'

七、如果要让 CLI Proxy API Plus 外网访问

一般不建议直接开放 CLI Proxy API Plus。
如果只是给 New API 调用,不需要开放公网。

如果你确实要在外网直接访问,可以用 Nginx 代理,并加一层 Basic Auth。

1. 安装 Nginx

yum install -y nginx httpd-tools
systemctl enable nginx
systemctl start nginx

2. 创建 Basic Auth 密码

htpasswd -bc /etc/nginx/.cliproxy_htpasswd admin 你的访问密码

3. 添加 Nginx 配置

vim /etc/nginx/conf.d/cli-proxy-api-plus.conf

写入:

server {
    listen 8317;
    server_name _;

    client_max_body_size 50m;

    location / {
        auth_basic "CLI Proxy API Plus";
        auth_basic_user_file /etc/nginx/.cliproxy_htpasswd;

        proxy_pass http://127.0.0.1:18317;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 600s;
        proxy_send_timeout 600s;
    }
}

检查 Nginx 配置:

nginx -t

重载:

systemctl reload nginx

然后安全组开放 8317

访问:

http://你的服务器公网IP:8317

会先要求输入 Basic Auth 账号密码。

八、客户端怎么用

1. 普通 OpenAI 兼容客户端

如果客户端支持填写 Base URL 和 API Key,就这样填:

Base URL:http://你的服务器公网IP:3000/v1
API Key:New API 里创建的令牌
模型:New API 里配置好的模型名

2. Codex CLI 直接接 CLI Proxy API Plus

如果你不想走 New API,想让 Codex 直接连 CLI Proxy API Plus,可以改本地:

~/.codex/config.toml

示例:

model_provider = "cliproxyapi"
model = "gpt-5-codex"
model_reasoning_effort = "high"

[model_providers.cliproxyapi]
name = "cliproxyapi"
base_url = "http://你的服务器公网IP:8317/v1"
wire_api = "responses"

再改:

~/.codex/auth.json

示例:

{
  "OPENAI_API_KEY": "sk-dummy"
}

如果你走的是 New API,则可以把 Codex 的 base_url 改成:

http://你的服务器公网IP:3000/v1

然后 OPENAI_API_KEY 填 New API 创建的令牌。

九、常用维护命令

1. 查看容器

docker ps

2. 查看 New API 日志

docker logs -f new-api

3. 查看 CLI Proxy API Plus 日志

docker logs -f cli-proxy-api-plus

4. 重启 New API

cd /opt/ai-gateway/new-api
docker compose restart

5. 重启 CLI Proxy API Plus

cd /opt/ai-gateway/cli-proxy-api-plus
docker compose restart

6. 更新镜像

New API:

cd /opt/ai-gateway/new-api
docker compose pull
docker compose up -d

CLI Proxy API Plus:

cd /opt/ai-gateway/cli-proxy-api-plus
docker compose pull
docker compose up -d

如果 CLI Proxy API Plus 是源码构建的:

cd /opt/ai-gateway/cliproxyapi-plusplus
git pull
docker build -t local/cli-proxy-api-plus:latest .
cd /opt/ai-gateway/cli-proxy-api-plus
docker compose up -d

7. 备份

建议至少备份这些目录:

/opt/ai-gateway/new-api
/opt/ai-gateway/cli-proxy-api-plus/config.yaml
/opt/ai-gateway/cli-proxy-api-plus/auths

打包备份:

cd /opt
tar -czvf ai-gateway-backup.tar.gz ai-gateway

下载到本地保存。

十、常见问题

1. docker compose up -d 报 YAML 错误

常见原因:

1. 缩进不对。
2. mysql、redis 没有和 new-api 对齐。
3. 冒号后面少空格。
4. 密码里有特殊符号,导致解析异常。

可以用:

docker compose config

检查 compose 文件是否能被正常解析。

2. New API 打不开

排查:

docker ps
docker logs -f new-api

再检查安全组是否开放 3000

如果容器正常,但公网打不开,基本就是安全组或服务器防火墙问题。

3. New API 连接不上 MySQL

重点看 SQL_DSN

root:你的MySQL密码@tcp(mysql:3306)/new-api

注意:

mysql 是容器名,不是服务器 IP。
new-api 是数据库名。
密码不要乱带特殊符号。

4. New API 渠道测试 502

如果报:

unknown provider for model xxx

通常是模型名不对。

处理方式:

1. 先请求 CLI Proxy API Plus 的 /v1/models。
2. 看实际返回了哪些模型。
3. New API 里只填写真实存在的模型。

5. CLI Proxy API Plus 登录后还是不能用

检查:

ls -la /opt/ai-gateway/cli-proxy-api-plus/auths
docker logs -f cli-proxy-api-plus

如果 auths 目录没有生成登录态文件,说明登录没有成功。

重新执行对应登录命令即可。

6. 服务器在新加坡,要不要开代理

这个要看你的上游服务。

如果服务器访问上游模型经常超时,可以在 config.yaml 里配置:

proxy-url: "socks5://127.0.0.1:7890"

如果服务器访问稳定,就不要多加代理,代理链路越长,越容易慢。

7. MySQL 要不要开放 3306

不建议。

New API 和 MySQL 在同一个 Docker 网络里,内部访问即可:

mysql:3306

公网开放 3306 风险很高,除非你明确知道自己在做什么。

十一、最终访问地址整理

部署完成后常用地址:

服务器登录:
ssh root@你的服务器公网IP

New API 后台:
http://你的服务器公网IP:3000

New API 接口:
http://你的服务器公网IP:3000/v1

CLI Proxy API Plus 内部地址:
http://cli-proxy-api-plus:8317/v1

CLI Proxy API Plus 宿主机本地地址:
http://127.0.0.1:18317/v1

CLI Proxy API Plus 外网地址,只有配置 Nginx 后才有:
http://你的服务器公网IP:8317/v1

登录方式:

服务器:SSH 用户名 + 密码,或者 SSH 密钥
New API:root / 初始密码,首次登录后必须修改
CLI Proxy API Plus:API 调用使用 Bearer API_KEY,管理接口使用 MANAGEMENT_KEY
Nginx 外网访问:Basic Auth 用户名 + 密码

十二、我的建议

如果只是自己用,推荐:

New API 对公网开放 3000
CLI Proxy API Plus 不直接对公网开放
New API 通过 Docker 网络访问 CLI Proxy API Plus
MySQL / Redis 不开放公网

这样最清晰,也相对安全。

如果后面要给公司同事或者多台电脑用,再考虑:

1. 给 New API 配域名和 HTTPS
2. 关闭公开注册
3. 每个人单独创建 New API 用户和令牌
4. 给不同用户限制模型和额度
5. 定期看日志和异常请求

这个东西最怕的不是部署不起来,而是部署起来后所有端口和密钥都裸奔。
能不暴露的端口就不要暴露,能用内部网络访问的就不要走公网。

参考资料

最后修改:2026 年 06 月 01 日
去码头整点薯片?