什麼是部署圖?
一個部署圖是一種結構性UML 圖用來模擬軟體系統的實際執行架構。作為統一模型語言(UML)規格的核心標準之一,這種特定的UML 圖類型用來說明軟體組件如何實際部署到硬體主機目標、雲端基礎設施元件或容器執行環境。它為系統工程師、DevOps 專業人員以及網路架構師提供清晰的伺服器叢集邊界、資料庫複製路徑、負載平衡層級,以及開發與生產區域之間的硬體網路協定佈局。
使用VPasCode您無需再為複雜的向量群組形狀或手動座標映射而煩惱。透過使用簡單的宣告式程式碼區塊,我們的引擎可自動將您的硬體節點結構進行群組、計算與巢狀,並保持整潔。
核心語法指南:元素與構造
要在 PlantUML 中設計出準確且符合標準的 UML 部署圖,您必須掌握硬體節點、執行環境、部署元件與網路連結。
1. 聲明基礎設施立方體(節點)
在部署佈局中,實體運算資源以三維立體立方體來表示。您可使用node關鍵字,或選擇專用變體,讓讀者能立即獲得關於硬體層級的視覺上下文:
node "裸金屬應用伺服器" as CoreServer
node Server1
database "資料庫伺服器" as DB_Node 
2. 建模雲層與虛擬環境
現代應用程式很少直接部署到實體硬體上。PlantUML 提供巢狀群組包裝器,用以表示邏輯執行邊界、雲端供應商的範圍,或 Docker 與 Kubernetes 等虛擬容器執行環境:
cloud— 代表外部公開的網路層級或雲端網路邊界(例如:AWS、Azure)。frame— 代表虛擬系統或組織區域。storage— 代表實體 SAN 設定或物件儲存位置。
cloud "Amazon Web Services VPC" {
node "EC2 Linux 實例" as WorkerNode
} 
3. 定義部署資產(何處執行)
資產代表實際的物理檔案(例如已編譯的 JAR 檔案、靜態建置資料夾或壓縮套件),該檔案會部署到節點上。您可使用「artifact」關鍵字宣告資產,或直接將其放置於您的硬體區塊內:
node "應用程式伺服器" {
artifact "api_v1.0.war" as API_File
} 
4. 建立網路通訊連結
基礎設施元件之間的連接代表具體的實體網路、電線路徑或無線通道。您可使用實線雙破折號(--),並在引號內附加文字以明確定義所使用的網路協定(例如 HTTPS、TCP/IP、SSH):
node Server1
node DB_Node
Server1 -- DB_Node : "TCP/IP(埠號 5432)" 
實用部署圖的最佳實務
- 正確嵌套結構: 始終將您的內部元件或資產繪製於「
node」宣告的花括號內,以清楚顯示執行位置。 - 標示通訊協定: 在伺服器之間絕不繪製空白行。總是將連接標示其主要通訊協定(例如
"HTTPS(埠號 443)"),以協助網路與安全審查。 - 隔離可用性區域: 在記錄高可用性雲端組態時,請使用獨立的
框架包裝器來說明分區設置(例如,us-east-1a對比us-east-1b).
現實世界中的 PlantUML 部署圖示範例
範例 1:經典三層式 Web 架構(節點與通訊協定)
此範本模擬了標準的現代企業應用程式結構,對應外部內容分發網路、應用伺服器叢集以及受保護的內部資料庫主機層。
@startuml
cloud "公眾網際網路" as net
node "Cloudflare CDN 邊緣" as cdn
frame "非軍事區(DMZ)" {
node "Nginx 負載平衡伺服器" as proxy
}
frame "私人應用程式 VPC 子網路" {
node "Ubuntu Server 22.04" as app_node {
artifact "core_api.jar" as application
}
}
database "管理式資料庫層級" {
node "PostgreSQL 主要叢集" as db_master
}
' 建立拓撲連接線路
net -- cdn : "HTTPS"
cdn -- proxy : "HTTPS(TLS 1.3)"
proxy -- app_node : "HTTP(埠號 8080)"
app_node -- db_master : "TCP/IP(埠號 5432)"
@enduml 
語法解析: 此圖表明確定義了安全邊界。編譯後的資源core_api.jar 安全地嵌套在app_node 伺服器框內。網路路徑可乾淨地向內延伸,為從公開網際網路邊緣到管理式資料庫層級的每個區段建立嚴格的通訊協定規則。
範例 2:雲原生容器架構(Kubernetes 與 AWS Mesh)
此進階企業藍圖描繪了一個高度可擴展的多區域雲端部署。它利用巢狀節點佈局,以視覺化負載平衡的 Kubernetes 容器系統與獨立雲端資料庫之間的互動。
@startuml
cloud "亞馬遜網路服務(AWS)" {
node "AWS 應用程式負載平衡器" as alb
frame "可用性區域:us-east-1a" {
node "EC2 工作節點 Node A" as ec2_a {
node "K8s Pod:Web 前端" as pod_web_a
node "K8s Pod:訂單 API" as pod_api_a
}
}
frame "可用性區域:us-east-1b" {
node "EC2 工作節點 Node B" as ec2_b {
node "K8s Pod:Web 前端" as pod_web_b
node "K8s Pod:訂單 API" as pod_api_b
}
}
storage "AWS Aurora Serverless 叢集" {
database "客戶資料庫" as rds_db
}
}
' 路由基礎設施編排線路
alb -- pod_web_a : "HTTP 輪詢"
alb -- pod_web_b : "HTTP 輪詢"
pod_web_a -- pod_api_a : "內部 gRPC"
pod_web_b -- pod_api_b : "內部 gRPC"
pod_api_a -- rds_db : "SSL/TCP"
pod_api_b -- rds_db : "SSL/TCP"
@enduml 
語法解析: 透過將node 目標嵌套在子節點結構,此範本能完美模擬容器化佈局(Pod 在 EC2 虛擬機器內執行)。應用程式負載平衡器可無縫地將傳入請求分發至各可用性區域,同時叢集元件會將資料庫呼叫路由回共用儲存空間。