8.0 KiB
8.0 KiB
GPT2API Node - API 网关后台管理系统架构设计
1. 系统概述
构建一个专业的 API 网关后台管理系统,用于管理 OpenAI Codex 代理服务的用户、API Keys 和 Token 账户。
2. 核心功能模块
2.1 用户认证模块
- 管理员登录/登出
- 密码修改
- Session 管理
- JWT Token 认证
2.2 API Key 管理模块
- 创建 API Key(自动生成)
- 删除 API Key
- 列表展示(包含创建时间、最后使用时间、使用次数)
- API Key 权限控制(可选:限流、配额)
2.3 Token 账户管理模块
- JSON 文件导入(支持 CLIProxyAPI 格式)
- 账户列表展示
- 账户状态监控(Token 过期时间、刷新状态)
- 账户删除
- 自动 Token 刷新
2.4 统计监控模块
- API 调用统计
- 使用量统计
- 错误日志
- 实时状态监控
3. 技术架构
3.1 后端技术栈
- Node.js + Express
- SQLite(轻量级数据库)
- bcrypt(密码加密)
- jsonwebtoken(JWT 认证)
- multer(文件上传)
- express-session(会话管理)
3.2 前端技术栈
- HTML5 + TailwindCSS + DaisyUI
- Vanilla JavaScript(无框架,保持轻量)
- Fetch API(HTTP 请求)
3.3 数据库设计
表结构
users 表(管理员用户)
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT UNIQUE NOT NULL,
password TEXT NOT NULL, -- bcrypt 加密
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
api_keys 表(API 密钥)
CREATE TABLE api_keys (
id INTEGER PRIMARY KEY AUTOINCREMENT,
key TEXT UNIQUE NOT NULL, -- sk-xxx 格式
name TEXT, -- 密钥名称/备注
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
last_used_at DATETIME,
usage_count INTEGER DEFAULT 0,
is_active BOOLEAN DEFAULT 1
);
tokens 表(OpenAI Token 账户)
CREATE TABLE tokens (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT, -- 账户名称/备注
email TEXT,
account_id TEXT,
access_token TEXT NOT NULL,
refresh_token TEXT NOT NULL,
id_token TEXT,
expired_at DATETIME,
last_refresh_at DATETIME,
is_active BOOLEAN DEFAULT 1,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
api_logs 表(API 调用日志)
CREATE TABLE api_logs (
id INTEGER PRIMARY KEY AUTOINCREMENT,
api_key_id INTEGER,
token_id INTEGER,
model TEXT,
endpoint TEXT,
status_code INTEGER,
error_message TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (api_key_id) REFERENCES api_keys(id),
FOREIGN KEY (token_id) REFERENCES tokens(id)
);
4. API 接口设计
4.1 认证接口
POST /admin/login # 管理员登录
POST /admin/logout # 管理员登出
POST /admin/change-password # 修改密码
GET /admin/profile # 获取当前用户信息
4.2 API Key 管理接口
GET /admin/api-keys # 获取 API Key 列表
POST /admin/api-keys # 创建新的 API Key
DELETE /admin/api-keys/:id # 删除 API Key
PATCH /admin/api-keys/:id # 更新 API Key(启用/禁用)
4.3 Token 管理接口
GET /admin/tokens # 获取 Token 列表
POST /admin/tokens/import # 导入 Token JSON 文件
DELETE /admin/tokens/:id # 删除 Token
POST /admin/tokens/:id/refresh # 手动刷新 Token
4.4 统计接口
GET /admin/stats/overview # 总览统计
GET /admin/stats/usage # 使用量统计
GET /admin/logs # 获取日志
4.5 代理接口(需要 API Key 认证)
POST /v1/chat/completions # OpenAI 兼容接口
GET /v1/models # 模型列表
5. 前端界面设计
5.1 布局结构
┌─────────────────────────────────────────┐
│ 顶部导航栏(Logo、用户信息、登出) │
├──────────┬──────────────────────────────┤
│ │ │
│ 左侧 │ │
│ 导航 │ 主内容区域 │
│ 菜单 │ │
│ │ │
│ - 仪表盘│ │
│ - API Keys │
│ - Tokens│ │
│ - 日志 │ │
│ - 设置 │ │
│ │ │
└──────────┴──────────────────────────────┘
5.2 页面列表
- 登录页面 - 管理员登录
- 仪表盘 - 总览统计、快速操作
- API Keys 管理 - 列表、创建、删除
- Tokens 管理 - 列表、导入、删除、刷新
- 日志查看 - API 调用日志、错误日志
- 设置页面 - 密码修改、系统配置
6. 安全设计
6.1 认证机制
- 管理后台使用 JWT Token 认证
- API 代理使用 API Key 认证
- 密码使用 bcrypt 加密存储
6.2 权限控制
- 所有
/admin/*接口需要登录认证 - API Key 验证中间件
- CORS 配置
6.3 安全措施
- 密码强度验证
- 登录失败次数限制
- API Key 格式:
sk-+ 32位随机字符 - Token 自动刷新机制
7. 部署方案
7.1 目录结构
gpt2api-node/
├── src/
│ ├── index.js # 主入口
│ ├── config/
│ │ └── database.js # 数据库配置
│ ├── middleware/
│ │ ├── auth.js # 认证中间件
│ │ └── apiKey.js # API Key 验证
│ ├── models/
│ │ ├── User.js
│ │ ├── ApiKey.js
│ │ └── Token.js
│ ├── routes/
│ │ ├── admin.js # 管理接口
│ │ ├── apiKeys.js
│ │ ├── tokens.js
│ │ └── proxy.js # 代理接口
│ ├── services/
│ │ ├── tokenManager.js # Token 管理服务
│ │ └── proxyHandler.js # 代理处理服务
│ └── utils/
│ ├── crypto.js # 加密工具
│ └── logger.js # 日志工具
├── public/
│ ├── admin/
│ │ ├── index.html # 管理后台
│ │ ├── login.html # 登录页
│ │ ├── css/
│ │ └── js/
│ └── assets/
├── database/
│ └── app.db # SQLite 数据库
├── package.json
└── README.md
7.2 环境变量
PORT=3000
JWT_SECRET=your-secret-key
ADMIN_USERNAME=admin
ADMIN_PASSWORD=admin123
DATABASE_PATH=./database/app.db
8. 实施计划
阶段 1:数据库和认证(核心)
- 创建数据库模型
- 实现用户认证系统
- 创建初始管理员账户
阶段 2:API Key 管理
- API Key 生成和存储
- API Key 验证中间件
- API Key 管理接口
阶段 3:Token 管理
- Token 导入功能
- Token 自动刷新
- Token 管理接口
阶段 4:前端界面
- 登录页面
- 管理后台布局
- 各功能页面实现
阶段 5:统计和日志
- API 调用日志记录
- 统计数据展示
- 日志查询功能
9. 技术难点和解决方案
9.1 多 Token 负载均衡
问题:多个 Token 账户如何分配请求? 方案:
- 轮询策略
- 根据 Token 状态(过期时间、使用次数)智能选择
- 失败自动切换
9.2 Token 自动刷新
问题:Token 过期前自动刷新 方案:
- 定时任务检查即将过期的 Token
- 请求失败时触发刷新
- 刷新失败通知管理员
9.3 并发请求处理
问题:高并发下的性能 方案:
- 连接池管理
- 请求队列
- 缓存机制
10. 后续扩展
- 多用户支持(不同权限级别)
- API Key 配额限制
- Webhook 通知
- 更详细的统计报表
- Docker 部署支持
- 集群部署支持