Enterprise 版本
發行
NextPDF Enterprise 將一次發行建模為一組具型別的值物件——一個發行資訊清單、逐成品的資訊清單、建置設定檔、散布通道,以及存取邊界——並衍生出一份發布計畫,將每個成品路由到正確的通道與存取邊界。
供應狀況與授權
標題為「供應狀況與授權」的區段此能力隨附於 NextPDF Enterprise(nextpdf/enterprise),並以 Enterprise 級別的授權封套啟用。未持有該權利的部署不會載入此能力的類別。比較各版本並取得授權。
composer require nextpdf/enterprise:^3概念總覽
標題為「概念總覽」的區段ReleaseManifest 是一個版本不可變的頂層文件。它記錄語意版本號、來源 commit、建置時間戳記、逐成品資訊清單的清單,以及選用的供應鏈佐證路徑(SBOM、GPG 簽章、checksum)。其結構描述版本遵循「新增為次版號、破壞性變更為主版號」。
ArtifactManifest 記錄一個已建置的成品:其正規檔名、版本、來源 commit、目標版本、交付模式、編碼技術、散布通道、目標 PHP 版本、SHA-256 摘要、選用的編碼到期時間,以及建置時間戳記。EncodingTechnology 區分用於編碼成品的工具,與是否曾經編碼這兩件事;一個明文成品一律帶有 None。
DistributionChannel 明確分離兩個關注點:一個成品來源(二進位儲存)與一個套件取用層(composer require 所讀取的登錄)。AccessBoundary 決定誰可以存取一個成品——付費客戶、限時評估,或永不面向客戶的內部 CI/QA/staging——且每個邊界都需要驗證。
PublishingPlan 由建置設定檔與發行資訊清單衍生而來。每個設定檔解析為發布目標:一個成品來源目標與一個取用層目標,並套用正確的存取邊界,讓付費與評估成品被路由到正確的位置。
為何如此設計
標題為「為何如此設計」的區段這個承重的決策,是將一次發行建模為不可變的具型別值物件,而非鬆散的組態。成品來源與取用層是各自獨立、以列舉為型別的關注點,而存取邊界是明確的。因此一個被誤路由的成品——一個被放上客戶通道的內部建置——會浮現為一個建模錯誤,而非一個無聲的正式環境失誤。此計畫維持為衍生而非權威:它指名預期的目標,而由你的發行工具執行傳輸。同一組物件會透過 Core 合約解析,因此升級版本的取用方不需變更任何呼叫端程式碼。這份延續性正是 open-core 邊界的重點——你買的是 Enterprise 介面,而非一次重寫。 設計背景:Open core,不綁定。
API 介面
標題為「API 介面」的區段| Class | Responsibility |
|---|---|
ReleaseManifest | 不可變的頂層發行文件。 |
ArtifactManifest | 逐成品的中繼資料與驗證欄位。 |
BuildProfile | 要發布的一份建置設定。 |
DistributionChannel | 來源 vs 取用層的通道列舉。 |
AccessBoundary | Paid / Evaluation / Internal 存取列舉。 |
EncodingTechnology | 編碼工具列舉(例如 encoded / none)。 |
PublishingPlan / PublishingTarget | 衍生的計畫與逐目標路由。 |
程式碼範例 — 快速上手
標題為「程式碼範例 — 快速上手」的區段use NextPDF\Enterprise\Release\PublishingPlan;
$plan = PublishingPlan::fromProfiles($profiles, '3.1.0');程式碼範例 — 正式環境
標題為「程式碼範例 — 正式環境」的區段use NextPDF\Enterprise\Release\PublishingPlan;use NextPDF\Enterprise\Release\PublishingEnvironment;
$plan = PublishingPlan::fromProfiles( $profiles, '3.1.0', PublishingEnvironment::Production,);
foreach ($plan->targets as $target) { $logger->info('release.target', [ 'version' => $plan->version, 'channel' => $target->channel->value, ]);}邊界案例與陷阱
標題為「邊界案例與陷阱」的區段- 成品來源與取用層是各自獨立的通道。來源儲存二進位檔;取用層提供指向它的中繼資料。推論
composer require解析到何處時,請勿將兩者混為一談。 - 一個明文成品一律回報
EncodingTechnology::None;編碼技術欄位回答的是「哪個工具」,而不是「它是否受到保護」。 - Internal 存取邊界的成品永不面向客戶;將其路由到客戶通道是一個設定錯誤,而本模型正是設計來讓它變得明確的。
- 發布計畫是衍生的,對傳輸而言不具權威性——它描述的是預期的目標;實際上傳由你的發行工具執行。
計畫衍生的成本對建置設定檔數量呈線性,並為每個設定檔產生少量目標。值物件是不可變的,且建構成本低廉。
安全注意事項
標題為「安全注意事項」的區段發行資訊清單承載供應鏈佐證路徑(SBOM、GPG 簽章、checksum)。本模組記錄並路由那些參照;它本身不產生簽章,也不證明來源。請將資訊清單視為待由你的發行管線驗證的中繼資料,而非其本身就是證明。
資料落地與 PII 緩解措施
標題為「資料落地與 PII 緩解措施」的區段發行資訊清單包含建置與成品中繼資料,而非個人資料。請對成品儲存套用你的一般控制措施。
安全遙測與日誌清洗
標題為「安全遙測與日誌清洗」的區段發行日誌應記錄版本與通道,而非簽署金鑰材料或內部儲存路徑。
一致性
標題為「一致性」的區段本模組不主張任何標準一致性;它是一個發行建模層。供應鏈佐證(SBOM、簽章、checksum)由資訊清單參照,並由你的發行工具產生與驗證。
FIPS 模式行為
標題為「FIPS 模式行為」的區段本模組不執行任何密碼學操作。GPG 簽署與 checksum 產生由外部發行工具執行,此處僅作參照。
威脅模型
標題為「威脅模型」的區段輸入是呼叫端提供的建置設定檔與資訊清單資料。本模型讓來源-vs-取用與存取邊界的區分變得明確,因此誤路由(例如曝露一個內部成品)會是一個可見的建模錯誤,而非一個無聲的錯誤。
行為合約
標題為「行為合約」的區段ReleaseManifest是一個版本不可變的頂層文件;其結構描述版本遵循「新增為次版號、破壞性變更為主版號」。DistributionChannel將成品來源與套件取用層維持為各自獨立的關注點;將兩者混為一談是一個建模錯誤,而本型別讓它變得明確。AccessBoundary區分 Paid / Evaluation / Internal,且每個邊界都需要驗證;一個 Internal 成品永不面向客戶。PublishingPlan由建置設定檔與發行資訊清單衍生而來;它描述的是預期的目標,對傳輸而言不具權威性。
發布邊界
標題為「發布邊界」的區段本頁僅記載外部可觀察的行為與受支援的公開 API 介面。內部命名空間路徑、輔助類別、機制表、runbook 檔名,以及工單前綴皆不在範圍內。
Core 回退
標題為「Core 回退」的區段NextPDF Core 沒有任何發行建模層。需要發行資訊清單、建置設定檔或發布計畫的僅有 Core 的取用方,必須自行建模。
Pro 回退
標題為「Pro 回退」的區段NextPDF Pro 不提供具型別的發行資訊清單、建置設定檔、存取邊界或衍生的發布計畫;它們僅隨附於 nextpdf/enterprise 套件。僅有 Pro 的部署沒有 Enterprise 元件可滿足發行建模請求。Enterprise 介面請參閱 Enterprise 概觀。
Enterprise 邊界註記
標題為「Enterprise 邊界註記」的區段資訊清單結構描述、來源-vs-取用的區分,以及存取邊界路由皆僅以行為層級描述。內部的通道解析表與內部的發布目標接線不在公開介面的範圍內,此處不予重現。
部署邊界
標題為「部署邊界」的區段發布計畫是衍生中繼資料,不是傳輸:實際的成品上傳由你的發行工具執行。供應鏈佐證(SBOM、GPG 簽章、checksum)由資訊清單參照,並由你的發行管線(而非本模組)產生與驗證。逐通道的路由、憑證與儲存是操作者的責任。
法律合規邊界
標題為「法律合規邊界」的區段本頁描述一個發行建模層。它記錄並路由供應鏈佐證的參照;它本身不產生簽章、不證明來源、不認證任何發行,也不構成法律建議。將資訊清單視為其本身就是證明是不正確的;驗證由你的發行管線執行。判斷一次發行是否符合你的合約或法規義務,是你的責任。