【实战】用 NewAPI 自建 LLM 代理网关,接入 DeepSeek-V4

本文记录从零部署 NewAPI 并接入 DeepSeek-V4 模型的完整过程,包含环境配置、部署步骤、接口调用及踩坑解决方案。


一、背景:为什么需要自建 LLM 代理网关?
在使用 AI 工具的过程中,我遇到了几个痛点:

  1. API 密钥管理混乱:多个项目、多个模型需要不同的 API Key,难以统一管理
  2. 成本控制困难:直接用官方 API,无法精确统计各项目的 token 消耗
  3. 模型切换成本高:不同厂商的 API 格式不统一,切换模型需要改代码
  4. 隐私顾虑:敏感数据直接发给第三方,存在数据泄露风险
    NewAPI 是一个开源的 LLM API 代理网关,可以解决以上问题:
    ✅ 统一 API 格式(兼容 OpenAI 格式)
    ✅ 支持多模型、多密钥负载均衡
    ✅ 提供 Token 统计、日志记录
    ✅ 支持自托管,数据完全可控

二、环境准备
2.1 基础环境
我的部署环境:

组件 版本/配置
服务器 阿里云 ECS(美国区)
操作系统 Ubuntu 22.04 LTS
Docker 24.0.x
内存 4GB+(建议)
存储 40GB+
2.2 依赖检查
确保服务器已安装:

检查 Docker

docker --version

检查 Docker Compose

docker-compose --version

如果没有,先安装

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


三、NewAPI 部署步骤
3.1 拉取项目代码

克隆 NewAPI 仓库

git clone https://github.com/Calcium-Ion/new-api.git
cd new-api

查看最新版本

git tag
git checkout v1.x.x # 替换为最新版本号

3.2 配置环境变量
创建 .env 文件:

复制示例配置

cp .env.example .env

编辑配置文件

vim .env

关键配置项说明:

服务端口

PORT=3000

数据库连接

SQL_DSN=root:password@tcp(127.0.0.1:3306)/newapi?charset=utf8mb4&parseTime=True&loc=Local

Redis 缓存(可选,但建议配置)

REDIS_CONN_STRING=redis://localhost:6379

管理员账号

ADMIN_ACCOUNT=admin
ADMIN_PASSWORD=your_secure_password_here

令牌密钥(务必修改!)

JWT_SECRET_KEY=your_random_secret_key_here

3.3 启动服务

使用 Docker Compose 启动

docker-compose up -d

查看运行状态

docker-compose ps

查看日志

docker-compose logs -f

预期输出:
NAME COMMAND SERVICE STATUS PORTS
new-api “/main” new-api running 0.0.0.0:3000->3000/tcp
mysql “docker-entrypoint.s…” mysql running 3306/tcp
redis “docker-entrypoint.s…” redis running 6379/tcp

3.4 初始化数据库
访问 http://your-server-ip:3000,首次访问会自动初始化数据库。

