diff --git a/README.md b/README.md index 5decf66..a7fcb3c 100644 --- a/README.md +++ b/README.md @@ -124,6 +124,7 @@ _✨ 通过标准的 OpenAI API 格式访问所有的大模型,开箱即用 + 微信公众号授权(需要额外部署 [WeChat Server](https://github.com/songquanpeng/wechat-server))。 23. 支持主题切换,设置环境变量 `THEME` 即可,默认为 `default`,欢迎 PR 更多主题,具体参考[此处](./web/README.md)。 24. 配合 [Message Pusher](https://github.com/songquanpeng/message-pusher) 可将报警信息推送到多种 App 上。 +25. 支持**服务器配置管理界面**,所有环境变量和命令行参数均可通过 Web UI 查看和修改,无需再编辑命令行或 `.env` 文件。[详见此处](#服务器配置管理)。 ## 部署 ### 基于 Docker 进行部署 @@ -416,7 +417,99 @@ graph LR 29. `ENFORCE_INCLUDE_USAGE`:是否强制在 stream 模型下返回 usage,默认不开启,可选值为 `true` 和 `false`。 30. `TEST_PROMPT`:测试模型时的用户 prompt,默认为 `Print your model name exactly and do not output without any other text.`。 -### 命令行参数 +### 服务器配置管理 +系统提供了一套完整的 Web UI 用于管理服务器配置,以 root 用户登录后进入 **设置 → 服务器配置** 即可查看和修改所有环境变量级配置。 + +#### 功能特性 +- **分类展示**:所有配置按类别分组展示(数据库、Redis、性能调试、网络代理、速率限制、指标监控、其他设置) +- **运行时配置**:部分配置可在运行时直接修改并立即生效,无需重启服务 + - 例如:`DEBUG`、`DEBUG_SQL`、`MEMORY_CACHE_ENABLED`、`BATCH_UPDATE_ENABLED`、`THEME`、`RELAY_TIMEOUT` 等 +- **需重启配置**:数据库、Redis 等底层配置修改后需要重启服务才能生效,系统会显示"需要重启"标签提示 + - 例如:`SQL_DSN`、`REDIS_CONN_STRING`、`PORT`、`SESSION_SECRET` 等 +- **下载 .env**:一键导出当前所有配置为 `.env` 文件,方便备份或迁移 +- **导入 .env**:上传 `.env` 配置文件到服务器,重启后自动生效 +- **秘密值保护**:密码、密钥等敏感信息在 UI 中自动脱敏显示(如 `ab****cd`) + +#### 使用场景 + +**场景一:修改数据库配置** +1. 登录系统后进入 **设置 → 服务器配置 → 数据库** +2. 修改 `SQL_DSN` 为新的数据库连接字符串 +3. 点击"下载 .env"按钮导出完整配置 +4. 修改下载的 `.env` 文件中的 `SQL_DSN` 值 +5. 回到页面点击"导入 .env"上传修改后的文件 +6. 重启服务使配置生效 + +**场景二:运行时调整性能参数** +1. 进入 **设置 → 服务器配置 → 性能与调试** +2. 直接开关 `DEBUG`、`MEMORY_CACHE_ENABLED` 等开关 +3. 修改 `BATCH_UPDATE_INTERVAL` 等数值参数后点击"保存" +4. 修改立即生效,无需重启 + +**场景三:Docker 部署环境下的配置迁移** +1. 在旧容器中进入服务器配置页面,点击"下载 .env" +2. 获得完整的 `server-config.env` 文件 +3. 启动新容器时挂载该文件: + ```shell + docker run --name one-api -d -p 3000:3000 \ + -v /path/to/server-config.env:/app/.env \ + your-image:tag + ``` +4. 或其他方式,在导入后重启容器即可生效。注意如果容器没有挂载持久化卷,导入的 `.env` 文件会在容器重建后丢失,建议将文件保存到宿主机。 + +#### API 端点 +新增的服务器配置 API 端点(需要 root 权限): +| 方法 | 路径 | 说明 | +|------|------|------| +| GET | `/api/server/config/` | 获取所有服务器配置 | +| PUT | `/api/server/config/` | 更新运行时配置 | +| GET | `/api/server/config/download` | 下载 .env 配置文件 | +| POST | `/api/server/config/import` | 上传 .env 配置文件 | + +#### 支持的配置项 + +| 类别 | 配置键 | 运行时修改 | 说明 | +|------|--------|-----------|------| +| 数据库 | `db_type` | ❌ 只读 | 当前数据库类型(SQLite/MySQL/PostgreSQL,自动检测) | +| 数据库 | `SQL_DSN` | ❌ 需重启 | 数据库连接字符串 | +| 数据库 | `LOG_SQL_DSN` | ❌ 需重启 | 日志数据库连接字符串 | +| 数据库 | `SQLITE_PATH` | ❌ 需重启 | SQLite 文件路径 | +| 数据库 | `SQLITE_BUSY_TIMEOUT` | ❌ 需重启 | SQLite 忙等待超时(毫秒) | +| 数据库 | `SQL_MAX_IDLE_CONNS` | ❌ 需重启 | 最大空闲连接数 | +| 数据库 | `SQL_MAX_OPEN_CONNS` | ❌ 需重启 | 最大打开连接数 | +| 数据库 | `SQL_MAX_LIFETIME` | ❌ 需重启 | 连接最大生命周期(秒) | +| Redis | `REDIS_CONN_STRING` | ❌ 需重启 | Redis 连接字符串 | +| Redis | `REDIS_PASSWORD` | ❌ 需重启 | Redis 密码 | +| Redis | `REDIS_MASTER_NAME` | ❌ 需重启 | 主节点名称(集群模式) | +| Redis | `SYNC_FREQUENCY` | ❌ 需重启 | 缓存同步频率(秒) | +| 性能 | `DEBUG` | ✅ 即时 | 调试模式 | +| 性能 | `DEBUG_SQL` | ✅ 即时 | SQL 调试日志 | +| 性能 | `MEMORY_CACHE_ENABLED` | ✅ 即时 | 内存缓存 | +| 性能 | `BATCH_UPDATE_ENABLED` | ✅ 即时 | 批量更新 | +| 性能 | `BATCH_UPDATE_INTERVAL` | ✅ 即时 | 批量更新间隔(秒) | +| 性能 | `GIN_MODE` | ❌ 需重启 | Gin 运行模式 | +| 网络 | `RELAY_TIMEOUT` | ✅ 即时 | 中转超时(秒) | +| 网络 | `RELAY_PROXY` | ✅ 即时 | 中转代理地址 | +| 网络 | `USER_CONTENT_REQUEST_PROXY` | ✅ 即时 | 用户内容代理 | +| 网络 | `USER_CONTENT_REQUEST_TIMEOUT` | ✅ 即时 | 内容请求超时(秒) | +| 网络 | `HTTPS_PROXY` | ✅ 即时 | HTTPS 代理 | +| 速率限制 | `GLOBAL_API_RATE_LIMIT` | ✅ 即时 | API 速率限制(次/3分钟) | +| 速率限制 | `GLOBAL_WEB_RATE_LIMIT` | ✅ 即时 | Web 速率限制(次/3分钟) | +| 指标 | `ENABLE_METRIC` | ✅ 即时 | 指标监控 | +| 指标 | `METRIC_QUEUE_SIZE` | ✅ 即时 | 指标队列大小 | +| 指标 | `METRIC_SUCCESS_RATE_THRESHOLD` | ✅ 即时 | 成功率阈值 | +| 指标 | `CHANNEL_TEST_FREQUENCY` | ❌ 需重启 | 渠道自动测试频率 | +| 其他 | `PORT` | ❌ 需重启 | 服务监听端口 | +| 其他 | `SESSION_SECRET` | ❌ 需重启 | Session 密钥 | +| 其他 | `NODE_TYPE` | ❌ 需重启 | 节点类型 | +| 其他 | `POLLING_INTERVAL` | ❌ 需重启 | 轮询间隔 | +| 其他 | `GEMINI_SAFETY_SETTING` | ✅ 即时 | Gemini 安全设置 | +| 其他 | `GEMINI_VERSION` | ✅ 即时 | Gemini API 版本 | +| 其他 | `THEME` | ✅ 即时 | 前端主题 | +| 其他 | `FRONTEND_BASE_URL` | ❌ 需重启 | 前端基础 URL | +| 其他 | `ONLY_ONE_LOG_FILE` | ✅ 即时 | 单日志文件 | +| 其他 | `ENFORCE_INCLUDE_USAGE` | ✅ 即时 | 强制返回 usage | +| 其他 | `TEST_PROMPT` | ✅ 即时 | 测试提示词 | 1. `--port `: 指定服务器监听的端口号,默认为 `3000`。 + 例子:`--port 3000` 2. `--log-dir `: 指定日志文件夹,如果没有设置,默认保存至工作目录的 `logs` 文件夹下。