基于 QuantumNous/new-api(原 Calcium-Ion/new-api)源码与官方文档整理。
适用场景:自用 / 团队内部 / 企业私有化的 AI API 网关 + 用量与成本管理。
镜像:calciumion/new-api:latest· 默认端口:3000
| 项目 | 说明 |
|---|---|
| 项目定位 | 统一 AI 模型入口,兼容 OpenAI / Claude / Gemini 等格式,做鉴权、路由、计费、审计 |
| 源码入口 | main.go 启动;router/ 路由;controller/ 业务;model/ 数据;relay/ 转发;middleware/ 鉴权限流 |
| 官方文档 | docs.newapi.pro |
| 环境变量 | 环境变量配置 |
| 功能指南 | 功能指南概述 |
合规要点(运维必读)
SESSION_SECRET、数据库/Redis 密码| 目录/模块 | 运维含义 |
|---|---|
router/relay-router.go |
对外中转 API:/v1/chat/completions、/v1/messages 等 |
router/api-router.go |
控制台管理 API:用户、渠道、令牌、充值、系统设置 |
router/channel-router.go |
渠道 CRUD、测试、余额、模型拉取 |
model/channel.go |
渠道字段:Key、BaseURL、Models、Group、Priority、Weight、AutoBan |
model/token.go |
令牌字段:配额、模型限制、IP 白名单、分组 |
controller/relay.go |
实际转发与计费闭环 |
docker-compose.yml |
生产推荐编排:new-api + postgres + redis |
健康检查(compose 已配置)
| 角色 | 能力 | 运维注意 |
|---|---|---|
| 普通用户 | 注册登录、创建令牌、调 API、看自己的日志、充值/兑换 | 默认分组与初始配额由运营设置控制 |
| 管理员 Admin | 用户管理、渠道、兑换码、全站日志、模型/分组 | 由 Root 提升;勿给不可信账号 |
| 超级管理员 Root | 系统设置、倍率、支付、OAuth、性能监控等 | 首次安装初始化的账号;务必强密码 + 2FA |
控制台路径习惯:/console/*(如令牌 /console/token)。
| 组件 | 要求 |
|---|---|
| 系统 | 64 位 Linux(amd64/arm64) |
| 容器 | Docker + Docker Compose |
| 数据库 | SQLite(轻量)/ MySQL ≥ 5.7.8 / PostgreSQL ≥ 9.6 |
| 缓存 | 生产强烈建议 Redis |
服务器放哪、买多大:主站默认落在 日本东京源站(香港仅作盾机入口),规格与下单顺序见架构方案 §8 服务器选型。起步常见 2~4C / 4~8G + Docker(Postgres/Redis);不需要 GPU。
对象存储:生图/附件默认 Cloudflare R2(S3 兼容、出站便宜);与 S3/B2/OSS/MinIO 等对比见架构 §8.9;API 入口仍走盾机,不要把整站 API 橙云和 R2 图床混为一谈。
源码自带 docker-compose.yml,默认:
calciumion/new-api:latest,端口 3000root/123456,库 new-api123456./data、./logs、pg_data访问:http://服务器IP:3000 → 首次进入初始化页,设置 Root 账号密码。
SESSION_SECRET(禁止使用字面量 random_string,程序会拒绝启动)SESSION_SECRET、CRYPTO_SECRET、SQL_DSN、REDIS_CONN_STRING 一致FRONTEND_BASE_URL=https://你的域名(邮件、回调、前端跳转)ERROR_LOG_ENABLED=true 便于排障BATCH_UPDATE_ENABLED=true 降低高并发写库压力理解这四者关系,是运维与排障的基础。
| 概念 | 作用 | 运维要点 |
|---|---|---|
| 配额 Quota | 内部计费单位;约 1 USD = 500,000 配额 | 用户余额、令牌剩余、日志消费都以配额计 |
| 分组 Group | 连接「用户/令牌」与「渠道」的路由标签 | 令牌分组必须能匹配到启用渠道的分组 |
| 渠道 Channel | 一条上游配置(Key + BaseURL + 模型列表) | 可多 Key、自动禁用、测速、查余额 |
| 令牌 Token | 客户端调用凭证 sk-... |
创建时完整 Key 只显示一次 |
按量计费公式(源码/文档一致)
预扣 + 结算:请求前预扣,结束后按实际 token 多退少补。
控制台:渠道管理 · 源码:controller/channel.go、model/channel.go、router/channel-router.go
| 字段 | 作用 | 如何用 |
|---|---|---|
| 名称 Name | 标识 | 建议:openai-主、claude-备用 |
| 类型 Type | 上游协议适配 | OpenAI / Azure / Claude / Gemini / 自定义等 |
| Key | 上游密钥 | 支持多 Key;泄露立即轮换并禁用渠道 |
| Base URL | 上游地址 | 官方或中转;末尾斜杠按类型要求填写 |
| Models | 本渠道支持的模型名 | 逗号分隔;客户端请求的 model 必须在此列表 |
| Group | 所属分组 | 与令牌分组对齐,如 default、vip |
| Priority | 优先级 | 越大越优先;同优先级再看权重 |
| Weight | 权重 | 同优先级内加权随机 |
| Model Mapping | 模型名映射 | 客户端 gpt-4o → 上游真实名 |
| Auto Ban | 失败自动禁用 | 生产建议开启,配合定期测试 |
| Param/Header Override | 改写请求参数/头 | 统一 temperature、加系统提示等 |
| Tag | 标签 | 批量启用/禁用、按标签运维 |
default / vip 等controller/channel-test.go)| 策略 | 行为 | 场景 |
|---|---|---|
| 优先级 | 先打高 Priority | 主备切换 |
| 权重 | 同优先级按 Weight 随机 | 多 Key 负载分担 |
| 失败重试 | 运营设置里配置重试次数 | 上游偶发 5xx |
| 自动禁用 | 连续失败禁用渠道 | 防止雪崩打坏 Key |
「无可用渠道」常见原因
渠道编辑中的 Param Override 支持 set/delete/move/append 等操作,可按条件改写 body。
用途:强制 stream=true、注入 system prompt、按模型改 max_tokens。
详见官方:渠道管理 / 参数覆盖
路径:/console/token · 源码:model/token.go、controller/token.go
| 配置 | 作用 | 运维建议 |
|---|---|---|
| 名称 | 用途标识 | cursor-生产、测试-临时 |
| 过期时间 | -1 永不过期 |
对外临时 Key 务必设过期 |
| 剩余配额 | 令牌级上限 | 防止单 Key 刷爆账户 |
| 无限配额 | 不限制令牌配额 | 仍受用户账户总配额约束 |
| 模型限制 | 只允许部分模型 | 给外包/插件最小权限 |
| IP 白名单 | 限制来源 IP | 服务器出口固定时强烈建议 |
| 分组 | 决定走哪类渠道 | 与渠道 Group 一致 |
| 跨分组重试 | auto 分组失败换组 | 仅特殊场景开启 |
源码:controller/user.go、model/user.go · 路由:/api/user/*
| 操作 | 作用 |
|---|---|
| 创建/搜索用户 | 内测开通、客服查账 |
| 调整角色 | 普通 ↔ Admin(Root 谨慎授权) |
| 调整分组 | 决定默认计费倍率与可用渠道池 |
| 增减配额 | 人工充值、补偿、清零 |
| 启用/禁用 | 风控封禁 |
| 重置 2FA / Passkey | 用户丢失二次验证时 |
注册相关运维
分组是 计费倍率 与 渠道路由 的枢纽。
| 用途 | 说明 |
|---|---|
| 渠道侧 Group | 该渠道服务哪些客户档位 |
| 令牌/用户 Group | 请求落到哪些渠道 |
| 分组倍率 | 如 vip=0.5 表示半价消耗配额 |
推荐落地
| 分组 | 渠道 | 分组倍率 | 说明 |
|---|---|---|---|
| default | 普通模型渠道 | 1.0 | 默认用户 |
| vip | 高优先级优质渠道 | 0.8 | 付费会员 |
| test | 便宜/实验模型 | 1.0 | 内部调试 |
修改分组后:同步检查渠道归属、令牌分组、倍率 JSON,必要时「修复数据库一致性」。
系统设置 → 倍率设置
倍率或价格未配置日志中每条请求有消耗配额;用公式反推是否配置错误。
示例:输入 1000、输出 500、模型倍率 1.25、补全 4、分组 1.0:
源码选项接口:/api/option(middleware.RootAuth)
| 模块 | 作用 | 运维建议 |
|---|---|---|
| 运营设置 | 新用户配额、邀请奖励、返利、失败重试次数 | 重试 1~3 次较常见 |
| 限流设置 | 全局限流、分组/用户级模型限流 | 防刷与保护上游 |
| 支付设置 | 易支付、Stripe、Creem、Waffo 等 | Webhook 必须公网可达 HTTPS |
| 聊天/绘图 | 内置聊天与 Midjourney 相关 | 按业务开关 |
| 数据看板 | 控制台图表 | 便于看消耗趋势 |
| 模型设置 | 展示名、行为、同步上游模型元数据 | 与渠道 Models 配合 |
| 其他设置 | 首页 HTML、公告、协议 | 对外站点品牌化 |
| OAuth | GitHub/Discord/LinuxDO/OIDC/微信/Telegram | 配置回调域与 CLIENT_ID/SECRET |
环境变量与界面设置分工
路径:兑换码管理 · controller/redemption.go
| 步骤 | 说明 |
|---|---|
| 生成 | 设名称、面值(配额)、数量 |
| 导出 | 批量发给用户或活动 |
| 用户兑换 | 用户侧兑换后增加账户配额 |
| 状态 | 未使用 / 已使用,防重复 |
运维:大额兑换码限制单用户次数;活动码设合理面值与批次名便于审计。
| 功能 | 作用 | 运维用法 |
|---|---|---|
| 使用日志 | 令牌、模型、分组、耗配额、错误 | 用户查账、定位哪条渠道失败 |
| 错误日志 | ERROR_LOG_ENABLED |
上游 401/429/5xx 聚合 |
| 数据看板 | 用量与成本趋势 | 容量规划、发现异常刷量 |
| 任务 Task | MJ / 视频等异步任务 | UPDATE_TASK、超时 TASK_TIMEOUT_MINUTES |
| 审计 | 多节点时 NODE_NAME 区分实例 |
集群排障 |
高日志量可将 LOG_SQL_DSN 指到独立库或 ClickHouse(compose 中有示例)。
源码:router/relay-router.go + controller/relay.go
| 端点 | 说明 |
|---|---|
POST /v1/chat/completions |
OpenAI 聊天 |
POST /v1/completions |
补全 |
POST /v1/responses |
OpenAI Responses |
POST /v1/messages |
Claude Messages |
POST /v1/embeddings |
向量 |
POST /v1/images/generations |
图像 |
POST /v1/audio/* |
音频 |
GET /v1/realtime |
Realtime(WebSocket) |
GET /v1/models |
模型列表(需令牌) |
POST /pg/chat/completions |
Playground(登录用户) |
另有 Gemini:/v1beta/models 等。
Authorization: Bearer sk-xxxx-api-key / x-goog-api-key(路由内已分支处理)| 项 | 建议 |
|---|---|
| Base URL | https://域名/v1(有的客户端填到域名根,按软件说明) |
| 模型名 | 必须与渠道 Models / 映射一致 |
| 流式 | stream=true;Nginx 关缓冲、拉长超时 |
| 思考模型后缀 | 如 *-thinking、*-high(见 README 特性) |
| 能力 | 说明 |
|---|---|
| 易支付 EPay | 国内常见;配置商户与回调 /api/user/epay/notify |
| Stripe / Creem / Waffo | 国际支付;配置 Webhook 到对应 /api/*/webhook |
| 订阅 Subscription | 套餐计划、绑定用户、周期重置(/api/subscription) |
| 兑换码 | 线下/活动补配额 |
| 管理员手工调额 | 用户管理里增减配额 |
运维:支付回调域名加入可信列表;先小额测通再开放。
| 机制 | 配置位置 | 作用 |
|---|---|---|
| 全局限流 | 环境变量 GLOBAL_API_RATE_LIMIT* |
防 API 打爆 |
| Web 限流 | GLOBAL_WEB_RATE_LIMIT* |
防页面爆破 |
| 关键操作限流 | CRITICAL_RATE_LIMIT* |
登录/注册/重置密码 |
| 模型请求限流 | 中间件 ModelRequestRateLimit |
用户级模型 QPS |
| Turnstile | 注册/签到等 | 防机器人 |
| 2FA / Passkey | 用户设置 | 保护管理员 |
| IP 白名单 | 令牌 | 缩小攻击面 |
| 请求体限制 | MAX_REQUEST_BODY_MB |
防大包/zip bomb |
| SSRF 防护 | common 包 | 防恶意上游 URL |
密钥轮换流程:新建渠道 Key → 测试 → 提高优先级 → 观察 → 删旧 Key。
关键四同
SQL_DSNREDIS_CONN_STRINGSESSION_SECRET / CRYPTO_SECRETNODE_TYPE=master,从 NODE_TYPE=slave,SYNC_FREQUENCY 如 60s前面加 Nginx 上游负载均衡;会话靠统一 SECRET + Redis。
扩容:加 slave → 加入 LB → 观察 /api/status 与日志。
更新:先滚动从节点,再主节点。
当需要把 ChatGPT Plus / Claude / Coding Plan 等订阅账号接进来时,推荐用 NewAPI 作主站、Sub2API 作副站:NewAPI 管用户/令牌/计费与渠道编排,Sub2API 专做订阅号池(负载均衡、粘性会话、每账号独立代理)。客户端只连主站。
编码场景默认(Pro20x)——优先这样配:
| 字段 | 填写 |
|---|---|
| 类型 | OpenAI 兼容(以 Sub2API 为准) |
| 名称 | sub2api-pro20x-coding |
| Base URL | 副站内网(如 http://10.0.0.5:8080),勿公网裸奔 |
| Key | Sub2API 中绑定 chatgpt-pro20x 分组的 API Key |
| Models | 与号池实际可出模型对齐 |
| Group | coding(编码用户令牌只放此分组) |
| Priority | 100(主力) |
| Auto Ban | 开 |
可选再加一条低优先级三方中转作 fallback。真 Azure/官方 Key 作后续 vip 稳仓,非编码默认。
通用号池渠道字段:
| 字段 | 填写 |
|---|---|
| 类型 | 按 Sub2API 分组协议选:OpenAI 兼容 或 Anthropic 兼容 |
| 名称 | 如 sub2api-chatgpt池 / sub2api-claude池 |
| Base URL | 副站地址,建议内网 |
| Key | Sub2API 中绑定对应分组生成的 API Key |
| Models | 与该 Sub2API 分组账号支持的模型对齐 |
| Group / 优先级 / 权重 | 编码走号池高优先级;稳仓/兜底低优先级或其它分组 |
要点
当 AZ / 官方 gpt-image-2 受限时,可用 Adobe Firefly 兼容网关(如 adobe2api、image2api)作生图上游:网关副站把 Firefly 账号池能力暴露为 OpenAI 兼容 API,主站 NewAPI 只配一条渠道。
NewAPI 渠道示例:
| 字段 | 填写 |
|---|---|
| 类型 | OpenAI 兼容 |
| 名称 | adobe-firefly-image |
| Base URL | 网关内网地址(如 http://10.0.0.6:6001) |
| Key | 网关 service API Key |
| Models | 网关真实模型 id(如 firefly-gpt-image-2k-16x9) |
| Group | image |
| Priority | 100(生图主力);AZ 备用可 10 |
| Model Mapping | 可选:gpt-image-2 → 网关模型 id |
| Auto Ban | 开 |
要点
与文本 Pro20x 号池分渠道、分分组、分计费倍率。
Pro20x 不做 4K 生图:gpt-image* / firefly-*-4k-* 只挂本 Adobe(及可选 AZ)渠道;4K 用网关 4k 模型 id,勿映射到 Sub2API。见架构 §11.5。
451 / 审核:官方 API、AZ 等模式易内容/地区策略拒绝(含 HTTP 451);网页逆向 / Firefly 网页通道过图率往往更高。451 与 content_policy 不要对同一渠道死磕重试,应降级到网页线或明确报错。见架构 §12.6。
客户端模型名与网关 id 不一致时用映射,勿假设上游就叫 gpt-image-2。
确认网关支持的路径:/v1/images/generations 和/或 chat 出图;比例/分辨率参数以网关文档为准。
积分耗尽、账号失效要能自动禁用,避免重试打爆。
合规:订阅转 API、网页逆向、号池共享风险自担;企业合规优先正式 API(接受更严审核)。
架构说明与对比见《AI 中转站架构方案》§12(含 §12.6 审核通道)。
对象存储:生图结果转存优先 Cloudflare R2;与 S3/B2/OSS/MinIO 等对比见架构 §8.9;勿把大图长期堆在源站磁盘。
chat/completionspull → 起新容器 → 观察日志 → 保留回滚镜像 tag| 现象 | 可能原因 | 处理 |
|---|---|---|
| 无可用渠道 | 分组/模型/禁用不匹配 | 查渠道 Group、Models、状态;刷新令牌 |
| 额度不足 | 用户或令牌配额用尽 | 充值/调额/查是否令牌单独限额 |
| 倍率未配置 | 新模型未设价 | 倍率设置补全 |
| invalid character '<' | 上游返回了 HTML | 查 BaseURL、网关防火墙、Key 是否错 |
| 分组负载已饱和 | 限流触发 | 调高限制或扩渠道 |
| 数据库一致性破坏 | 手改 DB / 分组缓存 | 控制台修复一致性,避免直接改库 |
| 升级丢数据 | 未挂载 /data 或清了卷 |
检查 volume;恢复备份 |
| 计费对不上 | RELAY_TIMEOUT 过短 |
慎设超时,避免上游已计费本地未扣 |
| 空补全/流中断 | 流超时、反代缓冲 | 加大 STREAMING_TIMEOUT,关 proxy_buffering |
| 登录会话丢失 | 多机 SECRET 不一致 | 统一 SESSION_SECRET 与 Redis |
| 需求 | 优先看 |
|---|---|
| 启动与依赖初始化 | main.go |
| 对外中转路由 | router/relay-router.go |
| 控制台 API | router/api-router.go |
| 渠道逻辑 | controller/channel.go、model/channel.go |
| 令牌逻辑 | controller/token.go、model/token.go |
| 转发与扣费 | controller/relay.go、relay/ |
| 配置项持久化 | model/option.go、controller/option.go |
| 部署样例 | docker-compose.yml、.env.example |
| systemd | new-api.service |
本文结合 new-api 源码结构与公开文档编写,版本迭代较快,具体字段以你部署的镜像版本文档与控制台为准。