Files
gpt2api-node/DEPLOYMENT.md

372 lines
8.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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