部署
在你自己的基础设施上运行 ObjectOS —— 开放的社区版镜像或需许可证的企业版镜像,同一个运行时、同一份配置契约,以及许可证额外带来什么。
ObjectOS 有两个自管理版本,它们的部署方式相同。ObjectOS Community 是开源 的运行时镜像;ObjectOS Enterprise 是需许可证的镜像,只有一个版本,包含全部 Enterprise 功能。两者运行同一个运行时, 读取同一份配置:一个数据库、一个认证密钥和一个加密密钥。不同之处在于镜像从哪里 来、应用如何进入,以及许可证解锁什么。本节的每一页都同时为两者编写一次,并以 企业版额外提供一节结尾,说明需许可证的镜像能多做什么。
两个镜像
| Community | Enterprise | |
|---|---|---|
| 镜像 | ghcr.io/objectstack-ai/objectstack,公开 | 需许可证的企业版镜像,来自私有镜像仓库;你的许可证附带镜像仓库凭据 |
| 固定方式 | 确切的版本标签(X.Y.Z),与镜像内的 ObjectStack CLI 一致;在字节不能变化的地方,还要固定它的摘要(原因) | 你的发布说明中点名的镜像摘要 |
| 架构 | linux/amd64 和 linux/arm64 | 仅 linux/amd64 |
| 应用如何到达 | 你用 os build 编译出的 objectstack.json:挂载进去、复制进你自己的镜像,或由 OS_ARTIFACT_URL 指定。空的运行时则改为从 Console 市场安装应用。 | 三种运行形态之一:应用打包在镜像中、一个已发布的产物,或者一个与镜像的企业插件组合在一起的已发布产物(见下文) |
| 必须设置的变量 | OS_DATABASE_URL、OS_AUTH_SECRET、OS_SECRET_KEY(镜像已经设置了 OS_PORT=8080) | 同上,另加 OS_LICENSE_KEY 和一个经过考虑的 OS_CLOUD_URL |
| 可复制的配置 | 这些页面上的示例 | 随每个版本发布的部署包 |
| 许可证解锁什么 | —— | 产品内 AI(AI Builder、"问你的数据")、AI 治理、层级安全、一个部署上的多个组织、默认开启的 SCIM、客户自管密钥、物理隔离运行。该套件目前运行一个节点;跨多个副本的高可用正在开发中,尚未提供。 |
版本对比给出了完整的矩阵。在 Community 上构建的应用 就是普通的 ObjectStack 元数据,不做任何修改即可在 Enterprise 上运行。
每个部署都要决定三件事
| 决策 | 含义 |
|---|---|
| 运行哪些字节 | 固定一个确切的镜像。像 latest 这样的滚动标签可能在你不知情时被重新指向,确切的版本标签在该版本被重新构建时也会如此;只有摘要不会。保留上一个版本:那就是回滚。 |
| 配置放在哪里 | 放在镜像和应用之外。数据库 URL、密钥和部署的身份都是在运行时注入的环境变量,绝不烘焙进镜像。环境变量就是契约。 |
| 哪个数据库 | 生产环境运行在 PostgreSQL 上。没有 OS_DATABASE_URL 时,运行时会在其主目录下写一个 SQLite 文件,这适合一台持久的主机,但在容器的临时文件系统上会丢失数据。 |
应用如何进入
Community 镜像不带任何应用。你把 os build 编译出的产物
dist/objectstack.json 交给它,有三种方式:
| 方式 | 做法 | 何时使用 |
|---|---|---|
| 挂载 | 把文件挂载到 /srv/app/objectstack.json,镜像默认在那里查找 | 你完全不想构建镜像 |
| 复制进你自己的镜像 | 一个 FROM 官方镜像的两阶段 Dockerfile | 你每个版本发布一个自包含的镜像 |
| 按 URL 指定 | OS_ARTIFACT_URL,可选带一个 #sha256= 完整性固定值 | 你希望升级应用就是一次环境变更加一次重启 |
Docker 展示了全部三种方式。完全没有产物时,运行时 会启动一个空内核,应用从 Console 市场安装。
指南
- Docker —— 运行镜像、配置它、把它放到代理后面、升级它。
- Kubernetes —— 在编排器上运行同一个镜像,以及需要保持的属性。
- 物理隔离 —— 仅限企业版:物理隔离是一种许可证模式,以及会在启动时被拒绝的组合。
没有容器运行时的话,同一个产物可以在装有 Node.js 22 的主机上通过 os start
运行 —— 参见在本地运行 ObjectOS Community。
企业版额外提供
另外两个决策:许可证和云端姿态
| 决策 | 含义 |
|---|---|
| 哪种许可证 | 许可证是正常路径的一部分,而不是附加项。有些部署形态没有许可证会拒绝启动。 |
| 哪种云端姿态 | 这个运行时是否与控制平面通信。它与许可证模式耦合,不受支持的组合会在启动时被拒绝,而不是悄悄降级。 |
实践中这两者是同一个决策,而选错的后果是启动失败,而不是缓慢的泄漏。 物理隔离完整列出了受支持的组合 —— 即使你的站点是联网 的也请读一读,因为正是那一页解释了这些组合为什么是现在这样。
部署包
你的版本会附带一个部署包:一个 Compose 技术栈、每种受支持形态的环境模板, 以及一份 README,其中有适用于你的版本的确切命令 —— 包括镜像仓库引用、摘要和供应 链校验步骤。
这些页面承载的是决策 —— 为什么用摘要、哪种形态用哪种许可证模式、多节点使 什么成为必需、运行时会拒绝什么。部署包承载的是你要复制的值。当两者看起来 不一致时,以随你的镜像发布的部署包为准:它与它所配置的运行时一同版本化。
三种运行形态
企业版镜像可以用三种方式运行应用,而这个选择会影响你能用什么 —— 它不仅仅是 打包方式的问题。
| 形态 | 应用来自 | 何时使用 |
|---|---|---|
| 配置编写 | 镜像自带的应用 —— 镜像中编写的元数据,加上安装进它的任何内容 | 单组织部署;Compose 技术栈配置的默认形态,也是不需要任何配置的形态。 |
| 产物固定 | 一个按 URL 指定的已发布应用产物,在任何部署配置运行之前解析 | 你运行一个已发布的应用,并希望升级应用就是一次环境变更加一次重启,无需重建镜像。注意,在这条路径上部署的企业插件不会加载。 |
| 组合 | 一个与本部署的企业插件组合在一起的已发布应用产物 | 多个组织共享一个数据库。这是托管的单应用 SaaS 形态 —— 并且仅限物理隔离许可证,在启动时强制执行。 |
每种形态在部署包中都有自己的环境模板。复制适用于你的形态的那一个,而不是改写 另一个:这些模板的不同之处,正是决定姿态的那些值,而它们恰恰是运行时在提供任何 服务之前会检查的值。