运行时配置
运行中的应用从哪里来、它使用哪个数据库,以及部署必须声明的启动决策。
运行时配置回答三个问题:
- 运行中的应用从哪里来?
- 它使用哪个数据库?
- 这个部署有权成为什么 —— 联网还是断网,单组织还是多组织?
本页讲的是这些决策的形态。变量名称及其确切契约见 环境变量;你要复制的值在随版本发布 的部署包中。
应用从哪里来
恰好只有一个来源生效,由部署声明是哪一个。
| 模式 | 何时使用 | 应用如何到达 |
|---|---|---|
| 配置编写 | 出厂形态:一个应用、评估、物理隔离,以及大多数生产部署 | 运行时提供镜像中编写的元数据,加上安装进它的任何内容 |
| 产物固定 | 应用按自己的节奏发布,独立于运行时镜像 | 一个变量按 URL 指定一个已发布的产物。在这条路径上不会加载镜像自身的配置 |
| 组合 | 隔离墙后的多个组织,共享一个数据库,运行一个已发布的应用 | 同样的产物引用,从部署自身的配置中读取,以便企业插件随之加载。仅限物理隔离许可证,否则会在启动时被拒绝 |
升级一个已发布的应用,就是修改产物引用再重启 —— 不需要重建镜像。回滚是同样 的操作,换成之前的 URL,而这只有在之前的对象仍以相同字节存在时才行得通。这 是你发布方式的属性,而不是运行时的属性,所以这种模式附带三条规则:
- 发布不可变的、以版本命名的对象。 绝不覆盖已发布的产物,也绝不发布到 一个会移动的名称。可变的名称意味着运行中的应用可以在没有任何部署事件的 情况下改变,使回滚成为不可能,也毁掉了"14:05 时运行的是什么"这个审计问题 的答案。
- 只给发布流水线写入权限。 人可以写入的产物存储,就是一条没有任何审查的 生产部署路径。
- 在生产环境中固定摘要。 引用带有一个可选的完整性固定值;有了它,不匹配 时会拒绝启动,并点名期望的摘要和实际的摘要。没有它,运行时会启动主机 返回的任何东西,无法区分一个被重新发布的产物和一个被替换的产物。
file:// 引用在没有产物主机的情况下走同一条路径,这使它成为演练部署的正确
方式 —— 这样生产命令与演练过的命令恰好只有一处不同。
产物路径上的迁移
在这条路径上"升级应用"是一次环境变更加一次重启,在模式和元数据第一次可能 不一致的那一刻,没有人守在终端前。所以这条路径 —— 也只有这一条 —— 会自动 应用安全的模式变更,并在遇到破坏性变更时拒绝启动,点名每一项变更以及 解决它的命令。其他每次启动都保持既有的生产策略,在该策略下模式永远不会被 自动修改。
运行时不会去猜的启动决策
有些配置会在加载配置时检查,并被拒绝,而不是降级运行。拒绝时会打印一条 致命错误,点名相互矛盾的设置,然后退出。
- 许可证模式与云端姿态是耦合的。 普通许可证会针对控制平面在线校验; 物理隔离许可证在本地校验,没有任何网络流量。把普通许可证与"没有控制平面" 搭配是不可能的,而不是降级,会在尝试任何校验之前就被拒绝。 物理隔离给出了完整的矩阵。
- 不设置云端姿态并不等于"不连云"。 不设置会解析为公共控制平面。一个 打算不与任何人通信的部署必须显式地说明这一点。
- 多组织姿态需要许可证,并且让另外两个决策成为必需:新注册的用户加入 什么,以及挂载哪些 AI Agent。声明任何一个可用的值都会被接受;不做决定则 不行。单组织部署不会看到这两项检查。
- 集群驱动要求每个副本上都有同一个共享密钥。 没有集群驱动时,每个副本会 自己生成一个;跨副本时这些密钥会悄悄地互不相同,所以运行时会拒绝启动。
连接到控制平面
控制平面负责提供市场目录并校验普通许可证。连接是一次绑定,而不是粘贴 一个凭据:部署与控制平面绑定一次,运行时会持久保存它被签发的令牌,并在之后 的每次调用中出示它。没有需要手工分发或轮换的部署 API 密钥。
一个已绑定、连接云端的部署仍然是单环境部署。连接到控制平面并不会把一个部署 变成多个。
数据库
在生产环境中,把部署指向一个托管的数据库,并从技术栈中移除捆绑的数据库 服务。捆绑的数据库是为了让首次运行能够工作;它不是生产姿态,容器本地存储也 不是业务数据该待的地方。
驱动从连接 URL 的 scheme 推断。只有当 scheme 无法携带这一信息时才显式覆盖 它 —— 不支持的值会直接失败,而不是回落到一个猜测。
出厂的技术栈把模式迁移作为一个一次性步骤运行,它会在任何应用副本启动之前 完成,所以并发的副本永远不会相互对抗地执行模式变更。任何其他编排器都必须 重现这个顺序。声明其他数据源参见数据源, 恢复一侧参见备份。
认证密钥
会话由一个基础密钥签名,它在每个副本上都必须完全相同。轮换它会使所有现有 会话失效,还会让已存储的签名密钥成为孤儿 —— 所以轮换是一项需要计划的操作, 而不是一次配置微调 —— 部署包的模板说明了轮换需要的那一个额外步骤。把密钥放 在密钥管理器中,绝不放进镜像。