- 多站点管理:统一管理多个 AI 中转站,支持 NewAPI、Veloera、DoneHub、VOAPI 等主流平台
- 模型变更检测:自动追踪模型列表的增删改,精确记录每次变化
- 余额监控:实时显示账户余额、使用量和剩余额度,支持自定义额度配置
- 请求详情:完整记录 API 响应、错误信息和性能数据,便于问题排查
- 智能签到:支持 Veloera 平台自动签到,每日自动领取奖励
- 灵活模式:可选择仅签到、仅检测或两者都执行
- 状态追踪:实时显示签到结果和获得的额度
- 站点分组:创建分类对站点进行分组管理
- 独立配置:每个分类可单独设置定时检测时间
- 一键检测:支持对整个分类执行批量检测
- 邮件提醒:模型变更时自动发送精美的 HTML 邮件通知
- 聚合通知:定时检测时将多个站点的变更聚合到一封邮件
- 灵活配置:支持单站点通知和批量通知两种模式
- 全局调度:设置统一的检测时间,自动管理所有站点
- 独立配置:单个站点可设置专属的检测时间
- 北京时间:简化的时间设置,无需理解复杂的 cron 表达式
- 智能间隔:批量检测时自动控制站点间检测间隔,避免并发过多
- 精美 UI:基于 Ant Design 的现代化中文界面
- 状态保持:浏览详情后返回保持滚动位置和分类展开状态
- 全文搜索:支持按站点名称、链接或模型 ID 快速搜索
- 数据导入导出:支持站点配置的批量导入导出
1. 快速启动(使用默认配置)
docker run -d \
--name api-monitor \
-p 3000:3000 \
-v api-monitor-data:/app/data \
ghcr.io/jwy87/SimpleHub:latest2. 自定义管理员账号(推荐)
docker run -d \
--name api-monitor \
-p 3000:3000 \
-e [email protected] \
-e ADMIN_PASSWORD=your-secure-password \
-v api-monitor-data:/app/data \
ghcr.io/jwy87/SimpleHub:latest3. 访问应用
打开浏览器访问 http://localhost:3000
默认管理员账号(如未自定义):
- 邮箱:
[email protected] - 密码:
admin123456
⚠️ 重要提示:
- 系统暂不支持修改密码功能,请在首次部署时通过环境变量设置好管理员账号
1. 创建 docker-compose.yml
version: '3.8'
services:
api-monitor:
image: ghcr.io/jwy87/SimpleHub:latest
container_name: api-monitor
ports:
- "3000:3000"
environment:
- ADMIN_EMAIL=${ADMIN_EMAIL:[email protected]}
- ADMIN_PASSWORD=${ADMIN_PASSWORD:-admin123456}
volumes:
- api-monitor-data:/app/data
restart: unless-stopped
volumes:
api-monitor-data:2. 启动服务
# 使用默认配置
docker-compose up -d
# 或自定义管理员账号
[email protected] \
ADMIN_PASSWORD=your-secure-password \
docker-compose up -d环境要求
- Node.js 18+
- Git
部署步骤
# 1. 克隆项目
git clone https://github.com/jwy87/SimpleHub.git
cd SimpleHub
# 2. 配置环境变量(复制配置模板到 server 目录)
cp .env.example server/.env
# 然后编辑 server/.env 文件,根据需要修改管理员账号等配置
# 3. 安装后端依赖
cd server
npm install
npx prisma generate
cd ..
# 4. 构建并启动
# 构建前端
cd web
npm install
npm run build
cd ..
# 将前端文件复制到server目录
mkdir -p server/web
cp -r web/dist server/web/
# 启动服务
cd server
npm start访问应用
打开浏览器访问 http://localhost:3000 或 http://your-server-ip:3000
环境变量说明
项目根目录下的 .env.example 文件包含了所有可配置的环境变量:
| 环境变量 | 说明 | 是否必需 | 默认值 |
|---|---|---|---|
DATABASE_URL |
数据库文件路径 | 必需 | file:./data/db.sqlite |
ADMIN_EMAIL |
管理员邮箱 | 可选 | [email protected] |
ADMIN_PASSWORD |
管理员密码 | 可选 | admin123456 |
PORT |
服务端口 | 可选 | 3000 |
💡 提示:建议在生产环境中修改管理员账号和密码
-
点击右上角「添加站点」按钮
-
填写基本信息:
- 站点名称:自定义名称,便于识别
- 接口地址:API 的 Base URL(如
https://api.example.com) - API 类型:选择对应的平台类型
- API 密钥:系统访问令牌
- 用户 ID:NewAPI 和 Veloera 类型需要填写
-
可选配置:
- 定时检测:设置每日自动检测时间
- 分类:将站点归类到指定分类
- 签到配置:Veloera 类型可启用自动签到
- 自定义余额:配置自定义余额查询接口
- 编辑 Veloera 类型的站点
- 启用「自动签到」开关
- 选择检测模式:
- 两者都检测(推荐):同时执行模型检测和签到
- 仅检测模型:只检测模型列表
- 仅执行签到:只执行签到
- 签到状态说明:
- ✅ 绿色勾号:签到成功
- ✖ 红色叉号:签到失败
- ● 橙色圆点:已启用但暂无记录
- ● 灰色圆点:未启用
- 点击右上角「邮件通知」按钮
- 填写 Resend API Key
- 填写收件邮箱(支持多个,用逗号分隔)
- 保存后自动生效
💡 提示:Resend 免费版每月可发送 3,000 封邮件,足够个人使用
全局配置:
- 点击右上角「定时检测」按钮
- 设置每日检测时间(北京时间)
- 设置站点间检测间隔(建议 10-30 秒)
- 启用后所有站点将按此配置执行
单站点配置:
- 在站点列表点击「设置时间」图标
- 设置该站点的独立检测时间
- 单独配置的站点会独立调度
- 点击「分类管理」按钮
- 创建新分类或编辑现有分类
- 可为每个分类设置独立的定时检测
- 支持对分类进行「一键检测」
| 类型 | 说明 | 特殊功能 |
|---|---|---|
| NewAPI | New API 中转站 | 自动获取用户余额 |
| Veloera | Veloera 中转站 | ✅ 支持自动签到 + 余额监控 |
| DoneHub | DoneHub 中转站 | 自动获取用户余额 |
| VOAPI | VOAPI 中转站 | 需配置 JWT Token 获取余额 |
| 其他 | OpenAI 标准或自定义 | 支持自定义 Billing 配置 |
为什么显示"获取失败"或"站点不存在"?
这通常是由以下原因导致的:
-
网站防护拦截(最常见)
- 部分中转站启用了 Cloudflare 或其他 WAF 防护
- 防护系统可能会拦截来自服务器的请求
- 解决方案:
- 联系站点管理员将监控服务器 IP 加入白名单
- 或使用浏览器扩展辅助添加站点(扩展请求不会被拦截)
-
API 配置错误
- 检查 API 地址是否正确(需包含完整的 Base URL)
- 检查 API 密钥是否有效
- NewAPI/Veloera 类型需要填写正确的用户 ID
-
网络问题
- 确认服务器能够访问目标站点
- 检查是否有防火墙限制
-
站点维护
- 目标站点可能正在维护或暂时不可用
- 可以稍后重试
如何查看详细的错误信息?
- 在站点列表点击「请求详情」按钮(🐛 图标)
- 查看完整的请求和响应信息
- 检查错误消息和状态码
- 根据错误信息调整配置
定时检测不工作怎么办?
- 检查是否启用了全局定时配置或单站点配置
- 确认时间设置是否正确(使用北京时间)
- 查看后端日志确认定时任务是否正常运行
- 注意:全局配置的覆盖模式会忽略单站点配置
为什么只有 Veloera 支持签到?
目前仅Veloera支持签到功能。
如果您使用的平台有签到接口,欢迎提交 Issue 或 PR 添加支持。
签到失败怎么办?
- 确认已正确填写用户 ID
- 检查 API 密钥是否有效
- 查看「请求详情」中的错误信息
- 确认站点的签到接口是否正常
如何获取 Resend API Key?
- 访问 resend.com 并注册账号
- 进入 Dashboard,创建新的 API Key
- 复制 API Key 并粘贴到系统的邮件配置中
- 免费版每月可发送 3,000 封邮件
为什么没有收到邮件通知?
- 检查邮件配置是否正确
- 确认收件邮箱地址无误
- 检查垃圾邮件文件夹
- 确认模型确实发生了变更(首次检测不会发送通知)
- 查看后端日志确认邮件是否发送成功
如何备份数据?
使用 Docker 部署时,数据存储在 /app/data 目录。
# 备份数据
docker run --rm \
-v api-monitor-data:/data \
-v $(pwd):/backup \
busybox tar czf /backup/api-monitor-backup.tar.gz /data
# 恢复数据
docker run --rm \
-v api-monitor-data:/data \
-v $(pwd):/backup \
busybox tar xzf /backup/api-monitor-backup.tar.gz -C /如何导入导出站点配置?
- 导出:点击顶部菜单的「导出站点」按钮,下载 JSON 文件
- 导入:点击「导入站点」按钮,选择之前导出的 JSON 文件
- 导入时会自动匹配分类名称,未匹配的站点将归入「未分类」
忘记管理员密码怎么办?
由于系统暂不支持修改密码功能,如果忘记密码,需要:
- 停止并删除容器
- 删除数据卷(会清空所有数据)
- 使用新的管理员账号重新部署
# 停止并删除容器
docker stop api-monitor && docker rm api-monitor
# 删除数据卷
docker volume rm api-monitor-data
# 重新部署
docker run -d \
--name api-monitor \
-p 3000:3000 \
-e [email protected] \
-e ADMIN_PASSWORD=new-password \
-v api-monitor-data:/app/data \
ghcr.io/jwy87/SimpleHub:latest建议:部署前请妥善保管管理员账号密码
点击展开开发模式指南
# 1. 安装依赖
cd server && npm install
cd ../web && npm install
# 2. 初始化数据库
cd ../server && npx prisma generate
# 3. 启动后端(端口 3000)
npm run dev
# 4. 新开终端,启动前端(端口 5173)
cd web && npm run dev访问 http://localhost:5173 即可开始开发
SimpleHub/
├── server/ # 后端服务
│ ├── src/
│ │ ├── server.js # Fastify 服务器
│ │ ├── auth.js # JWT 认证
│ │ ├── routes.js # API 路由
│ │ ├── run.js # 模型检测核心逻辑
│ │ ├── checkin.js # 签到功能模块
│ │ ├── scheduler.js # 定时任务调度
│ │ ├── notifier.js # 邮件通知模块
│ │ ├── crypto.js # 加密服务
│ │ ├── db.js # 数据库客户端
│ │ └── config.js # 配置加载
│ ├── prisma/
│ │ └── schema.prisma # 数据库模型
│ └── package.json
├── web/ # 前端应用
│ ├── src/
│ │ ├── pages/ # 页面组件
│ │ ├── main.jsx # 应用入口
│ │ └── index.css # 全局样式
│ └── package.json
├── browser-extension/ # 浏览器扩展(辅助工具)
├── Dockerfile # Docker 镜像构建
├── docker-compose.yml # Docker Compose 配置
└── README.md
对于「其他(OpenAI 标准)」类型的站点:
- 展开「自定义用量查询配置」
- 填写配置:
- 用量查询 URL:余额查询接口地址
- 认证方式:Token 或 Cookie
- 认证值:对应的认证信息
- JSON 字段映射:指定响应中的余额和使用量字段名
对于无限额度的站点,勾选「无限余额」选项,系统将:
- 跳过余额检测
- 显示特殊的金色「无限额」标识
勾选「排除一键检测」后:
- 该站点不会参与「一键检测」操作
- 但仍会执行定时检测
欢迎提交 Issue 和 Pull Request!
- 暂无开发计划
MIT License
特别说明:本项目全程由 AI 开发完成 😜
作者表示:我什么都不会(真的),有问题别问我(认真的)
如遇 Bug 或需要新功能,请提交 Issue,让 AI 来解决 🤣