Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
105 changes: 105 additions & 0 deletions content/docs/deploy/air-gapped.zh-Hans.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
---
title: 物理隔离部署
seoTitle: "物理隔离部署:许可证模式和设置"
description: 物理隔离是一种许可证模式,而不是防火墙设置 —— 断网部署必须声明的两项设置,以及会在启动时被拒绝的组合。
editions: [enterprise]
translation:
source_sha: d0fbf234ac1fc9be7bcdb652e29a259e133103a63533267bf3f065bdee48ce9b
guide_rev: 1
mode: auto
---

## 物理隔离是一种许可证模式 [#air-gap-is-a-license-mode]

拔掉网线并不能得到一个物理隔离的部署。普通的 ObjectOS 许可证是**在线**校验的:
运行时在控制平面上用你的许可证密钥换取一个短期授权,并定期重新检查。切断这条
路径,许可证并不会"回落到离线"—— 它根本永远无法生效。

**物理隔离许可证是另一种许可证**,由我们有意离线签发。它在本地依据镜像中内嵌的
公钥进行校验,并以**零网络流量**挂载你的授权。物理隔离运行是一项企业版能力 ——
参见[许可证与定价](/docs/editions/license) —— 你需要的许可证是申请来的,而不是
配置出来的。

因此,一个断网部署要同时声明**两**件事:

- 一个**物理隔离许可证**,以及
- **没有控制平面**:云端姿态设置被显式设为 `off`(它的别名 `none`、`local` 和
`disabled` 含义相同)。

## 不设置并不等于"不连云" [#leaving-the-setting-unset-is-not-no-cloud]

这是本页上代价最高的错误,所以它有自己的一节:

> **未设置的云端姿态会解析为公共控制平面。**

未设置从来不是中立的。它选中的是联网行为 —— 这就是为什么一个"什么都没做"的部署
最终会挂载一个市场代理,并暴露一个设备绑定路由,而这个站点的全部前提就是不与
任何人通信。声明一个姿态会被接受;**不做决定则不行。**请显式写上 `off`。

## 受支持的组合 [#the-supported-combinations]

这些组合在加载配置时、在任何与许可证相关的事情发生**之前**就会被检查。不受支持
的组合不是警告,也不是降级:运行时会打印一条同时点名*两项*设置的致命错误,然后
退出。

| 许可证 | 云端姿态 | 结果 |
|---|---|---|
| 物理隔离许可证 | `off` | **运行,完整授权,零网络流量。**这就是断网场景的答案。 |
| 无许可证 | `off` | 以 Community 行为运行。注意,多组织姿态仍然需要许可证。 |
| 普通(在线)许可证 | 可达的控制平面,且已完成设备绑定 | 正常的联网部署。 |
| 普通(在线)许可证 | `off` | **在启动时被拒绝。** |
| 普通(在线)许可证 | 未设置 | 被视为公共控制平面 —— 见上文。能否运行取决于那个控制平面是否真的可达且已绑定。 |

### 为什么会拒绝 [#why-the-refusal-exists]

在线许可证通过一次交换来校验,这次交换必须出示一个在部署绑定控制平面时签发的
运行时令牌。没有控制平面就没有绑定,没有绑定令牌就不可能存在,于是交换永远不会
发生 —— 这次启动不会,以后的启动也不会。宽限期也帮不上忙:宽限期从上一次*成功*
的校验开始计算,而第一次成功永远不会出现。

如果不加以强制,这种配置会在之后才失败,而且归咎于错误的东西:在多组织姿态下,
它最终会抱怨部署"需要许可证"—— 而许可证恰恰是唯一从未出错的东西。所以运行时会
更早地拒绝,并说明是哪两项设置相互矛盾。由于拒绝发生在任何校验尝试之前,一次被
拒绝的启动**不会发出任何数据包**。

## 托管的多组织形态也需要物理隔离许可证 [#the-hosted-multi-organization-shape-is-air-gap-licensed-too]

如果你运行的是**组合**形态 —— 一个已发布的应用作为本部署的应用启动,多个组织
在隔离墙后共享一个数据库 —— 那么物理隔离许可证在那里同样不是可选的。该模式直接
拒绝市场和云连接界面,所以在线许可证所需的绑定在它上面永远不可能发生。它要求
物理隔离许可证和 `off`,两者都在启动时强制执行,并且它在部署包中有自己的环境
模板。不要改写单环境模板来达到它;复制组合形态的那个模板,这样它所决定的每一个
值都会随之而来。

