目标
典型的服务读二十个环境变量,记得三个为什么存在,还留着 2021 年某个 root 凭据。盘点建消费者映射、分类拆配置与密钥、启动时做类型校验、密钥进管理器并借迁移轮换——配置从此有记忆,密钥从此有金库。
步骤要点
- 跨环境盘点变量:收集各部署目标与本地脚手架的全部变量,名称去重并映射每个变量被谁读取。
- 区分配置与密钥:逐个分类——非敏感配置(可文档化、可默认、可提交)或密钥(进管理器、注入、绝不落文件)。
- 启动时声明并校验:把配置移入类型化 schema,启动时校验并带默认值,缺失或畸形立即失败。
- 密钥走管理器:把密钥迁移进管理器并在部署时注入,迁移过程中轮换并吊销旧值。
- 清除死项与危险项:删除无消费者变量、重命名误导性变量,每个删除都以盘点为证据。
排错提示
README 里的变量表必漂移,启动校验的 schema 才是烂不掉的文档;迁移密钥不轮换等于留两份活凭据,借迁移之机换新吊旧;十一个变量没人读还留着是盘点缺失的铁证,逐个删并留档。
适用边界
启动校验会拒绝配置错误的部署,快速失败与快速拉起的权衡要与值班策略协调;部分第三方系统只接受环境变量注入,密钥管理器需要 wrapper 配合。
代码示例
inventory (before): 47 vars across 3 envs
consumers found: 31
no consumer (dead): 11 -> delete
unknown (undocumented): 5 -> investigate
classification:
config (21): LOG_LEVEL, FEATURE_X, POOL_SIZE...
-> typed schema, defaults, boot validation
secret (10): DB_PASSWORD, SMTP_KEY, JWT_SECRET
-> manager + deploy-time injection
boot validation:
Error: POOL_SIZE: expected int >= 1,
received "twenty" (fails fast, names var)
migration: SMTP_KEY rotated on move,
old value revoked (not just abandoned)