四、接入 DeepSeek-V4 模型
4.1 获取 DeepSeek API Key

  1. 访问 DeepSeek 开放平台
  2. 注册账号并登录
  3. 进入"API Keys"页面
  4. 创建新的 API Key(妥善保存,只显示一次)
    4.2 在 NewAPI 中添加渠道
  5. 登录 NewAPI 管理后台(http://your-server-ip:3000)
  6. 进入"渠道" → “添加渠道”
  7. 填写配置:
    渠道类型: DeepSeek
    渠道名称: DeepSeek-V4
    API Key: sk-xxxxxxxxxxxxxxxxxxxx
    自定义模型: deepseek-v4-pro
    模型列表:
  • deepseek-v4-pro
  1. 点击"测试"按钮,确认连接正常
  2. 保存配置
    4.3 获取 NewAPI 的访问令牌
  3. 进入"令牌"页面
  4. 点击"添加令牌"
  5. 设置令牌名称和额度限制
  6. 复制生成的令牌(格式:sk-xxxxx)

五、调用接口测试
5.1 使用 curl 测试
curl -X POST http://your-server-ip:3000/v1/chat/completions
-H “Content-Type: application/json”
-H “Authorization: Bearer sk-your_newapi_token”
-d ‘{
“model”: “deepseek-v4-pro”,
“messages”: [
{
“role”: “user”,
“content”: “你好,请介绍一下你自己”
}
],
“temperature”: 0.7,
“max_tokens”: 1000
}’

5.2 使用 Python 测试
import openai

配置客户端

client = openai.OpenAI(
api_key=“sk-your_newapi_token”,
base_url=“http://your-server-ip:3000/v1”
)

调用模型

response = client.chat.completions.create(
model=“deepseek-v4-pro”,
messages=[
{“role”: “system”, “content”: “你是一个专业的技术助手”},
{“role”: “user”, “content”: “用 Python 写一个快速排序”}
],
temperature=0.7,
max_tokens=2000
)
print(response.choices[0].message.content)

5.3 在 WorkBuddy 中配置
如果你使用 WorkBuddy(或其他 AI 工具),可以这样配置:
{
“model”: “deepseek-v4-pro”,
“baseURL”: “http://your-server-ip:3000/v1”,
“apiKey”: “sk-your_newapi_token”
}


六、踩坑记录
坑 1:DeepSeek-V4 模型名称错误
问题:添加渠道时,模型名称填写错误,导致调用失败。
错误信息:
Error: Model deepseek-v4 not found

解决方案:
DeepSeek-V4 的正确模型名称是 deepseek-v4-pro(不是 deepseek-v4)
在 NewAPI 的"渠道"配置中,"自定义模型"和"模型列表"要保持一致
坑 2:令牌额度用尽
问题:调用接口时返回 402 错误。
错误信息:
{
“error”: {
“message”: “额度已用尽”,
“type”: “insufficient_quota”
}
}

解决方案:
进入"令牌"页面,编辑对应令牌
增加"剩余额度"(NewAPI 的额度是虚拟的,用于多租户管理)
或者设置"无限制"(不推荐生产环境)
坑 3:跨域问题(CORS)
问题:前端直接调用 NewAPI 接口时,浏览器报 CORS 错误。
解决方案:
在 NewAPI 配置中启用 CORS:

在 .env 文件中添加

CORS_ALLOW_ORIGINS=*

或者更安全的配置:
CORS_ALLOW_ORIGINS=https://your-frontend-domain.com

坑 4:数据库连接失败
问题:Docker 启动后,NewAPI 无法连接 MySQL。
错误信息:
Error 1045 (28000): Access denied for user ‘root’@‘localhost’

解决方案:

  1. 检查 .env 中的 SQL_DSN 配置
  2. 确保 MySQL 容器已启动:docker-compose up -d mysql
  3. 检查 MySQL root 密码是否正确
  4. 手动测试数据库连接:
    docker exec -it new-api-mysql-1 mysql -uroot -p

七、进阶配置
7.1 配置负载均衡
如果有多个 DeepSeek API Key,可以配置负载均衡:

  1. 在"渠道"页面,添加多个 DeepSeek 渠道
  2. 设置相同的优先级
  3. NewAPI 会自动轮询调用
    7.2 配置模型映射
    如果想用 OpenAI 的模型名称调用 DeepSeek,可以配置模型映射:
    模型映射:
    gpt-4: deepseek-v4-pro
    gpt-3.5-turbo: deepseek-chat

这样,代码中调用 gpt-4,实际会使用 deepseek-v4-pro。
7.3 配置日志记录
在 .env 中启用详细日志:
LOG_LEVEL=debug
LOG_SQL=true # 记录 SQL 查询(调试用)


八、安全建议
⚠️ 重要:自建网关涉及 API Key 和敏感数据,务必注意安全。
8.1 使用 HTTPS
不要直接用 HTTP 暴露接口,建议:

  1. 使用 Nginx 反向代理
  2. 配置 SSL 证书(可以用 Let’s Encrypt 免费证书)
    示例 Nginx 配置:
    server {
    listen 443 ssl;
    server_name api.your-domain.com;
    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;
    location / {
    proxy_pass http://localhost:3000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    }
    }

8.2 设置访问白名单
在 Nginx 层面限制访问 IP:
allow 1.2.3.4; # 你的服务器 IP
allow 5.6.7.8; # 你的办公网络 IP
deny all;

8.3 定期备份
备份数据库和配置文件:

备份 MySQL

docker exec new-api-mysql-1 mysqldump -uroot -p newapi > backup_$(date +%Y%m%d).sql

备份配置文件

tar -czf config_backup_$(date +%Y%m%d).tar.gz .env docker-compose.yml


九、总结
通过本文的步骤,我们完成了:

  1. ✅ 部署 NewAPI 代理网关
  2. ✅ 接入 DeepSeek-V4 模型
  3. ✅ 测试接口调用
  4. ✅ 解决常见踩坑问题
  5. ✅ 配置安全加固
    关键要点:
    NewAPI 是管理多模型 API 的利器,特别适合需要统一接口格式的场景
    DeepSeek-V4 的模型名称是 deepseek-v4-pro,不要写错
    生产环境务必配置 HTTPS 和访问限制
    定期备份配置和数据库
    延伸思考:
    除了 DeepSeek,NewAPI 还支持 Claude、Gemini、文心一言等主流模型
    可以结合 Prometheus + Grafana 做 Token 消耗监控
    多租户场景下,可以用 NewAPI 做内部 AI 能力的统一出口

如果对你有帮助,欢迎点赞收藏 👍
有问题请在评论区留言,我会认真回复 ⬇️

参考资料
NewAPI 官方文档
DeepSeek 开放平台
OpenAI API 格式说明

作者:Daniel Luo
发布时间:2026-07-03
标签:#NewAPI #DeepSeek-V4 #LLM #自托管 #AI工具

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