最近折腾了一套自己的 AI 中转站,主要用到两个东西:
New API和CLI 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 Terminal、XShell、FinalShell、Termius。
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 unzip1. 安装 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-api2. 创建 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:30004. 登录 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-plus2. 准备配置文件
先生成两个密钥:
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-login3. 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 nginx2. 创建 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 ps2. 查看 New API 日志
docker logs -f new-api3. 查看 CLI Proxy API Plus 日志
docker logs -f cli-proxy-api-plus4. 重启 New API
cd /opt/ai-gateway/new-api
docker compose restart5. 重启 CLI Proxy API Plus
cd /opt/ai-gateway/cli-proxy-api-plus
docker compose restart6. 更新镜像
New API:
cd /opt/ai-gateway/new-api
docker compose pull
docker compose up -dCLI 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 -d7. 备份
建议至少备份这些目录:
/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. 定期看日志和异常请求这个东西最怕的不是部署不起来,而是部署起来后所有端口和密钥都裸奔。
能不暴露的端口就不要暴露,能用内部网络访问的就不要走公网。
参考资料
- New API Docker 镜像说明:https://hub.docker.com/r/calciumion/new-api
- New API 环境变量说明:https://doc.newapi.pro/installation/environment-variables/
- New API 注册与登录说明:https://docs.newapi.pro/zh/docs/guide/feature-guide/user/auth
- New API docker-compose 示例:https://github.com/QuantumNous/new-api/blob/main/docker-compose.yml
- CLI Proxy API Plus GitHub:https://github.com/KooshaPari/cliproxyapi-plusplus
- CLIProxyAPI Docker Compose 说明:https://help.router-for.me/cn/docker/docker-compose
- CLIProxyAPI 配置项说明:https://help.router-for.me/configuration/options
- CLIProxyAPI Codex 配置说明:https://help.router-for.me/cn/agent-client/codex