feat: 添加批量删除、最近活动、界面优化等功能

This commit is contained in:
lulistart
2026-02-18 02:50:40 +08:00
parent 5e3cbb0eca
commit d5288035d4
31 changed files with 5899 additions and 139 deletions

371
DEPLOYMENT.md Normal file
View File

@@ -0,0 +1,371 @@
# GPT2API Node - 部署文档
## 🎉 系统功能
### 核心功能
- ✅ OpenAI Codex 反向代理服务
- ✅ 完整的 Web 管理后台
- ✅ 多账号管理和批量操作
- ✅ 自动 Token 刷新机制
- ✅ 负载均衡(轮询/随机/最少使用)
- ✅ API Key 管理和认证
- ✅ 请求统计和数据分析
- ✅ 实时活动记录
### 管理后台功能
#### 1. 仪表盘
- 系统概览和实时统计
- API Keys 数量
- Token 账号数量
- 今日请求数和成功率
- 最近活动记录API请求、账号添加等
#### 2. API Keys 管理
- 创建和管理 API Keys
- 查看使用统计
- 启用/禁用 API Key
- 删除 API Key
#### 3. 账号管理
- **批量导入 Token**(支持 JSON 文件和多文件)
- **批量删除账号**(支持多选)
- 手动添加账号
- 查看账号额度和使用情况
- 刷新账号额度(单个/全部)
- 负载均衡策略配置
- 账号总数实时显示
#### 4. 数据分析
- **请求量趋势图表**(基于真实数据)
- 模型使用分布
- 账号详细统计(带滚动条)
- API 请求日志(带滚动条)
- 支持时间范围筛选24小时/7天/30天
#### 5. 系统设置
- 修改管理员密码
- 负载均衡策略设置
- GitHub 项目链接
## 🚀 快速部署
### 1. 环境要求
- Node.js 16+
- npm 或 yarn
### 2. 安装步骤
```bash
# 克隆项目
git clone https://github.com/lulistart/gpt2api-node.git
cd gpt2api-node
# 安装依赖
npm install
# 初始化数据库
npm run init-db
# 启动服务
npm start
```
### 3. 访问管理后台
打开浏览器访问:`http://localhost:3000/admin`
默认管理员账户:
- 用户名:`admin`
- 密码:`admin123`
**重要**:首次登录后请立即修改密码!
## 📁 项目结构
```
gpt2api-node/
├── src/
│ ├── config/
│ │ └── database.js # 数据库配置和初始化
│ ├── middleware/
│ │ └── auth.js # 认证中间件
│ ├── models/
│ │ └── index.js # 数据模型User、ApiKey、Token、ApiLog
│ ├── routes/
│ │ ├── auth.js # 认证路由(登录、登出、修改密码)
│ │ ├── apiKeys.js # API Keys 管理路由
│ │ ├── tokens.js # Tokens 管理路由(含批量删除)
│ │ ├── stats.js # 统计路由(含最近活动)
│ │ └── settings.js # 设置路由
│ ├── scripts/
│ │ └── initDatabase.js # 数据库初始化脚本
│ ├── index.js # 主入口文件
│ ├── tokenManager.js # Token 管理模块
│ └── proxyHandler.js # 代理处理模块
├── public/
│ └── admin/
│ ├── login.html # 登录页面
│ ├── index.html # 管理后台主页
│ └── js/
│ └── admin.js # 管理后台脚本
├── database/
│ └── app.db # SQLite 数据库
├── models.json # 模型配置
├── package.json
├── README.md
└── DEPLOYMENT.md
```
## 🔧 配置说明
### 环境变量
创建 `.env` 文件:
```env
# 服务端口
PORT=3000
# Session 密钥(生产环境必须修改)
SESSION_SECRET=your-random-secret-key-change-in-production
# 负载均衡策略round-robin轮询、random随机、least-used最少使用
LOAD_BALANCE_STRATEGY=round-robin
# 模型配置文件
MODELS_FILE=./models.json
# 数据库路径
DATABASE_PATH=./database/app.db
```
### 负载均衡策略
支持三种策略:
1. **round-robin轮询**:按顺序依次使用每个账号,默认策略
2. **random随机**:随机选择一个可用账号
3. **least-used最少使用**:选择请求次数最少的账号
可通过环境变量或管理后台配置。
## 📊 数据库结构
### users 表
- 管理员账户信息
- 字段id, username, password_hash, created_at
### api_keys 表
- API 密钥管理
- 字段id, name, key, is_active, usage_count, last_used_at, created_at
### tokens 表
- OpenAI Token 账户
- 字段id, name, email, account_id, access_token, refresh_token, id_token, expired_at, last_refresh_at, is_active, total_requests, success_requests, failed_requests, quota_total, quota_used, quota_remaining, created_at
### api_logs 表
- API 请求日志
- 字段id, api_key_id, token_id, model, endpoint, status_code, error_message, created_at
## 🔐 安全建议
### 生产环境配置
1. **修改默认密码**
- 首次登录后立即修改管理员密码
- 使用强密码至少8位包含大小写字母、数字、特殊字符
2. **设置环境变量**
```bash
SESSION_SECRET=$(openssl rand -base64 32)
```
3. **启用 HTTPS**
- 使用 Nginx 或 Caddy 作为反向代理
- 配置 SSL 证书
- 设置 `cookie.secure = true`
4. **防火墙配置**
- 只开放必要的端口
- 限制管理后台访问 IP
5. **定期备份**
- 备份 `database/app.db` 数据库文件
- 备份环境变量配置
### Nginx 反向代理示例
```nginx
server {
listen 80;
server_name your-domain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name your-domain.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
```
## 🎯 使用指南
### 1. 创建 API Key
1. 登录管理后台
2. 进入 **API Keys** 页面
3. 点击 **创建 API Key**
4. 输入名称(可选)
5. 复制生成的 API Key只显示一次
### 2. 导入 Token 账号
#### 方式一:批量导入 JSON
1. 准备 JSON 文件:
```json
[
{
"access_token": "your_access_token",
"refresh_token": "your_refresh_token",
"id_token": "your_id_token",
"account_id": "account_id",
"email": "email@example.com",
"name": "账号名称"
}
]
```
2. 进入 **账号管理** 页面
3. 点击 **导入 JSON**
4. 选择文件或粘贴 JSON 内容
5. 点击 **预览导入**
6. 确认后点击 **确认导入**
#### 方式二:手动添加
1. 进入 **账号管理** 页面
2. 点击 **手动添加**
3. 填写 Access Token 和 Refresh Token
4. 点击 **添加**
### 3. 批量删除账号
1. 进入 **账号管理** 页面
2. 勾选要删除的账号
3. 点击 **删除选中** 按钮
4. 确认删除
### 4. 使用 API
```bash
curl http://localhost:3000/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.3-codex",
"messages": [
{"role": "user", "content": "Hello!"}
]
}'
```
## 🐛 故障排除
### 无法访问管理后台
1. 检查服务是否启动:`npm start`
2. 检查端口是否被占用:`netstat -ano | findstr :3000`
3. 检查防火墙设置
### 数据库初始化失败
```bash
# 删除旧数据库
rm database/app.db
# 重新初始化
npm run init-db
```
### Token 刷新失败
1. 检查网络连接
2. 确认 refresh_token 是否有效
3. 重新导入新的 token
### API 请求失败
1. 检查 API Key 是否正确
2. 确保有可用的 Token 账号
3. 查看管理后台的请求日志
4. 检查账号是否被禁用
### 请求趋势图表显示异常
- 图表数据基于 `api_logs` 表的真实请求记录
- 如果没有请求记录,图表会显示为空
- 发送几次 API 请求后刷新页面查看
## 📝 维护建议
1. **定期备份数据库**
```bash
cp database/app.db database/app.db.backup.$(date +%Y%m%d)
```
2. **监控日志**
- 查看终端输出
- 检查请求日志
3. **更新依赖**
```bash
npm update
```
4. **清理旧日志**
- 定期清理 `api_logs` 表中的旧记录
## 🔄 更新日志
### v2.0.0 (2026-02-17)
- ✅ 添加批量删除账号功能
- ✅ 添加仪表盘最近活动记录
- ✅ 添加 GitHub 项目链接
- ✅ 移除前台页面,根路径重定向到管理后台
- ✅ 修复模型列表(删除不存在的 gpt-5.3-codex-spark
- ✅ 优化终端日志输出
- ✅ 账号管理页面显示账号总数
- ✅ 账号详细统计和请求日志添加滚动条
- ✅ 修复请求趋势图表,使用真实数据
### v1.0.0
- ✅ 基础管理系统
- ✅ API Keys 管理
- ✅ Tokens 管理
- ✅ 数据统计
## 📞 支持
- GitHub: https://github.com/lulistart/gpt2api-node
- Issues: https://github.com/lulistart/gpt2api-node/issues
## 📄 许可证
MIT License