【生产级落地】基于 Docker + NewAPI + Cloudflare Workers 搭建私有高可用 AI 智能路由网关(附完整 compose.yml)
-
作为团队技术负责人,面对前端多款工具(Cherry Studio、Cursor、NextChat)分散调用官方 API 时,经常面临三大痛点:
- 单点限流(429 Too Many Requests):高峰期一个员工跑大任务,全团队的 API Key 一起被限;
- Key 暴露风险:客户端直接填写官方 Key,离职或设备外借存在泄密隐患;
- 账单无法精细化分摊与审计。
本文分享一套经过企业生产环境验证的私有化 AI 智能路由网关架构,实现多渠道负载均衡、故障自动秒级降级与细粒度配额管理。
1. 架构拓扑设计
[本地客户端: Cursor / Cherry Studio] │ ▼ (HTTPS / 边缘防护) [Cloudflare Workers 反代鉴权] │ ▼ (内网专线 / 反代域名) [自建 VPS: NewAPI 网关服务] ├── Redis 缓存层 (Token 流式分发 + 会话保持) └── MySQL 数据库 (渠道权重 + 用户账单消费记录) │ ┌────────┴────────┐ ▼ ▼ [主力渠道: 官方 API] [兜底渠道: 9AIB 便宜官转 / Bedrock] (权重 80%, 超时重试) (权重 20%, 触发 429 自动无感漂移)
2. 生产级
docker-compose.yml完整配置在 VPS 上创建目录
mkdir -p /opt/newapi && cd /opt/newapi,保存以下文件:version: '3.8' services: new-api: image: calciumion/new-api:latest container_name: new-api restart: always ports: - "3000:3000" volumes: - ./data:/data - ./logs:/app/logs environment: - SQL_DSN=newapi_user:SecurePasswd888@tcp(mysql:3306)/newapi?charset=utf8mb4&parseTime=True&loc=Local - REDIS_CONN_STRING=redis://default:RedisPasswd999@redis:6379/0 - SESSION_SECRET=c2VjdXJlX3Nlc3Npb25fa2V5XzIwMjY= - NODE_TYPE=master - SYNC_FREQUENCY=60 - BATCH_UPDATE_ENABLED=true depends_on: - mysql - redis networks: - newapi-net mysql: image: mysql:8.0 container_name: newapi-mysql restart: always environment: - MYSQL_DATABASE=newapi - MYSQL_USER=newapi_user - MYSQL_PASSWORD=SecurePasswd888 - MYSQL_ROOT_PASSWORD=RootSecurePasswd999 volumes: - ./mysql-data:/var/lib/mysql networks: - newapi-net redis: image: redis:7-alpine container_name: newapi-redis restart: always command: redis-server --requirepass RedisPasswd999 --maxmemory 512mb --maxmemory-policy allkeys-lru volumes: - ./redis-data:/data networks: - newapi-net networks: newapi-net: driver: bridge
3. 高可用配置实战要点
- 设置渠道重试(Channel Retry):
在 NewAPI 后台“设置” -> “通用设置”中,将“失败重试次数”设为 3,并在渠道中配置备用通道。当主力渠道响应超时(>15s)或返回 429/502 时,网关会在同一请求生命周期内自动尝试下一个可用渠道,客户端完全无感; - Model Mapping(模型映射解耦):
前端统一请求标准模型名claude-3-5-sonnet-20241022,后台可灵活映射至 AWS Bedrockanthropic.claude-3-5-sonnet-20241022-v2:0或官方 API,随时根据汇率与成本动态切换; - 开启流式缓冲优化(SSE Chunk Optimization):
利用 Redis 的allkeys-lru策略缓存高频 Prompt 响应,节省多达 30% 重复调用成本!
-
-
@Prompt架构师 哈哈,批量更新(Batch Update)是高并发的关键,不然每次 Token 扣减都直接写 MySQL,磁盘 I/O 很快就会挂掉。配合 Redis 做异步落盘是标准生产解法。
-