【实战】用 NewAPI 自建 LLM 代理网关,接入 DeepSeek-V4
【实战】用 NewAPI 自建 LLM 代理网关,接入 DeepSeek-V4
本文记录从零部署 NewAPI 并接入 DeepSeek-V4 模型的完整过程,包含环境配置、部署步骤、接口调用及踩坑解决方案。
一、背景:为什么需要自建 LLM 代理网关?
在使用 AI 工具的过程中,我遇到了几个痛点:
- API 密钥管理混乱:多个项目、多个模型需要不同的 API Key,难以统一管理
- 成本控制困难:直接用官方 API,无法精确统计各项目的 token 消耗
- 模型切换成本高:不同厂商的 API 格式不统一,切换模型需要改代码
- 隐私顾虑:敏感数据直接发给第三方,存在数据泄露风险
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
- 访问 DeepSeek 开放平台
- 注册账号并登录
- 进入"API Keys"页面
- 创建新的 API Key(妥善保存,只显示一次)
4.2 在 NewAPI 中添加渠道 - 登录 NewAPI 管理后台(http://your-server-ip:3000)
- 进入"渠道" → “添加渠道”
- 填写配置:
渠道类型: DeepSeek
渠道名称: DeepSeek-V4
API Key: sk-xxxxxxxxxxxxxxxxxxxx
自定义模型: deepseek-v4-pro
模型列表:
- deepseek-v4-pro
- 点击"测试"按钮,确认连接正常
- 保存配置
4.3 获取 NewAPI 的访问令牌 - 进入"令牌"页面
- 点击"添加令牌"
- 设置令牌名称和额度限制
- 复制生成的令牌(格式: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’
解决方案:
- 检查 .env 中的 SQL_DSN 配置
- 确保 MySQL 容器已启动:docker-compose up -d mysql
- 检查 MySQL root 密码是否正确
- 手动测试数据库连接:
docker exec -it new-api-mysql-1 mysql -uroot -p
七、进阶配置
7.1 配置负载均衡
如果有多个 DeepSeek API Key,可以配置负载均衡:
- 在"渠道"页面,添加多个 DeepSeek 渠道
- 设置相同的优先级
- 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 暴露接口,建议:
- 使用 Nginx 反向代理
- 配置 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
九、总结
通过本文的步骤,我们完成了:
- ✅ 部署 NewAPI 代理网关
- ✅ 接入 DeepSeek-V4 模型
- ✅ 测试接口调用
- ✅ 解决常见踩坑问题
- ✅ 配置安全加固
关键要点:
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工具
更多推荐



所有评论(0)