## 把镜像带进网络内部 [#getting-the-image-inside-the-network]

ObjectOS 运行时镜像位于断网站点无法访问的私有镜像仓库中,所以镜像要像你的其他
产物一样跨越边界。

在联网一侧完成校验,趁你还能访问镜像仓库和工具:针对你即将送入内网的确切摘要,
检查**签名**、**SBOM** 和**构建溯源**(部署包的 README 中有相关命令)。然后让
**摘要**完成剩下的工作 —— 它是按内容寻址的,所以确认网络内部的副本具有相同的
摘要,就证明了它与你校验过的是同一批字节。这也是部署固定摘要而不是标签的原因:
在边界之内,没有任何东西可以用来重新解析标签。

升级的方式相同:在外部校验新的摘要,把它传入内部,修改固定的摘要,然后重启。
保留上一个摘要 —— 在物理隔离的网络中,它可能是你唯一能回滚到的副本。

## 哪些仍然必须可达 [#what-still-has-to-be-reachable]

物理隔离的意思是 *ObjectOS 本身*不需要任何流量 —— 没有许可证校验,没有市场,
没有更新检查。它并不意味着部署没有网络。在你的边界之内,它仍然需要:

- 它所配置的数据库(集群时还有 Redis);
- 你的入口或负载均衡器,用于入站流量;
- **你**配置它去通信的任何东西:身份提供商、SMTP、对象存储、webhook 目标、AI
提供商端点。如果你的用户通过 OIDC 登录,那么这个身份提供商必须能从该网络访问,
否则就改用本地账户。

许可证本身带有到期时间,在每次启动时本地检查 —— 没有回连,所以要把续期规划成
一次交付,而不是指望运行时自己去获取。

## 下一步 [#next]

