HtmlToPdf/docs/动态配置管理功能设计文档.md
2025-12-11 23:52:15 +08:00

222 lines
6.9 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.

# 动态配置管理功能设计文档
## 1. 需求背景
原有系统所有配置都在 `appsettings.json` 中进行配置,存在以下问题:
- 修改配置需要手动编辑 JSON 文件
- 修改后需要重启服务才能生效
- 首次部署没有引导流程,用户不知道如何配置
## 2. 需求描述
### 2.1 核心需求
1. **配置页面化管理** - 在管理后台可以直接编辑配置,而不是只能查看
2. **配置热加载** - 修改配置后程序能动态生效,不需要重启服务
3. **首次启动初始化向导** - 第一次部署时引导用户配置,选择启用哪些功能
### 2.2 关键约束
- **用户第一次启动时,必须先完成配置,配置完成后才初始化浏览器池**
- 配置文件不存在即为首次启动
- 配置文件路径:`./config/user-config.json`
- 敏感配置不需要脱敏显示
## 3. 技术方案
### 3.1 配置存储方式
采用 **覆盖模式**
- `appsettings.json` - 保留默认配置(开发/兜底用)
- `./config/user-config.json` - 用户自定义配置,覆盖默认值
### 3.2 启动流程
```
程序启动
检查 ./config/user-config.json 是否存在
┌─────────────────┬─────────────────┐
│ 不存在 │ 存在 │
│ (首次启动) │ (正常启动) │
└────────┬────────┴────────┬────────┘
↓ ↓
初始化模式 正常模式
↓ ↓
只注册轻量服务 加载用户配置
↓ ↓
不初始化浏览器池 注册完整服务
↓ ↓
显示初始化向导 预热浏览器池
↓ ↓
用户完成配置 正常运行
保存配置文件
提示刷新页面
```
### 3.3 配置分类
| 分类 | 配置项 | 热加载支持 |
|------|--------|-----------|
| 基础 | Redis 连接、任务队列类型 | 需重启 |
| 性能 | 浏览器池参数、Worker 数量 | 部分支持 |
| 存储 | 存储类型、路径、云存储配置 | 需重启 |
| 安全 | 认证开关、限流参数 | 支持 |
| 回调 | 回调开关、重试策略 | 支持 |
| 监控 | Prometheus、Jaeger | 需重启 |
## 4. 实现清单
### 4.1 后端实现
#### 配置服务层 (`HtmlToPdfService.Core/Configuration/`)
| 文件 | 说明 |
|------|------|
| `IConfigurationManager.cs` | 配置管理接口 |
| `FileConfigurationManager.cs` | 基于文件的配置管理实现 |
| `UserConfiguration.cs` | 用户配置模型 |
#### API 控制器 (`HtmlToPdfService.Api/Controllers/`)
| 文件 | 说明 |
|------|------|
| `SetupController.cs` | 初始化向导 API |
| `ConfigController.cs` | 配置管理 API |
#### 中间件和服务
| 文件 | 说明 |
|------|------|
| `Middleware/SetupRequiredMiddleware.cs` | 未初始化拦截中间件 |
| `Services/ConfigurationReloadService.cs` | 配置热加载服务 |
### 4.2 前端实现
| 文件 | 说明 |
|------|------|
| `views/SetupWizard.vue` | 初始化向导页面 |
| `views/Settings.vue` | 配置管理页面(改造) |
| `router/index.ts` | 路由守卫(添加) |
| `api/index.ts` | API 扩展 |
## 5. API 接口
### 5.1 初始化 API
| 接口 | 方法 | 说明 |
|------|------|------|
| `/api/setup/status` | GET | 检查初始化状态 |
| `/api/setup/default-config` | GET | 获取默认配置模板 |
| `/api/setup/test-redis` | POST | 测试 Redis 连接 |
| `/api/setup/test-storage` | POST | 测试存储配置 |
| `/api/setup/validate` | POST | 验证配置 |
| `/api/setup/initialize` | POST | 完成初始化 |
### 5.2 配置管理 API
| 接口 | 方法 | 说明 |
|------|------|------|
| `/api/config` | GET | 获取当前配置 |
| `/api/config` | PUT | 更新配置 |
| `/api/config/reload` | POST | 重新加载配置 |
| `/api/config/export` | GET | 导出配置文件 |
| `/api/config/import` | POST | 导入配置文件 |
| `/api/config/meta` | GET | 获取配置元信息 |
## 6. 初始化向导流程
### 快速模式(推荐新用户)
1. **欢迎页** - 选择配置模式
2. **Redis 配置** - 连接地址、数据库、测试连接
3. **存储配置** - 类型选择、路径配置
4. **确认完成** - 配置摘要
### 完整模式(高级用户)
1. **欢迎页** - 选择配置模式
2. **Redis 配置** - 连接地址、数据库、测试连接
3. **存储配置** - 类型选择Local/OSS/COS、详细参数
4. **性能配置** - 浏览器池参数、Worker 数量
5. **安全配置** - 认证开关、限流参数
6. **确认完成** - 配置摘要
## 7. 目录结构变更
```
HtmlToPdfService.Api/
├── config/ # 新增:配置目录
│ └── user-config.json # 用户配置文件(首次配置后生成)
├── Controllers/
│ ├── SetupController.cs # 新增:初始化 API
│ └── ConfigController.cs # 新增:配置管理 API
├── Middleware/
│ └── SetupRequiredMiddleware.cs # 新增:初始化检查中间件
├── Services/
│ └── ConfigurationReloadService.cs # 新增:配置热加载服务
└── Program.cs # 修改:条件化服务注册
HtmlToPdfService.Core/
└── Configuration/ # 新增:配置管理模块
├── IConfigurationManager.cs
├── FileConfigurationManager.cs
└── UserConfiguration.cs
HtmlToPdfService.Admin/src/
├── api/
│ └── index.ts # 修改:添加 setupApi, configApi
├── router/
│ └── index.ts # 修改:添加路由守卫
└── views/
├── SetupWizard.vue # 新增:初始化向导
└── Settings.vue # 修改:配置编辑页面
```
## 8. 配置文件示例
```json
{
"version": "1.0",
"createdAt": "2025-12-11T10:00:00Z",
"updatedAt": "2025-12-11T10:00:00Z",
"browserPool": {
"maxInstances": 10,
"minInstances": 2,
"maxConcurrent": 5
},
"taskQueue": {
"type": "Redis",
"redis": {
"connectionString": "192.168.195.15:6379",
"database": 11,
"keyPrefix": "htmltopdf:"
},
"workerCount": 5
},
"storage": {
"type": "Local",
"localPath": "./files",
"retentionHours": 168
},
"features": {
"pdfConversion": true,
"imageConversion": true,
"callback": true,
"rateLimit": true,
"authentication": false
}
}
```
## 9. 注意事项
1. **首次启动必须配置** - 不完成配置无法使用转换功能
2. **部分配置需重启** - Redis 连接、存储类型等关键配置修改后需重启服务
3. **配置热加载** - 浏览器池参数、限流参数等支持运行时更新
4. **配置备份** - 建议定期导出配置文件备份