Deployment Diagram 教學:UML 部署圖繪製完整指南【2025】

Deployment Diagram 教學:UML 部署圖繪製完整指南【2025】

你設計的系統架構,別人看得懂嗎?

Deployment Diagram(部署圖)是 UML 標準中專門用來描述系統部署架構的圖形表示法。它清楚展示了硬體、軟體、網路之間的關係,是系統架構師、DevOps 工程師必備的溝通工具。

這篇文章將教你從零開始學會 Deployment Diagram,從基本元素到實際範例,讓你能夠繪製專業的系統部署圖。

什麼是 Deployment Diagram?

Deployment Diagram 是 UML(Unified Modeling Language,統一塑模語言)中的一種結構圖,專門用來描述系統的實體部署架構。

Deployment Diagram 的用途

展示實體架構

Deployment Diagram 回答這些問題:
- 系統運行在哪些硬體上?
- 各個軟體元件部署在哪裡?
- 元件之間如何通訊?
- 使用什麼網路協定?

溝通與文件化

在專案中,Deployment Diagram 用於:
- 向客戶說明系統架構
- 與維運團隊溝通部署需求
- 作為技術文件的一部分
- 規劃容量與成本

規劃與驗證

在設計階段,Deployment Diagram 幫助:
- 確認硬體需求
- 評估網路拓撲
- 識別單點故障
- 規劃擴展策略

Deployment Diagram vs 其他 UML 圖

UML 有多種圖形,各有不同用途:

圖形類型 關注重點 適合回答的問題
Class Diagram 軟體結構 類別之間的關係?
Sequence Diagram 互動流程 元件如何互動?
Component Diagram 元件組織 軟體如何組織?
Deployment Diagram 實體部署 軟體部署在哪裡?

Deployment Diagram 是唯一關注「實體世界」的 UML 圖,展示硬體與網路的配置。

想了解更多部署基礎知識,請參考我們的 程式部署完整指南

Deployment Diagram 基本元素

讓我們認識 Deployment Diagram 中的核心元素。

Node(節點)

Node 是 Deployment Diagram 中最基本的元素,代表一個執行環境。

圖形表示:立方體(3D 方塊)

Node 類型

類型 說明 範例
Device 實體硬體 伺服器、PC、手機
Execution Environment 執行環境 OS、Container、JVM
Node 泛用節點 任何執行單元

表示方式

┌─────────────────┐
│  <<device>>     │
│  Web Server     │
│─────────────────│
│  Ubuntu 22.04   │
│  8 CPU / 32GB   │
└─────────────────┘

Node 可以包含其他 Node,表示執行環境的層次關係:

┌─────────────────────────────┐
│  <<device>>                 │
│  Physical Server            │
│  ┌───────────────────────┐  │
│  │  <<executionEnv>>     │  │
│  │  Docker Container     │  │
│  │                       │  │
│  └───────────────────────┘  │
└─────────────────────────────┘

Artifact(製品)

Artifact 代表可部署的軟體單元。

圖形表示:文件圖示(矩形加上折角)

常見 Artifact 類型

類型 範例
可執行檔 app.exe、api-server
程式庫 libssl.so、node_modules
設定檔 nginx.conf、.env
資料庫 Schema schema.sql
容器映像檔 nginx:latest

表示方式

┌─────────────────┐
│  <<artifact>>   │
│  api-server.jar │
└─────────────────┘

Component(元件)

Component 代表軟體的邏輯單元,通常部署在 Artifact 中。

圖形表示:矩形加上元件符號(兩個小矩形)

┌─────────────────┐
│ ┌─┐             │
│ └─┤ Auth Module │
│ ┌─┐             │
└─────────────────┘

Association(關聯)

Association 代表 Node 之間的通訊關係。

圖形表示:連線

常見標註

標註 說明
<> HTTP 通訊
<> 加密 HTTP
<> TCP 連線
<> 資料庫連線
<> gRPC 通訊
┌──────────┐         ┌──────────┐
│ Client   │ <<HTTPS>> │  Server  │
│          │─────────│          │
└──────────┘         └──────────┘

💡 需要專業的架構設計協助?讓 VibeFix 幫你規劃

Deployment Relationship(部署關係)

表示 Artifact 部署在哪個 Node 上。

圖形表示:虛線箭頭,從 Artifact 指向 Node,標註 <>

或者直接將 Artifact 畫在 Node 內部。

繪製 Deployment Diagram 的步驟

讓我們透過一個實際範例,學習如何繪製 Deployment Diagram。

步驟一:確認系統範圍

首先,確認要繪製的系統範圍:

