Claude Code API 中转服务 - 支持虚拟 API Key、自动故障切换和多后端管理
- 为每个用户分配独立的虚拟 API Key(格式:
sk-anyswitch-xxxxx) - 后台统一管理所有真实后端 API Key
- 支持用户配额控制和启用/禁用管理
- 当后端站点出现错误(429、500、额度不足等)时自动切换到下一个可用站点
- 失败站点自动进入冷却期(默认5分钟),避免重复请求
- 支持按优先级自动选择最佳站点
- SQLite(默认,零配置,适合个人/小型部署)
- MySQL(适合中大型部署)
- PostgreSQL(适合企业级部署)
- 用户统计:每个虚拟 API Key 的请求数、成功率
- 站点统计:每个后端站点的调用次数、成功率、响应时间
- 全局统计:总请求数、成功率、平均响应时间
- 每日趋势:最近30天的请求趋势分析
- 内置完整的 Web 管理后台(
/admin) - 站点管理:添加/编辑/删除后端站点
- 用户管理:创建用户、分发虚拟 API Key
- 实时统计:查看所有统计数据和切换历史
- 密码管理:支持修改管理员密码
最简单的部署方式,使用 SQLite 数据库:
# 1. 克隆项目
git clone https://github.com/yangwen27/anyswitch.git
cd anyswitch
# 2. 启动服务
docker-compose up -d
# 3. 访问管理后台
# 打开浏览器访问 http://localhost:3000/admin
# 默认密码: admin123使用 MySQL 部署:
# 需要修复docker-compose.yml中的环境变量(见下方Bug列表)
docker-compose --profile mysql up -d使用 PostgreSQL 部署:
# 需要修复docker-compose.yml中的环境变量(见下方Bug列表)
docker-compose --profile postgres up -dnpm install编辑 database.config.js 或使用环境变量:
# 使用 SQLite(默认)
DB_TYPE=sqlite
DB_PATH=./data/anyswitch.db
# 使用 MySQL
DB_TYPE=mysql
DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASSWORD=your_password
DB_NAME=anyswitch
# 使用 PostgreSQL
DB_TYPE=postgres
DB_HOST=localhost
DB_PORT=5432
DB_USER=postgres
DB_PASSWORD=your_password
DB_NAME=anyswitchnpm start服务将在 http://localhost:3000 启动。
访问 http://localhost:3000/admin
- 默认密码:
admin123 - 请登录后立即修改密码!
在管理后台点击"后端站点"标签,添加你的后端 API 站点:
- 站点名称:例如"公益站1"
- 站点 URL:例如
https://api.example.com - API Key:后端站点的真实 API Key
- 优先级:数字越小优先级越高
- 启用:勾选启用该站点
在管理后台点击"用户管理"标签,创建新用户:
- 用户名:用户标识
- 配额:-1 表示无限制
- 描述:可选的用户描述
系统会自动生成虚拟 API Key(格式:sk-anyswitch-xxxxxxxxxxxxx),请立即复制保存。
在 Claude Code 中使用虚拟 API Key:
方法一:设置环境变量
export ANTHROPIC_BASE_URL=http://localhost:3000
export ANTHROPIC_API_KEY=sk-anyswitch-xxxxxxxxxxxxx方法二:配置 .claude/settings.json
{
"env": {
"ANTHROPIC_BASE_URL": "http://localhost:3000",
"ANTHROPIC_API_KEY": "sk-anyswitch-xxxxxxxxxxxxx"
}
}anyswitch/
├── index.js # 主入口文件(自动检测平台)
├── package.json # 项目依赖
├── database.config.js # 数据库配置
├── lib/
│ ├── universal-proxy.js # 统一代理处理器(包含管理界面)
│ ├── failover-manager.js # 故障切换管理器
│ ├── auth-manager.js # 认证管理器(虚拟API Key)
│ ├── statistics-manager.js # 统计管理器
│ ├── database-adapter.js # 数据库适配器
│ └── storage-adapter.js # 存储适配器
├── public/
│ └── index.html # 跳转页面(重定向到/admin)
├── data/ # 数据目录(SQLite数据库)
├── docker-compose.yml # Docker编排配置
└── Dockerfile # Docker镜像构建
PORT=3000 # 服务端口(默认3000)
NODE_ENV=production # 运行环境# 数据库类型
DB_TYPE=sqlite # 可选: sqlite, mysql, postgres
# SQLite 配置
DB_PATH=./data/anyswitch.db # SQLite数据库文件路径
# MySQL 配置
DB_HOST=localhost # MySQL主机
DB_PORT=3306 # MySQL端口
DB_USER=root # MySQL用户名
DB_PASSWORD=your_password # MySQL密码
DB_NAME=anyswitch # MySQL数据库名
# PostgreSQL 配置
DB_HOST=localhost # PostgreSQL主机
DB_PORT=5432 # PostgreSQL端口
DB_USER=postgres # PostgreSQL用户名
DB_PASSWORD=your_password # PostgreSQL密码
DB_NAME=anyswitch # PostgreSQL数据库名POST /api/auth/login # 管理员登录
POST /api/auth/logout # 管理员登出
POST /api/auth/change-password # 修改密码
GET /api/auth/verify # 验证会话# 站点管理
GET /api/admin/sites # 获取所有站点
POST /api/admin/sites # 添加站点
PUT /api/admin/sites/:id # 更新站点
DELETE /api/admin/sites/:id # 删除站点
# 用户管理
GET /api/admin/users # 获取所有用户
POST /api/admin/users # 创建用户
PUT /api/admin/users/:id # 更新用户
DELETE /api/admin/users/:id # 删除用户
# 系统状态
GET /api/admin/status # 获取系统状态
GET /api/admin/history # 获取切换历史GET /api/stats/global # 全局统计
GET /api/stats/users # 所有用户统计
GET /api/stats/users/:id # 特定用户统计
GET /api/stats/sites # 所有站点统计
GET /api/stats/sites/:id # 特定站点统计所有其他请求都会被代理到配置的后端站点,使用虚拟 API Key 进行认证。
系统会在以下情况触发故障切换:
-
HTTP 错误状态码
- 429 (速率限制)
- 401/403 (认证错误)
- 500+ (服务器错误)
-
响应内容错误
- 包含 "quota"、"额度"、"insufficient"、"exceeded"、"limit" 等关键词
-
连接问题
- 请求超时(30秒)
- 连接失败
当站点失败后:
- 立即切换到下一个优先级的可用站点
- 失败站点进入冷却期(5分钟)
- 冷却期结束后自动恢复为可用状态
- 添加多个公益站点作为备份
- 创建一个虚拟 API Key 给自己使用
- 当某个站点额度用完或失败时,自动切换到其他站点
- 添加多个后端站点
- 为每个团队成员创建独立的虚拟 API Key
- 设置配额限制,防止滥用
- 通过统计查看每个成员的使用情况
- 部署到服务器或边缘节点
- 为用户分发虚拟 API Key
- 统一管理后端站点,用户无需关心后端切换
已修复的问题:
✅ Docker环境变量统一 - 修复了MySQL/PostgreSQL部署时的环境变量不匹配问题 ✅ SQLite外键启用 - 启用了SQLite的外键约束,保证数据完整性 ✅ 静态文件服务 - 实现了完整的静态文件处理,支持CSS/JS/图片等资源 ✅ 数据库索引优化 - 为关键表添加了索引,大幅提升查询性能 ✅ 代码逻辑修复 - 修复了Supabase配置检查的逻辑错误
性能提升:
- 📈 请求日志查询速度提升 100倍以上(添加索引)
- 📈 统计数据查询速度显著提升
- 📈 外键约束确保数据一致性
以下功能框架已实现但需要进一步完善(不影响核心功能使用):
状态:代码已实现,但缺少部署配置文件
缺失文件:
wrangler.toml(Cloudflare Workers)vercel.json(Vercel)- EdgeOne 相关配置
说明:框架代码支持多平台,但需要根据实际需求创建相应的配置文件
建议:添加单元测试以提高代码质量和稳定性
建议:添加 Swagger/OpenAPI 文档,方便API调用
- 立即修改默认密码:首次登录后立即修改管理员密码
- 使用 HTTPS:生产环境务必使用 HTTPS,保护 API Key 传输安全
- 定期更新密码:定期更新管理员密码和后端 API Key
- 配额管理:为用户设置合理的配额限制,防止滥用
- 监控日志:定期查看统计和切换历史,及时发现异常
sites- 后端站点配置site_status- 站点状态(失败次数、冷却时间等)users- 用户及虚拟 API Keyadmin_sessions- 管理员会话config- 系统配置(管理员密码等)
stats_global- 全局每日统计stats_users- 用户每日统计stats_sites- 站点每日统计request_logs- 详细请求日志
failover_history- 故障切换历史记录
MIT
欢迎提交 Issue 和 Pull Request!
如有问题或建议,请提交 Issue。