自建 New API 网关:一个入口聚合所有大模型
手上同时有 OpenAI、DeepSeek、Claude、智谱、月之暗面……一堆模型的 API key,每个 key 的地址、格式、计费都不一样,用起来很烦。New API 就是来解决这个问题的:一个网关,统一管理所有模型的 key、计费、配额,对外只暴露一个 OpenAI 兼容接口,下游任何工具都能直接用。
New API 是 one-api 的二次开发版本,功能更强、维护更活跃。本文记录我用 Docker 自建 New API 的完整过程(含反代 + HTTPS),敏感信息已脱敏。
一、New API 能干什么
- 聚合渠道:把多家模型厂商配置成「渠道」,统一成一个入口。
- OpenAI 兼容:对外提供标准的
/v1接口,下游直接当 OpenAI 用。 - 令牌管理:自己签发 token,控制谁能用、能用多少额度。
- 计费与配额:按调用量统计消耗,给每个 token 设额度上限。
- 日志审计:每次调用的请求/响应、耗时、报错都留痕。
二、环境准备
- 一台 Linux 服务器 + Docker / Docker Compose
- 一个域名(用于反代和 HTTPS,可选但强烈建议)
- 反向代理工具(我用 Nginx Proxy Manager,也可以 Nginx / Caddy)
三、Docker Compose 部署
新建一个目录,写 docker-compose.yml:
services:
new-api:
image: calciumion/new-api:latest
container_name: new-api
restart: always
command: --log-dir /app/logs
volumes:
- ./data:/data
- ./logs:/app/logs
environment:
- TZ=Asia/Shanghai
- ERROR_LOG_ENABLED=true
- MEMORY_CACHE_ENABLED=true
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
docker compose up -d
启动后默认监听 3000 端口。
数据库选择
New API 默认用 SQLite(/data/one-api.db),开箱即用、零依赖,个人自用完全够。如果要多机部署或高并发,再切到 MySQL / PostgreSQL,取消注释 SQL_DSN 环境变量即可:
environment:
- SQL_DSN=root:密码@tcp(mysql:3306)/new-api # MySQL 示例
四、反向代理 + HTTPS
New API 是 HTTP 服务,直接用 IP 也能访问,但配上域名 + HTTPS 才靠谱(token 走明文 HTTP 有泄露风险)。以 Nginx Proxy Manager 为例:
- 新建一个 Proxy Host,域名填
ai.example.top。 - 转发到
new-api:3000(同一 Docker 网络内直接用容器名)。 - 开启 SSL,Let's Encrypt 自动签发证书。
核心反代配置要点:
location / {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_http_version 1.1;
# 其余走标准 proxy 配置
}
完成后就能通过 https://ai.example.top 访问后台了。
五、初始化与配置
1. 注册管理员
首次打开后台会引导注册管理员账号。注册完登录,进入控制台。
2. 添加渠道(Channel)
渠道就是上游的模型厂商。点「渠道」→「添加渠道」,填入:
- 类型:选对应的厂商(OpenAI / DeepSeek / Claude / 自定义等)
- Base URL:上游接口地址
- 密钥:你的上游 API key
- 模型:勾选该渠道支持的模型列表
可以加多个渠道,New API 会按权重和优先级做负载均衡与故障转移。
3. 签发令牌(Token)
「令牌」页新建一个 token,设置额度、过期时间、可用模型。这个 token 就是你以后调用时用的 key。
六、对接使用
New API 对外提供 OpenAI 兼容接口,下游工具只要把 base URL 和 key 换成你的网关即可:
Base URL: https://ai.example.top/v1
API Key: 刚才签发的 token
比如在 OpenCode / 各类客户端 / 自己写的代码里:
{
"baseURL": "https://ai.example.top/v1",
"apiKey": "sk-xxxx"
}
之后无论上游切了多少家模型,下游都不用改,统一从这一个网关走。
七、踩坑小结
- 端口:New API 容器内监听
3000,别和别的服务冲突;走反代就不必映射到宿主机。 - 数据库密码:用 MySQL/Postgres 时务必改掉示例里的默认密码。
- SESSION_SECRET:多机部署必须设置并改成随机串,否则 session 会串。
- 流式超时:遇到空补全,试着调大
STREAMING_TIMEOUT(默认 120 秒)。 - 健康检查:用
/api/status探活,返回success: true才算正常。
八、总结
New API 的价值在于把「一堆零散的模型 key」收敛成「一个统一入口 + 一套配额计费 + 一份日志」。Docker 部署五分钟搞定,SQLite 零依赖开箱即用,反代配上 HTTPS 就能稳定对外服务。下游任何支持 OpenAI 协议的工具,都能立刻从这一个网关接入所有模型。
如果你也在折腾自建 AI 服务,欢迎交流。