問題清單

  • 系統包含哪些主要服務?
  • 運行在什麼環境(雲端/地端/混合)?
  • 有哪些外部系統需要整合?
  • 使用者透過什麼方式存取?

範例情境

我們要繪製一個電商網站的部署圖,包含:
- 前端網站(React)
- 後端 API(Node.js)
- 資料庫(PostgreSQL)
- 快取(Redis)
- 檔案儲存(S3)

步驟二:識別 Node

根據系統需求,識別所有 Node:

硬體/雲端層級

- AWS 雲端環境
  - EC2 Instance(Web Server)
  - EC2 Instance(API Server)
  - RDS Instance(Database)
  - ElastiCache(Redis)
  - S3 Bucket

軟體執行環境

- Web Server
  - Nginx
  - Node.js Runtime

- API Server
  - Node.js Runtime
  - PM2 Process Manager

- Database Server
  - PostgreSQL 15

步驟三:識別 Artifact

列出所有需要部署的軟體:

Node Artifact
Web Server React Build(靜態檔案)
Web Server nginx.conf
API Server api-server.js
API Server package.json
Database schema.sql

步驟四:繪製關聯

確認 Node 之間的通訊方式:

Browser → Web Server : HTTPS (443)
Web Server → API Server : HTTP (3000)
API Server → Database : TCP (5432)
API Server → Redis : TCP (6379)
API Server → S3 : HTTPS

步驟五:組合完整圖形

將所有元素組合成完整的 Deployment Diagram。

實際範例:三種常見架構

讓我們看三種不同規模系統的 Deployment Diagram。

範例一:簡單 Web 應用

最基本的三層式架構:

┌─────────────────────────────────────────────────────────────┐
│                     <<cloud>>                                │
│                     AWS Cloud                                │
│                                                             │
│  ┌─────────────┐      ┌─────────────┐      ┌─────────────┐  │
│  │ <<device>>  │      │ <<device>>  │      │ <<device>>  │  │
│  │ EC2 Web     │      │ EC2 API     │      │ RDS         │  │
│  │             │      │             │      │             │  │
│  │ ┌─────────┐ │      │ ┌─────────┐ │      │ ┌─────────┐ │  │
│  │ │ Nginx   │ │      │ │ Node.js │ │      │ │Postgres │ │  │
│  │ └─────────┘ │      │ └─────────┘ │      │ │   15    │ │  │
│  │ ┌─────────┐ │      │ ┌─────────┐ │      │ └─────────┘ │  │
│  │ │ React   │ │      │ │ API     │ │      │             │  │
│  │ │ Build   │ │      │ │ Server  │ │      │             │  │
│  │ └─────────┘ │      │ └─────────┘ │      │             │  │
│  └──────┬──────┘      └──────┬──────┘      └──────┬──────┘  │
│         │    <<HTTPS>>       │    <<TCP/5432>>    │         │
│         └────────────────────┴────────────────────┘         │
│                                                             │
└─────────────────────────────────────────────────────────────┘

    ▲
    │ <<HTTPS>>
    │
┌───┴───────┐
│  Browser  │
│  (User)   │
└───────────┘

範例二:高可用架構

加入負載平衡與備援的架構:

┌─────────────────────────────────────────────────────────────────────┐
│                        <<cloud>> AWS Cloud                           │
│                                                                     │
│                      ┌─────────────────┐                            │
│                      │ <<device>>      │                            │
│                      │ ALB             │                            │
│                      │ (Load Balancer) │                            │
│                      └────────┬────────┘                            │
│                               │                                     │
│              ┌────────────────┼────────────────┐                    │
│              │                │                │                    │
│              ▼                ▼                ▼                    │
│  ┌───────────────┐ ┌───────────────┐ ┌───────────────┐             │
│  │ <<device>>    │ │ <<device>>    │ │ <<device>>    │             │
│  │ EC2 Web-1     │ │ EC2 Web-2     │ │ EC2 Web-3     │             │
│  │ (AZ-a)        │ │ (AZ-b)        │ │ (AZ-c)        │             │
│  └───────┬───────┘ └───────┬───────┘ └───────┬───────┘             │
│          │                 │                 │                      │
│          └─────────────────┼─────────────────┘                      │
│                            │                                        │
│                            ▼                                        │
│               ┌────────────────────────┐                            │
│               │ <<device>>             │                            │
│               │ RDS (Multi-AZ)         │                            │
│               │ ┌────────┐ ┌────────┐  │                            │
│               │ │Primary │ │Standby │  │                            │
│               │ │ (AZ-a) │ │ (AZ-b) │  │                            │
│               │ └────────┘ └────────┘  │                            │
│               └────────────────────────┘                            │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘

