3.0 KiB
3.0 KiB
技术设计文档
上下文
当前系统支持从 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()调用 - 启动脚本中的环境变量检查
- 文档中的环境变量说明
原因:
- 彻底移除功能,避免遗留代码
- 减少维护负担
- 防止未来误用
风险 / 权衡
风险
-
迁移成本:使用环境变量的用户需要迁移配置
- 缓解措施:提供清晰的迁移指南和错误消息
-
安全性:API key 等敏感信息存储在配置文件中
- 缓解措施:在文档中说明安全最佳实践(不要提交到版本控制)
-
灵活性降低:无法通过环境变量快速切换配置
- 缓解措施:对于需要多环境配置的场景,可以后续添加多配置文件支持
权衡
- 简化 vs 灵活性:选择简化,牺牲了环境变量的灵活性
- 统一 vs 多样性:选择统一配置来源,提高可维护性
迁移计划
步骤
- 更新代码,移除环境变量支持
- 更新文档,说明配置迁移方法
- 更新错误消息,提供配置指导
- 验证所有配置项都能正确读取
回滚
如果需要回滚,可以恢复之前的代码,但建议用户迁移到 config.yaml 配置方式。
开放问题
无