完善配置密钥治理与启动校验

- 为 configuration.py 增加环境变量占位符解析、配置归一化、脱敏快照与启动校验\n- 在 main.py 启动阶段接入配置校验日志,并在致命缺项时阻止进程继续启动\n- 新增 config.example.yaml,并将默认 config.yaml 改为安全占位模板,移除仓库内明文敏感信息\n- 调整 docker-entrypoint.sh 与文档,统一说明配置复制、环境变量注入与当前优化进展
This commit is contained in:
liuwei
2026-04-30 15:44:53 +08:00
parent cb99e94493
commit c6d72cbb69
8 changed files with 672 additions and 117 deletions

37
main.py
View File

@@ -63,8 +63,45 @@ logger.add(
)
def _log_config_validation(config: Config) -> None:
"""输出启动期配置校验结果。"""
validation_report = config.get_validation_report()
errors = list(validation_report.get("errors", []) or [])
warnings = list(validation_report.get("warnings", []) or [])
logger.info(
"配置加载完成: "
f"environment={config.environment}, "
f"plugin_dir={config.plugin_dir}, "
f"errors={len(errors)}, "
f"warnings={len(warnings)}"
)
# 这里只打印脱敏后的配置快照:
# 1. 便于定位“到底加载了哪套配置”;
# 2. 同时避免把数据库密码、API Key 再写进日志;
# 3. 放在 DEBUG 级别,默认不会刷屏主日志。
logger.debug(f"配置脱敏快照: {config.get_sanitized_snapshot()}")
for warning in warnings:
logger.warning(
f"配置告警[{warning.get('code', 'unknown')}] "
f"{warning.get('path', 'root')}: {warning.get('message', '')}"
)
for error in errors:
logger.error(
f"配置错误[{error.get('code', 'unknown')}] "
f"{error.get('path', 'root')}: {error.get('message', '')}"
)
if errors:
raise ValueError("启动终止:存在未修复的致命配置错误,请先修正 config.yaml 或环境变量。")
def main():
config = Config()
_log_config_validation(config)
# 创建机器人实例
robot = Robot(config)