範例三:Kubernetes 微服務架構

容器化微服務的部署圖:

┌─────────────────────────────────────────────────────────────────────┐
│                    <<cloud>> AWS EKS Cluster                         │
│                                                                     │
│  ┌────────────────────────────────────────────────────────────────┐ │
│  │                     <<executionEnv>>                            │ │
│  │                     Kubernetes Namespace: production            │ │
│  │                                                                 │ │
│  │  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐             │ │
│  │  │ <<pod>>     │  │ <<pod>>     │  │ <<pod>>     │             │ │
│  │  │ api-gateway │  │ user-svc    │  │ order-svc   │             │ │
│  │  │             │  │             │  │             │             │ │
│  │  │ ┌─────────┐ │  │ ┌─────────┐ │  │ ┌─────────┐ │             │ │
│  │  │ │ Envoy   │ │  │ │ Go API  │ │  │ │ Node.js │ │             │ │
│  │  │ │ Proxy   │ │  │ │ Server  │ │  │ │ API     │ │             │ │
│  │  │ └─────────┘ │  │ └─────────┘ │  │ └─────────┘ │             │ │
│  │  └──────┬──────┘  └──────┬──────┘  └──────┬──────┘             │ │
│  │         │                │                │                     │ │
│  │         │   <<gRPC>>     │   <<gRPC>>     │                     │ │
│  │         └────────────────┴────────────────┘                     │ │
│  │                                                                 │ │
│  └─────────────────────────────────────────────────────────────────┘ │
│                                                                     │
│  ┌─────────────────────┐  ┌─────────────────────┐                   │
│  │ <<device>>          │  │ <<device>>          │                   │
│  │ RDS PostgreSQL      │  │ ElastiCache Redis   │                   │
│  └─────────────────────┘  └─────────────────────┘                   │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘

Deployment Diagram 繪製工具

選擇適合的工具可以提高繪製效率。

免費工具

Draw.io(diagrams.net)

最推薦的免費工具,特點:
- 完全免費
- 網頁版,無需安裝
- 支援 UML 符號
- 可匯出多種格式
- 支援 Google Drive / GitHub 整合

使用方式:
1. 前往 https://app.diagrams.net
2. 選擇儲存位置
3. 在左側面板選擇「UML」→「Deployment」
4. 拖拉元素到畫布

PlantUML

程式碼生成圖形的工具,適合工程師:

@startuml
node "Web Server" {
  artifact "nginx.conf"
  artifact "React Build"
}

node "API Server" {
  artifact "api-server.js"
}

database "PostgreSQL" {
  artifact "schema.sql"
}

[Web Server] --> [API Server] : HTTP
[API Server] --> [PostgreSQL] : JDBC
@enduml

優點
- 可以版本控制
- 自動排版
- CI/CD 整合(自動生成文件)

缺點
- 需要學習語法
- 複雜圖形排版較難控制

💡 想把架構圖變成真正的系統?讓 VibeFix 專家幫你實作

付費工具

Lucidchart

適合團隊協作的雲端工具:
- 即時協作
- 豐富的範本庫
- 與 Confluence、Jira 整合
- 價格:約 $7.95/月起

Microsoft Visio

企業常用的專業工具:
- 完整的 UML 支援
- 與 Office 整合
- 企業級功能
- 價格:約 $5/月起(Office 365)

Enterprise Architect

最專業的 UML 工具:
- 完整 UML 2.x 支援
- 程式碼生成
- 需求追蹤
- 價格:約 $229 起(買斷)

工具選擇建議

需求 推薦工具
快速繪製、個人使用 Draw.io
工程師、版本控制 PlantUML
團隊協作、非技術人員 Lucidchart
企業、完整 UML Enterprise Architect

最佳實踐與常見錯誤

繪製 Deployment Diagram 時,遵循這些原則可以提高圖的品質。

最佳實踐

保持適當抽象層次

不要把所有細節都放進一張圖,根據目的選擇抽象層次:

目的 抽象層次 包含內容
向客戶說明 主要服務、網路區域
與維運溝通 伺服器、服務、連接埠
除錯排查 詳細設定、版本

使用一致的符號

整個專案使用一致的符號系統:
- 統一 Stereotype(<>、<> 等)
- 統一顏色編碼(例如:資料庫用藍色、應用程式用綠色)
- 統一命名規則

標註重要資訊

在圖上標註關鍵資訊:
- 通訊協定與連接埠
- 執行環境版本
- 資源規格(CPU、RAM)
- 可用區域(AZ)

維持圖的可讀性

  • 避免線條交叉
  • 相關元素放在一起
  • 使用適當的間距
  • 加入圖例說明

常見錯誤

錯誤一:混淆邏輯與實體架構

❌ 錯誤:把 Class 或 Interface 畫在 Deployment Diagram
✅ 正確:只包含實體元素(Node、Artifact)

錯誤二:過度簡化或過度複雜

❌ 過度簡化:只畫「Frontend」→「Backend」→「Database」
✅ 適當:包含執行環境、通訊方式、關鍵設定

❌ 過度複雜:包含每個設定檔、每個環境變數
✅ 適當:只包含架構上重要的元素

錯誤三:忽略網路邊界

❌ 錯誤:沒有標示哪些在公網、哪些在私網
✅ 正確:使用邊界框標示網路區域(VPC、Subnet)

錯誤四:圖與實際不符

❌ 錯誤:畫完就不更新,與實際系統脫節
✅ 正確:將圖納入版本控制,隨系統更新

從 Deployment Diagram 到實際部署

Deployment Diagram 畫好了,如何轉換成實際的系統?

轉換成 Infrastructure as Code

將 Deployment Diagram 的資訊轉換成 IaC 程式碼:

Terraform 範例

# 對應 Deployment Diagram 中的 Node
resource "aws_instance" "web_server" {
  ami           = "ami-xxx"
  instance_type = "t3.medium"  # 圖中標註的規格

  tags = {
    Name = "Web Server"  # 圖中的 Node 名稱
  }
}

resource "aws_instance" "api_server" {
  ami           = "ami-xxx"
  instance_type = "t3.large"

  tags = {
    Name = "API Server"
  }
}

resource "aws_db_instance" "database" {
  engine         = "postgres"
  engine_version = "15"  # 圖中標註的版本
  instance_class = "db.t3.medium"

  identifier = "production-db"
}

轉換成 Kubernetes Manifest

對於容器化架構:

# 對應 Deployment Diagram 中的 Pod
apiVersion: apps/v1
kind: Deployment
metadata:
  name: api-gateway  # 圖中的 Pod 名稱
spec:
  replicas: 3
  selector:
    matchLabels:
      app: api-gateway
  template:
    spec:
      containers:
      - name: envoy  # 圖中的 Container
        image: envoyproxy/envoy:v1.28
        ports:
        - containerPort: 8080

驗證部署

部署完成後,驗證實際架構是否符合 Deployment Diagram:

# 確認 Node(EC2 實例)
aws ec2 describe-instances --query 'Reservations[].Instances[].[Tags[?Key==`Name`].Value,State.Name]'

# 確認網路連通性
nc -zv api-server 3000
nc -zv database 5432

# 確認服務狀態
kubectl get pods -n production

VibeFix 架構設計服務

Deployment Diagram 只是架構設計的開始,真正的挑戰在於:

  • 如何選擇最適合的架構?
  • 如何確保高可用性?
  • 如何控制成本?
  • 如何實現架構圖中的設計?

VibeFix 團隊提供完整的架構設計與實作服務。

服務範圍
- 系統架構評估與建議
- Deployment Diagram 繪製
- Infrastructure as Code 實作
- CI/CD Pipeline 設計
- 架構優化與成本控制

想了解更詳細的服務?查看 VibeFix 服務內容

結語:用圖說話,讓架構清晰可見

Deployment Diagram 是系統架構師的重要工具,它幫助你:

  • 清楚展示系統的實體架構
  • 與團隊有效溝通部署需求
  • 規劃與驗證系統設計
  • 建立專業的技術文件

透過這篇教學,你已經學會:

  • Deployment Diagram 的基本元素(Node、Artifact、Component)
  • 繪製步驟與實際範例
  • 各種繪製工具的選擇
  • 最佳實踐與常見錯誤
  • 從圖到實際部署的轉換

接下來,你可以學習 CI/CD 建置與部署流程,了解如何自動化你的部署流程。或者參考 部署伺服器架設指南,建立集中化的部署管理系統。


還是搞不定?讓 VibeFix 幫你

系統架構設計需要經驗與專業知識。如果你需要專業的架構設計協助,VibeFix 團隊可以幫你從規劃到實作。

立即免費諮詢 →

分享文章:
V

VibeFix

專門解決 AI Vibe Coding 後的疑難雜症,讓你的專案順利上線。

這篇文章有幫到你嗎?

如果還有問題,讓我們直接幫你解決!

聯繫我們