跳转到内容
Appaloft 文档 v1.0.0-rc.11

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 适合 setunsetresource secrets ...effective-precedenceeffective-configdiff 和自动化脚本。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 用于检查资源级变量覆盖环境变量之后的部署输入视图,并显示安全的来源/覆盖摘要。

常见问题

如果部署没有读到新变量:

  1. 确认变量设置在正确环境。
  2. 确认变量是构建时还是运行时需要。
  3. 如果是运行中实例,需要重新部署才能读取新的部署快照。
  4. 如果是构建时变量,需要重新构建并部署。

相关页面:SecretsDiff and promote environments