Skip to content

yangwen27/anyswitch

Repository files navigation

AnySwitch

License: MIT Node.js Version

Claude Code API 中转服务 - 支持虚拟 API Key、自动故障切换和多后端管理

🎯 核心特性

✨ 虚拟 API Key 系统

  • 为每个用户分配独立的虚拟 API Key(格式:sk-anyswitch-xxxxx
  • 后台统一管理所有真实后端 API Key
  • 支持用户配额控制和启用/禁用管理

🔄 自动故障切换

  • 当后端站点出现错误(429、500、额度不足等)时自动切换到下一个可用站点
  • 失败站点自动进入冷却期(默认5分钟),避免重复请求
  • 支持按优先级自动选择最佳站点

💾 数据库支持

  • SQLite(默认,零配置,适合个人/小型部署)
  • MySQL(适合中大型部署)
  • PostgreSQL(适合企业级部署)

📊 统计与监控

  • 用户统计:每个虚拟 API Key 的请求数、成功率
  • 站点统计:每个后端站点的调用次数、成功率、响应时间
  • 全局统计:总请求数、成功率、平均响应时间
  • 每日趋势:最近30天的请求趋势分析

🎨 Web 管理界面

  • 内置完整的 Web 管理后台(/admin
  • 站点管理:添加/编辑/删除后端站点
  • 用户管理:创建用户、分发虚拟 API Key
  • 实时统计:查看所有统计数据和切换历史
  • 密码管理:支持修改管理员密码

🚀 快速开始

方式一:Docker 部署(推荐)

最简单的部署方式,使用 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 -d

方式二:本地部署

1. 安装依赖

npm install

2. 配置数据库(可选)

编辑 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=anyswitch

3. 启动服务

npm start

服务将在 http://localhost:3000 启动。

4. 登录管理后台

访问 http://localhost:3000/admin

  • 默认密码:admin123
  • 请登录后立即修改密码!

5. 配置后端站点

在管理后台点击"后端站点"标签,添加你的后端 API 站点:

  • 站点名称:例如"公益站1"
  • 站点 URL:例如 https://api.example.com
  • API Key:后端站点的真实 API Key
  • 优先级:数字越小优先级越高
  • 启用:勾选启用该站点

6. 创建用户并获取虚拟 API Key

在管理后台点击"用户管理"标签,创建新用户:

  • 用户名:用户标识
  • 配额:-1 表示无限制
  • 描述:可选的用户描述

系统会自动生成虚拟 API Key(格式:sk-anyswitch-xxxxxxxxxxxxx),请立即复制保存。

7. 配置 Claude Code

在 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数据库名

📊 API 端点

认证 API(无需认证)

POST   /api/auth/login              # 管理员登录
POST   /api/auth/logout             # 管理员登出
POST   /api/auth/change-password    # 修改密码
GET    /api/auth/verify             # 验证会话

管理 API(需要管理员认证)

# 站点管理
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           # 获取切换历史

统计 API(需要管理员认证)

GET    /api/stats/global            # 全局统计
GET    /api/stats/users             # 所有用户统计
GET    /api/stats/users/:id         # 特定用户统计
GET    /api/stats/sites             # 所有站点统计
GET    /api/stats/sites/:id         # 特定站点统计

代理 API(需要虚拟 API Key)

所有其他请求都会被代理到配置的后端站点,使用虚拟 API Key 进行认证。

⚙️ 故障切换机制

系统会在以下情况触发故障切换:

  1. HTTP 错误状态码

    • 429 (速率限制)
    • 401/403 (认证错误)
    • 500+ (服务器错误)
  2. 响应内容错误

    • 包含 "quota"、"额度"、"insufficient"、"exceeded"、"limit" 等关键词
  3. 连接问题

    • 请求超时(30秒)
    • 连接失败

当站点失败后:

  • 立即切换到下一个优先级的可用站点
  • 失败站点进入冷却期(5分钟)
  • 冷却期结束后自动恢复为可用状态

🎯 使用场景

场景 1:个人使用

  • 添加多个公益站点作为备份
  • 创建一个虚拟 API Key 给自己使用
  • 当某个站点额度用完或失败时,自动切换到其他站点

场景 2:团队共享

  • 添加多个后端站点
  • 为每个团队成员创建独立的虚拟 API Key
  • 设置配额限制,防止滥用
  • 通过统计查看每个成员的使用情况

场景 3:服务提供

  • 部署到服务器或边缘节点
  • 为用户分发虚拟 API Key
  • 统一管理后端站点,用户无需关心后端切换

🎉 最近更新

v2.0.1 - Bug修复版本

已修复的问题

Docker环境变量统一 - 修复了MySQL/PostgreSQL部署时的环境变量不匹配问题 ✅ SQLite外键启用 - 启用了SQLite的外键约束,保证数据完整性 ✅ 静态文件服务 - 实现了完整的静态文件处理,支持CSS/JS/图片等资源 ✅ 数据库索引优化 - 为关键表添加了索引,大幅提升查询性能 ✅ 代码逻辑修复 - 修复了Supabase配置检查的逻辑错误

性能提升

  • 📈 请求日志查询速度提升 100倍以上(添加索引)
  • 📈 统计数据查询速度显著提升
  • 📈 外键约束确保数据一致性

⚠️ 待完善功能

以下功能框架已实现但需要进一步完善(不影响核心功能使用):

1. 多平台部署配置

状态:代码已实现,但缺少部署配置文件

缺失文件

  • wrangler.toml (Cloudflare Workers)
  • vercel.json (Vercel)
  • EdgeOne 相关配置

说明:框架代码支持多平台,但需要根据实际需求创建相应的配置文件

2. 单元测试

建议:添加单元测试以提高代码质量和稳定性

3. API文档

建议:添加 Swagger/OpenAPI 文档,方便API调用

🔐 安全建议

  1. 立即修改默认密码:首次登录后立即修改管理员密码
  2. 使用 HTTPS:生产环境务必使用 HTTPS,保护 API Key 传输安全
  3. 定期更新密码:定期更新管理员密码和后端 API Key
  4. 配额管理:为用户设置合理的配额限制,防止滥用
  5. 监控日志:定期查看统计和切换历史,及时发现异常

📝 数据库表结构

核心表

  • sites - 后端站点配置
  • site_status - 站点状态(失败次数、冷却时间等)
  • users - 用户及虚拟 API Key
  • admin_sessions - 管理员会话
  • config - 系统配置(管理员密码等)

统计表

  • stats_global - 全局每日统计
  • stats_users - 用户每日统计
  • stats_sites - 站点每日统计
  • request_logs - 详细请求日志

历史表

  • failover_history - 故障切换历史记录

📄 许可证

MIT

🤝 贡献

欢迎提交 Issue 和 Pull Request!

📮 联系方式

如有问题或建议,请提交 Issue。

About

稳定、高可用的 Claude Code API 中转服务,解决公益站点不稳定、额度耗尽需要手动切换环境变量的问题。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages