🍥 New-API 完整部署指南(Docker + SQLite)
新一代大模型网关与 AI 资产管理系统 —— New API
基于 One API(MIT)二次开发,采用 AGPLv3 开源协议。本指南使用Docker + SQLite完成单机部署,无需额外安装 MySQL / PostgreSQL / Redis,开箱即用。
官方项目:https://github.com/QuantumNous/new-api | 官方文档:https://docs.newapi.pro/zh/docs
📑 目录
- 1. 背景介绍与功能
- 2. 需要的准备
- 3. 部署
- 4. 环境变量
- 5. 页面配置
- 6. docker logs 查看
- 7. 常见问题:合规声明
1. 背景介绍与功能
1.1 项目简介
New API 是新一代大模型网关与 AI 资产管理系统,在 One API 的基础上进行了大量增强,提供现代化的管理界面、多模型接入、统一鉴权、用量统计与成本核算能力,是目前自建 AI 中转 / 网关服务的主流方案之一。
1.2 核心功能
| 分类 | 功能 |
|---|---|
| 🎨 全新 UI | 现代化的用户界面设计 |
| 🌍 多语言 | 支持中文、英文、法语、日语 |
| 🔄 数据兼容 | 完全兼容原版 One API 数据库 |
| 📈 数据看板 | 可视化控制台与统计分析 |
| 🔒 权限管理 | 令牌分组、模型限制、用户管理 |
| ⚡ API 格式 | OpenAI Compatible、OpenAI Responses、Claude Messages、Google Gemini、Realtime、Rerank 等 |
| 🎨 模型支持 | OpenAI 系列、Claude、Gemini、Midjourney、Suno、Dify、自定义上游 |
| 🔄 格式转换 | OpenAI ⇄ Claude、OpenAI → Gemini、思考转内容 |
| ⚖️ 智能路由 | 渠道加权随机、失败自动重试、用户级模型限流 |
| 😈 授权登录 | Discord / LinuxDO / Telegram / OIDC 统一认证 |
| 💰 用量成本 | 按次、按量、缓存命中成本核算,灵活计费策略 |
1.3 部署要求
| 组件 | 要求 |
|---|---|
| 本地数据库 | SQLite(Docker 需挂载/data目录)✅ 本指南采用 |
| 远程数据库 | MySQL ≥ 5.7.8 或 PostgreSQL ≥ 9.6 |
| 容器引擎 | Docker / Docker Compose |
| 系统架构 | 仅支持 64 位系统(amd64 / arm64),不支持 32 位系统 |
选择 SQLite 的理由:单机小规模部署时零依赖、零额外容器,数据落在单个
new-api.db文件里,备份只需拷贝一个文件;等规模上去了再平滑迁移到 MySQL / PostgreSQL。
2. 需要的准备
- ☁️一台服务器 / 云主机(Linux 优先,Windows / macOS 同样支持),64 位系统
- 🐳Docker与Docker Compose(Compose 插件版:
docker compose;老版本:docker-compose) - 🔌 放行3000 端口(云厂商安全组 + 系统防火墙)
- 🌐 (可选)域名已解析到服务器 IP,配合 Nginx / Caddy 做 HTTPS 反向代理
- 🐚 能 SSH 到服务器,或本机已安装 Docker Desktop
验证 Docker 环境:
docker--versiondockercompose version3. 部署
💡 最新版 Docker 镜像:
calciumion/new-api:latest
3.1 方式一:Docker Compose(推荐)
官方仓库的docker-compose.yml默认带了postgres + redis等多个服务(其中SQL_DSN=postgresql://...指向 PostgreSQL)。本指南做的是SQLite 精简版:去掉数据库/缓存容器,不设置SQL_DSN,New API 会自动使用 SQLite,数据落在挂载的/data目录中。
① 新建部署目录并编写docker-compose.yml:
mkdir-pnew-api&&cdnew-apivimdocker-compose.yml# New-API Docker Compose Configuration(SQLite 精简版)version:'3.4'services:new-api:image:calciumion/new-api:latestcontainer_name:new-apirestart:alwayscommand:--log-dir /app/logsports:-"3000:3000"volumes:-./data:/data# SQLite 数据库文件(/data/new-api.db)持久化到宿主机-./logs:/app/logs# 日志目录持久化environment:-TZ=Asia/Shanghai# 时区-ERROR_LOG_ENABLED=true# 启用错误日志记录-BATCH_UPDATE_ENABLED=true# 启用批量更新-NODE_NAME=new-api-node-1# 节点名称(审计日志标识)# - MEMORY_CACHE_ENABLED=true # 无 Redis 时可开内存缓存(可选)healthcheck:test:["CMD-SHELL","wget -q -O - http://localhost:3000/api/status | grep -o '\"success\":\\s*true' || exit 1"]interval:30stimeout:10sretries:3② 启动服务:
dockercompose up-ddockerps# 确认 new-api 容器状态为 Up (healthy)③ 访问系统:
浏览器打开http://<服务器IP>:3000,首次打开按页面提示初始化管理员账号即可。
🎉 部署完成!默认页面即登录/注册入口,无需额外配置数据库。
3.2 方式二:Docker 命令(SQLite 默认)
不想用 Compose 的话,一条命令即可:
dockerpull calciumion/new-api:latestdockerrun--namenew-api-d--restartalways\-p3000:3000\-eTZ=Asia/Shanghai\-v./data:/data\calciumion/new-api:latest💡 路径说明:
./data:/data为相对路径,数据保存在当前目录的data文件夹;也可改为绝对路径如-v /your/custom/path:/data。
3.3 多机部署注意事项(扩展)
- 所有节点必须使用同一个主数据库,并设置相同的
SESSION_SECRET,否则 Access Token、Refresh 会话无法一致校验; - 连接同一个 Redis 的节点还必须设置相同的
CRYPTO_SECRET,否则缓存键摘要不一致,无法共享缓存; - 单机 SQLite 场景无需关心上述内容,直接跳过即可。
4. 环境变量
New API 支持通过环境变量进行配置。在docker-compose.yml的environment段(或docker run -e)中设置即可。以下为常用变量(摘自官方文档):
| 变量名 | 说明 | 默认值 |
|---|---|---|
SESSION_SECRET | 鉴权签名密钥;多机部署时所有节点必须保持一致,务必改为随机字符串 | - |
SESSION_COOKIE_SECURE | true:启用 Secure Cookie 与严格 refresh/logout OriginGuard;false/未配置:关闭(仅本地 HTTP) | false |
SESSION_COOKIE_TRUSTED_URL | Secure 模式必填:允许调用 refresh/logout 的精确 HTTPS Origin,多个用英文逗号分隔 | - |
TRUSTED_PROXIES | 信任的代理 IP/CIDR 列表;none为严格模式 | 回环/RFC1918/ULA |
USER_SESSION_ACTIVE_LIMIT | 单用户最大活跃登录 Session 数 | 50 |
USER_SESSION_ISSUANCE_LIMIT | 单用户在签发窗口内可创建的 Session 总数 | 100 |
USER_SESSION_ISSUANCE_WINDOW_SECONDS | Session 签发计数窗口(秒) | 86400 |
USER_SESSION_REVOKED_RETENTION_DAYS | revoked Session 保留天数(审计用) | 7 |
USER_SESSION_HOURLY_ALERT_THRESHOLD | 全局每小时 Session 签发告警阈值(只告警不拒绝) | 5000 |
CRYPTO_SECRET | 缓存键 HMAC 密钥;共享 Redis 的节点必须一致 | 跟随SESSION_SECRET |
SQL_DSN | 数据库连接字符串。SQLite 场景不要设置,留空即用 SQLite | - |
REDIS_CONN_STRING | Redis 连接字符串(缓存,可选) | - |
MEMORY_CACHE_ENABLED | 内存缓存开关(无 Redis 时推荐开启) | false |
STREAMING_TIMEOUT | 流模式无响应超时时间(秒);出现空补全可调大 | 120 |
STREAM_SCANNER_MAX_BUFFER_MB | 流式扫描器单行最大缓冲(MB),图像生成等超大data:片段需调大 | 64 |
MAX_REQUEST_BODY_MB | 请求体最大大小(MB,解压后计),超限返回413 | 32 |
AZURE_DEFAULT_API_VERSION | Azure API 版本 | 2025-04-01-preview |
ERROR_LOG_ENABLED | 错误日志开关 | false |
TZ | 时区,如Asia/Shanghai | - |
BATCH_UPDATE_ENABLED | 批量更新开关(提升性能) | false |
NODE_NAME | 节点名称,审计日志中标识节点身份 | - |
4.1 SQLite 场景要点
- 不设置
SQL_DSN:留空即自动使用 SQLite,数据库文件位于容器内/data/new-api.db; - 挂载
/data目录:务必用-v ./data:/data把数据持久化到宿主机,否则容器重建数据全丢; - 缓存二选一:小规模可直接开
MEMORY_CACHE_ENABLED=true,无需 Redis;并发量上来后再加 Redis(REDIS_CONN_STRING=redis://:密码@redis:6379)。
📖 完整环境变量说明见官方文档:环境变量
5. 页面配置
5.1. 登录
5.2. 渠道配置
这里 需要到对应提供商的开放平台获取 base_url (OpenAI) 以及 api秘钥
例子(deepseek) 还需要填入api秘钥
5.3. 模型配置
这里供应商选择之前创建的渠道
而且模型名称需要查看供应商提供的模型目录,例子:
5.4. 模型金额配置
到此,模型配置完成,但是必须为模型配置金额不然不可使用
添加模型并定价
5.5. 测试模型
warning 支付,兑换码等功能需要满足合规声明,可跳转到第7章
5.6. 代码测试
5.6.1. 生成apiKey
切换普通用户
5.6.2. python代码demo
# Please install OpenAI SDK first: `pip3 install openai`importosfromopenaiimportOpenAI client=OpenAI(api_key="sk-IptFK2qZs3lRu0dbCtkz1hQ9ZbwN6yCXXBkZdnnnJ5M0GsmE",#该秘钥为本地项目生成,复制无用base_url="http://localhost:3001/v1")# 端口按你实际映射的宿主端口修改,本指南部署示例为 3000response=client.chat.completions.create(model="deepseek-v4-flash",messages=[{"role":"system","content":"You are a helpful assistant"},{"role":"user","content":"Hello"},],stream=False,extra_body={"thinking":{"type":"enabled"},"reasoning_effort":"high"})print(response.choices[0].message.content)代码测试
6. docker logs 查看
容器运行中排错、看日志是日常运维基本功,New API 容器日志用docker logs即可查看。
6.1 常用命令
# 查看容器最近 100 行日志dockerlogs--tail100new-api# 实时跟踪日志输出(Ctrl+C 退出)dockerlogs-fnew-api# 查看某个时间段之后的日志dockerlogs--since1h new-api# 查看容器状态(是否健康、重启次数)dockerps-adockerinspect new-api--format'{{.State.Status}} RestartCount={{.RestartCount}}'6.2 日志文件
启动时通过command: --log-dir /app/logs指定了日志目录,并挂载到宿主机./logs:
# 宿主机直接查看日志文件ls-lalogs/tail-flogs/*.log# 进入容器查看dockerexec-itnew-apishls-la/app/logs6.3 常见日志排查
| 现象 | 日志线索 | 处理 |
|---|---|---|
| 容器反复重启 | docker logs new-api有 panic / 端口占用 | 检查 3000 端口是否被占用,ERROR_LOG_ENABLED=true开详细日志 |
| 页面 502 / 打不开 | 容器未 healthy | 用docker compose ps看健康检查结果,/api/status是否返回success: true |
| 渠道 401 / 超时 | 日志中有上游报错 | 检查渠道密钥、代理地址;流式空补全调大STREAMING_TIMEOUT |
7. 常见问题:合规声明
7.1 问题现象
较新版本的 New API 在支付相关功能(支付网关、充值、兑换码、订阅计划、邀请返利等)加入了合规声明确认弹窗:未确认前,前端弹窗反复出现,付费相关功能被锁定无法使用。
⚠️ 说明:所有后端合规检查最终调用
IsPaymentComplianceConfirmed()这一个函数,前端状态也是读后端返回的payment_compliance_confirmed字段。只要后端认为已确认,前端弹窗和锁定 UI 自动消失。
7.2 方案一:改数据库(推荐,实测可行 ✅)
无需重新编译,直接把配置项写入options表标记为已确认。
SQLite 版 SQL:
INSERTORREPLACEINTOoptions("key","value")VALUES('payment_setting.compliance_confirmed','true'),('payment_setting.compliance_terms_version','v1');容器内执行(SQLite):
dockerexec-itnew-api sqlite3 /data/new-api.db"INSERT OR REPLACE INTO options (\"key\",\"value\") VALUES ('payment_setting.compliance_confirmed', 'true'), ('payment_setting.compliance_terms_version', 'v1');"💡 若容器内没有
sqlite3命令(镜像精简版),可用宿主机工具改库:# 停容器 → 拷出数据库 → 宿主机改 → 拷回 → 启动dockercpnew-api:/data/new-api.db ./new-api.db sqlite3 ./new-api.db"INSERT OR REPLACE INTO options (\"key\",\"value\") VALUES ('payment_setting.compliance_confirmed', 'true'), ('payment_setting.compliance_terms_version', 'v1');"dockercp./new-api.db new-api:/data/new-api.dbdockerrestart new-api
执行成功后刷新页面,弹窗消失,充值、兑换码、订阅等付费功能恢复可用。
7.3 方案二:改源码(彻底去除,升级不受影响)
修改setting/operation_setting/payment_setting.go:
funcIsPaymentComplianceConfirmed()bool{returntrue}然后重新编译部署。适用于长期自用、不想每次升级后都改库的场景。
📜 合规提示与参考
[!WARNING]
本项目仅面向合法授权的 AI API 网关、组织内部鉴权、多模型管理、用量统计、成本核算和私有化部署场景。将项目作为面向公众的生成式 AI 服务或 API 转售服务运营时,使用者应先完成备案、内容安全、实名、日志留存、税务、支付和上游授权等合规义务,遵守《生成式人工智能服务管理暂行办法》等监管要求。本文第 7 节仅为自建实例解除弹窗的技术操作说明,不代表豁免任何合规义务。
参考链接:
- 官方仓库:github.com/QuantumNous/new-api
- 官方文档:docs.newapi.pro
- 部署指南:安装文档
- 环境变量:环境变量文档
- 常见问题:FAQ
如果本文对你有帮助,欢迎点赞 👍、收藏 ⭐、评论互动,我会持续更新更多 AI 网关与部署实战教程。