- [Docker → 企业版额外提供](/docs/deploy/docker#enterprise-adds) —— 完整的校验、许可证、扩缩容和升级。
- [升级](/docs/operate/upgrade)和[备份](/docs/operate/backup) —— 上述步骤所概括的操作流程。
106 changes: 106 additions & 0 deletions content/docs/deploy/air-gapped.zh-Hant.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
---
# @generated zh-Hant from zh-Hans -- do not edit. Edit the English source, then regenerate: pnpm --filter @objectos/docs gen:zh-hant
title: 物理隔離部署
seoTitle: "物理隔離部署:許可證模式和設定"
description: 物理隔離是一種許可證模式,而不是防火牆設定 —— 斷網部署必須宣告的兩項設定,以及會在啟動時被拒絕的組合。
editions: [enterprise]
translation:
source_sha: d0fbf234ac1fc9be7bcdb652e29a259e133103a63533267bf3f065bdee48ce9b
guide_rev: 1
mode: auto
---

## 物理隔離是一種許可證模式 [#air-gap-is-a-license-mode]

拔掉網線並不能得到一個物理隔離的部署。普通的 ObjectOS 許可證是**線上**校驗的:
執行時在控制平面上用你的許可證金鑰換取一個短期授權,並定期重新檢查。切斷這條
路徑,許可證並不會"回落到離線"—— 它根本永遠無法生效。

**物理隔離許可證是另一種許可證**,由我們有意離線簽發。它在本地依據映象中內嵌的
公鑰進行校驗,並以**零網路流量**掛載你的授權。物理隔離執行是一項企業版能力 ——
參見[許可證與定價](/docs/editions/license) —— 你需要的許可證是申請來的,而不是
配置出來的。

因此,一個斷網部署要同時宣告**兩**件事:

- 一個**物理隔離許可證**,以及
- **沒有控制平面**:雲端姿態設定被顯式設為 `off`(它的別名 `none`、`local` 和
`disabled` 含義相同)。

## 不設定並不等於"不連雲" [#leaving-the-setting-unset-is-not-no-cloud]

這是本頁上代價最高的錯誤,所以它有自己的一節:

> **未設定的雲端姿態會解析為公共控制平面。**

未設定從來不是中立的。它選中的是聯網行為 —— 這就是為什麼一個"什麼都沒做"的部署
最終會掛載一個市場代理,並暴露一個裝置繫結路由,而這個站點的全部前提就是不與
任何人通訊。宣告一個姿態會被接受;**不做決定則不行。**請顯式寫上 `off`。

## 受支援的組合 [#the-supported-combinations]

這些組合在載入配置時、在任何與許可證相關的事情發生**之前**就會被檢查。不受支援
的組合不是警告,也不是降級:執行時會列印一條同時點名*兩項*設定的致命錯誤,然後
退出。

| 許可證 | 雲端姿態 | 結果 |
|---|---|---|
| 物理隔離許可證 | `off` | **執行,完整授權,零網路流量。**這就是斷網場景的答案。 |
| 無許可證 | `off` | 以 Community 行為執行。注意,多組織姿態仍然需要許可證。 |
| 普通(線上)許可證 | 可達的控制平面,且已完成裝置繫結 | 正常的聯網部署。 |
| 普通(線上)許可證 | `off` | **在啟動時被拒絕。** |
| 普通(線上)許可證 | 未設定 | 被視為公共控制平面 —— 見上文。能否執行取決於那個控制平面是否真的可達且已繫結。 |

### 為什麼會拒絕 [#why-the-refusal-exists]

線上許可證通過一次交換來校驗,這次交換必須出示一個在部署繫結控制平面時簽發的
執行時令牌。沒有控制平面就沒有繫結,沒有繫結令牌就不可能存在,於是交換永遠不會
發生 —— 這次啟動不會,以後的啟動也不會。寬限期也幫不上忙:寬限期從上一次*成功*
的校驗開始計算,而第一次成功永遠不會出現。

如果不加以強制,這種配置會在之後才失敗,而且歸咎於錯誤的東西:在多組織姿態下,
它最終會抱怨部署"需要許可證"—— 而許可證恰恰是唯一從未出錯的東西。所以執行時會
更早地拒絕,並說明是哪兩項設定相互矛盾。由於拒絕發生在任何校驗嘗試之前,一次被
拒絕的啟動**不會發出任何資料包**。

## 託管的多組織形態也需要物理隔離許可證 [#the-hosted-multi-organization-shape-is-air-gap-licensed-too]

如果你執行的是**組合**形態 —— 一個已釋出的應用作為本部署的應用啟動,多個組織
在隔離牆後共享一個數據庫 —— 那麼物理隔離許可證在那裡同樣不是可選的。該模式直接
拒絕市場和雲連線介面,所以線上許可證所需的繫結在它上面永遠不可能發生。它要求
物理隔離許可證和 `off`,兩者都在啟動時強制執行,並且它在部署包中有自己的環境
模板。不要改寫單環境模板來達到它;複製組合形態的那個模板,這樣它所決定的每一個
值都會隨之而來。

## 把映象帶進網路內部 [#getting-the-image-inside-the-network]

ObjectOS 執行時映象位於斷網站點無法訪問的私有映象倉庫中,所以映象要像你的其他
產物一樣跨越邊界。

在聯網一側完成校驗,趁你還能訪問映象倉庫和工具:針對你即將送入內網的確切摘要,
檢查**簽名**、**SBOM** 和**構建溯源**(部署包的 README 中有相關命令)。然後讓
**摘要**完成剩下的工作 —— 它是按內容定址的,所以確認網路內部的副本具有相同的
摘要,就證明了它與你校驗過的是同一批位元組。這也是部署固定摘要而不是標籤的原因:
在邊界之內,沒有任何東西可以用來重新解析標籤。

升級的方式相同:在外部校驗新的摘要,把它傳入內部,修改固定的摘要,然後重啟。
保留上一個摘要 —— 在物理隔離的網路中,它可能是你唯一能回滾到的副本。

## 哪些仍然必須可達 [#what-still-has-to-be-reachable]

物理隔離的意思是 *ObjectOS 本身*不需要任何流量 —— 沒有許可證校驗,沒有市場,
沒有更新檢查。它並不意味著部署沒有網路。在你的邊界之內,它仍然需要:

- 它所配置的資料庫(叢集時還有 Redis);
- 你的入口或負載均衡器,用於入站流量;
- **你**配置它去通訊的任何東西:身份提供商、SMTP、物件儲存、webhook 目標、AI
提供商端點。如果你的使用者通過 OIDC 登入,那麼這個身份提供商必須能從該網路訪問,
否則就改用本地賬戶。

許可證本身帶有到期時間,在每次啟動時本地檢查 —— 沒有回連,所以要把續期規劃成
一次交付,而不是指望執行時自己去獲取。

## 下一步 [#next]

- [Docker → 企業版額外提供](/docs/deploy/docker#enterprise-adds) —— 完整的校驗、許可證、擴縮容和升級。
- [升級](/docs/operate/upgrade)和[備份](/docs/operate/backup) —— 上述步驟所概括的操作流程。
Loading
Loading