配置总览与优先级
一条规则记住全部:代码默认值 < TOML 文件 < 环境变量; 环境变量名 =
前缀__段__键(双下划线分层)。
优先级(从代码核实,非假设)
crates/platform-config/src/lib.rs::load 的合并序:
text
1. T::default() # 代码内默认值(serde default 函数)
2. TOML 文件(可选) # <PREFIX>_CONFIG 指向;文件不存在 = 该层缺失(不是错误)
3. 环境变量 # PREFIX__SECTION__KEY 覆盖
合并语义:对象按键深合并;数组与标量整体替换没有 CLI 参数层(服务只有 --bootstrap 子命令,不是配置项)。 all-in-one 之上再加一层装配覆写(apply_overrides),但显式设置的服务级 env 优先于派生值(见装载机制)。
各服务前缀
| 服务 | 前缀 | 配置文件 env | 自动迁移 env |
|---|---|---|---|
| svc-gateway | GW | GW_CONFIG | — |
| svc-iam | IAM | IAM_CONFIG | IAM_AUTO_MIGRATE=1 |
| svc-metadata | META | META_CONFIG | META_AUTO_MIGRATE=1 |
| svc-orchestrator | ORCH | ORCH_CONFIG | ORCH_AUTO_MIGRATE=1 |
| svc-metering | MET | MET_CONFIG | MET_AUTO_MIGRATE=1 |
| svc-gis | GIS | GIS_CONFIG | GIS_AUTO_MIGRATE=1 |
| svc-gis-tantivy-indexer | GIS(共享) | GIS_INDEXER_CONFIG | GIS_AUTO_MIGRATE=1 |
| svc-operator | OP | 无文件(env only) | — |
| svc-all-in-one | AIO | AIO_CONFIG | 内建(auto_migrate=true) |
环境变量命名规则(精确)
- 前缀大写 +
__起始:IAM__DB__URL; - 每段去
_后转小写:IAM__JWT__SEED_FILE→jwt.seed_file; - 值解析:先按 JSON 解析,取 Number/Bool;其余(含字符串)原样。
bash
# 等价的两种写法
IAM__DB__URL='postgres://postgres:pg@127.0.0.1:54329/iam'
IAM_CONFIG=/etc/rustsvc/iam.toml # 文件里 [db] url = "..."两种部署形态的配置来源
| 形态 | 默认值 | TOML | env |
|---|---|---|---|
| 单机 all-in-one | crate 默认 | AIO_CONFIG | AIO__*(再叠加各服务自身前缀 env) |
| K8s | crate 默认 | ConfigMap 挂 /etc/rustsvc/<svc>.toml(<PREFIX>_CONFIG 指向) | Secret 注入 <PREFIX>__DB__URL + <PREFIX>__MQ__* |
K8s 层面完整接线见 Kubernetes 部署。