文章摘要
# 在你的服务器上部署 new-api 中转站 随着大模型 API 的普及,如何统一管理多家厂商的密钥、控制用量与计费,成了个人开发者和小团队绕不开的问题。new-api 正是为此而生的开源项目——它兼容 OpenAI 格式,支持多渠道负载均衡、令牌分发与额度统计,一台服务器即可轻松承载。 ## 一、准备环境 需要一台可访问外网的 Linux 服务器,并已安装 Docker。若无,可用官方脚本一键安装: ```bash curl -fsSL https://get.docker.com | sh ``` ## 二、一键启动容器 new-api 提供了官方镜像,使用数据卷持久化配置即可: ```bash docker run --name new-api -d --restart always \ -p 3000:3000 \ -e TZ=Asia/Shanghai \ -v /opt/new-api:/data \ calciumion/new-api:latest ``` 启动后访问 `http://你的服务器IP:3000`,首次进入需注册管理员账号。{tip text="安全提示" content="建议立即修改默认端口并通过 Nginx 反向代理绑定域名,同时开启 HTTPS。" position="top" theme="warning"}{/tip} ## 三、配置渠道与令牌 登录后台后按以下顺序操作: 1. **渠道**:填入上游服务商的 Base URL 与 API Key,可添加多个渠道并设置权重,实现故障转移。 2. **令牌**:为不同用途创建独立令牌,设置额度上限与过期时间。 3. **模型**:按需开启或禁用模型,避免调用未授权接口。 :::folding 查看核心调用示例 配置完成后,任何兼容 OpenAI 的客户端只需替换地址: ```bash curl https://your-domain.com/v1/chat/completions \ -H "Authorization: Bearer sk-你的令牌" \ -H "Content-Type: application/json" \ -d '{"model":"gpt-4o-mini","messages":[{"role":"user","content":"hi"}]}' ``` ::: ## 四、几点实践建议 - **反向代理**:用 Nginx 转发并启用 gzip,降低延迟。 - **数据备份**:`/opt/new-api` 目录含数据库,定期打包备份。 - **限流防护**:在网关层配合限速规则,防止令牌被滥用。 至此,一个可用的 API 中转站就搭建完成了,接下来只需按需扩展渠道即可。 {btn url=https://github.com/Calcium-Ion/new-api text=查看项目源码 icon=ri:github-fill color=blue}{/btn}
依旧懒得写,先上yml
因为我服务器安装了1panel,虽然是本地docker-compose.yml部署,但是走的是1p的网络,直接用1p商店的postgresql、redis数据库。
version: '3.4'
services:
new-api:
image: calciumion/new-api:latest
container_name: new-api
restart: always
command: --log-dir /app/logs
ports:
- '5188:3000' # 外部访问端口:docker容器监听端口
volumes:
- ./data:/data
- ./logs:/app/logs
environment:
- SQL_DSN=postgresql://<数据库用户名>:<数据库密码>@<pg容器host>:<pg容器端口>/<数据库名>
- REDIS_CONN_STRING=redis://:<redis容器密码>@<redis容器host>:<redis端口>
- TZ=Asia/Shanghai
- ERROR_LOG_ENABLED=true # 是否启用错误日志记录
- BATCH_UPDATE_ENABLED=true # 是否启用批量更新 batch update enabled
# - STREAMING_TIMEOUT=300 # 流模式无响应超时时间,单位秒,默认120秒,如果出现空补全可以尝试改为更大值 Streaming timeout in seconds, default is 120s. Increase if experiencing empty completions
# - SESSION_SECRET=random_string # 多机部署时设置,必须修改这个随机字符串!! multi-node deployment, set this to a random string!!!!!!!
# - SYNC_FREQUENCY=60 # 缓存同步频率;独立 Redis 部署下也是 Session 最大陈旧窗口
networks:
- 1panel-network
networks:
1panel-network:
external: true
本文是原创文章,采用 CC BY-NC-SA 4.0 协议,完整转载请注明来自 米葱苓
