2025-12-02 18:54:14 +08:00

87 lines
3.0 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.

# 技术设计文档
## 上下文
当前系统支持从 `config.yaml` 和环境变量读取配置,环境变量可以覆盖 `config.yaml` 中的值。这种双重配置来源增加了系统的复杂性和维护成本。为了简化配置管理,需要移除环境变量支持,统一使用 `config.yaml` 作为唯一配置来源。
## 目标 / 非目标
### 目标
- 简化配置管理,统一配置来源为 `config.yaml`
- 减少代码复杂度,移除环境变量处理逻辑
- 提高配置的可追溯性和可维护性
- 确保所有配置都通过文件管理,便于版本控制
### 非目标
- 不支持配置热重载(需要重启应用)
- 不支持多环境配置文件(如 dev.yaml, prod.yaml
- 不支持配置加密(敏感信息如 API key 以明文存储在 config.yaml 中)
## 决策
### 1. 配置来源:仅使用 config.yaml
**决策**:移除所有环境变量支持,仅从 `config.yaml` 文件读取配置
**原因**
- 简化配置管理逻辑
- 统一配置来源,减少混淆
- 配置文件便于版本控制和审查
- 降低配置管理的认知负担
**考虑的替代方案**
- 保留环境变量但仅用于敏感信息(如 API key增加了复杂性不符合简化目标
- 支持多环境配置文件:超出当前需求范围,可以后续添加
### 2. 错误处理策略
**决策**:在配置缺失时抛出明确的异常,而不是使用默认值或静默失败
**原因**
- 快速发现配置问题
- 避免运行时错误
- 提供清晰的错误消息指导用户修复
**考虑的替代方案**
- 使用默认值:可能导致配置错误被忽略,不符合明确失败的原则
### 3. 代码清理范围
**决策**:删除所有环境变量相关代码,包括:
- `app/config.py` 中的 `_apply_env_overrides()` 方法
- 所有 `os.getenv()` 调用
- 启动脚本中的环境变量检查
- 文档中的环境变量说明
**原因**
- 彻底移除功能,避免遗留代码
- 减少维护负担
- 防止未来误用
## 风险 / 权衡
### 风险
1. **迁移成本**:使用环境变量的用户需要迁移配置
- **缓解措施**:提供清晰的迁移指南和错误消息
2. **安全性**API key 等敏感信息存储在配置文件中
- **缓解措施**:在文档中说明安全最佳实践(不要提交到版本控制)
3. **灵活性降低**:无法通过环境变量快速切换配置
- **缓解措施**:对于需要多环境配置的场景,可以后续添加多配置文件支持
### 权衡
- **简化 vs 灵活性**:选择简化,牺牲了环境变量的灵活性
- **统一 vs 多样性**:选择统一配置来源,提高可维护性
## 迁移计划
### 步骤
1. 更新代码,移除环境变量支持
2. 更新文档,说明配置迁移方法
3. 更新错误消息,提供配置指导
4. 验证所有配置项都能正确读取
### 回滚
如果需要回滚,可以恢复之前的代码,但建议用户迁移到 `config.yaml` 配置方式。
## 开放问题