Variable precedence and snapshots
变量优先级
Appaloft 的配置优先级是 defaults、system、organization、project、environment、resource、deployment snapshot。用户不需要记住内部层级,但需要知道最终部署使用的是快照值。
用户可见规则:
- 越靠近具体部署的配置优先级越高。
- 环境变量覆盖项目或系统默认值。
- 同一个资源上的资源级变量会覆盖同
key + exposure的环境级变量。 - 部署创建时会保存不可变快照。
- 部署完成后再修改变量,不会改变那次部署。
这让用户可以安全地修改 staging 或 production 配置,而不用担心历史部署被悄悄改写。
构建时和运行时变量
构建时变量会进入构建产物,不能标记为 secret。运行时变量用于应用启动和运行环境。
区别:
| 类型 | 何时使用 | 是否可以是 secret |
|---|---|---|
| 构建时变量 | build 阶段,例如前端构建、静态产物生成。 | 不可以。可能进入产物。 |
| 运行时变量 | 应用启动和运行时读取。 | 可以。读模型和日志必须屏蔽值。 |
如果一个变量会被浏览器看到,例如 PUBLIC_ 或 VITE_ 前缀变量,不要把它标记或当作 secret 使用。
部署快照
每次部署都保存不可变环境快照。这个快照可能同时包含环境级变量和资源级覆盖值。后续修改变量不会改变已经完成或正在运行的部署。
用户应该在部署详情中看到“这次部署使用的配置摘要”,而不是只能看到当前环境变量表。
入口说明
Web console 应显示环境变量和资源级变量列表、secret 屏蔽状态、最近修改时间、作用域和部署快照提示。
CLI 适合 set、unset、resource secrets ...、effective-precedence、effective-config、diff 和自动化脚本。CLI 输出 secret 时只应显示 masked 状态,不显示值。
HTTP API 应返回变量 key、作用域、是否 secret、来源层级和 masked value。API 不应返回明文 secret。
environments.effective-precedence 用于检查单个环境在资源覆盖之前会贡献的有效变量。
resources.secrets.create/rotate/delete/list/show 是资源级 secret reference 的显式生命周期入口。
resources.import-variables 用于把粘贴的 .env 内容导入单个资源;重复 key 采用最后一行生效,并在结果里报告覆盖信息。resources.effective-config 用于检查资源级变量覆盖环境变量之后的部署输入视图,并显示安全的来源/覆盖摘要。
常见问题
如果部署没有读到新变量:
- 确认变量设置在正确环境。
- 确认变量是构建时还是运行时需要。
- 如果是运行中实例,需要重新部署才能读取新的部署快照。
- 如果是构建时变量,需要重新构建并部署。
相关页面:Secrets 和 Diff and promote environments。