什麼是 Deployment (部署)?

1
什麼是 Deployment (部署)?:部署(Deployment)是軟體開發生命週期的最後階段,將經過測試的程式碼、配置與依賴從開發環境正式推送到生產環境,讓使用者能存取並使用應用程式。它包含硬體配置、軟體安裝、環境變數設定、資料庫遷移等一系列活動,確保系統穩定、安全且高效運行,是「開發完成」到「服務上線」的關鍵橋樑。

什麼是 Deployment (部署)?

部署(Deployment)是軟體開發生命週期的最後階段,將經過測試的程式碼、配置與依賴從開發環境正式推送到生產環境,讓使用者能存取並使用應用程式。它包含硬體配置、軟體安裝、環境變數設定、資料庫遷移等一系列活動,確保系統穩定、安全且高效運行,是「開發完成」到「服務上線」的關鍵橋樑。

 

部署的核心流程與階段

完整部署流程涵蓋多個階段,形成標準管道:

程式碼 → 建置 → 測試 → 容器化 → 部署 → 監控 → 回饋
Git Push → Docker → QA → Staging → Production → Observability
 

典型步驟

  1. 建置(Build):編譯程式碼、打包依賴(如 npm buildmvn package

  2. 測試:自動化單元、整合、端到端測試

  3. 容器化:Docker 映像檔封裝應用與環境

  4. 部署:推送至伺服器、雲端平台或 Kubernetes

  5. 驗證:健康檢查、煙霧測試(Smoke Test)

  6. 監控:日誌、效能指標、錯誤追蹤

 

部署環境的分類

現代開發採用多環境策略:

環境 用途 配置 資料
開發(Dev) 功能開發 模擬生產 假資料
測試(Test/QA) 功能驗證 接近生產 測試資料
預備(Staging) 最終驗證 完全複製生產 生產副本
生產(Prod) 正式服務 正式配置 真實使用者資料

 

部署策略比較

策略 停機時間 風險 複雜度 適用場景
傳統部署 長(數分鐘) 小型專案
藍綠部署 零停機 高可用服務
金絲雀發布 漸進 新功能測試
滾動更新 短暫 Kubernetes
無伺服器 事件驅動

藍綠部署範例

藍環境(舊版,承載 100% 流量)
↓ 部署新版
綠環境(新版,0% 流量)
↓ 切換路由器(5 秒)
藍環境(舊版,0% 流量)← 回滾備用
綠環境(新版,100% 流量)
 

現代部署技術棧

容器化與容器編排

# Dockerfile
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
 

# docker-compose.yml
version: '3.8'
services:
  app:
    build: .
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
    depends_on:
      - db
  db:
    image: postgres:15
 

CI/CD 管道(GitHub Actions)

name: Deploy to Production
on:
  push:
    branches: [main]
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - name: Build Docker
      run: docker build -t myapp .
    - name: Deploy to Server
      uses: appleboy/[email protected]
      with:
        host: ${{ secrets.HOST }}
        username: ${{ secrets.USERNAME }}
        key: ${{ secrets.SSH_KEY }}
        script: |
          docker pull myapp
          docker stop myapp || true
          docker run -d -p 80:3000 --name myapp myapp
 

雲端部署平台

平台 特色 定價模式
Vercel 前端部署、Serverless 按使用量
Netlify 靜態網站、Jamstack 按流量
Heroku PaaS、Git 部署 Dynos/小時
Railway 全端部署、內建 DB 按資源
Render Docker、原生支援 按運行時間
AWS 全功能雲端 複雜計價

 

部署自動化最佳實務

1. 基礎設施即程式碼(IaC)

# Terraform
resource "aws_instance" "app" {
  ami           = "ami-12345678"
  instance_type = "t3.micro"
  tags = {
    Name = "my-app-server"
  }
}
 

2. 健康檢查與回滾

# Kubernetes
livenessProbe:
  httpGet:
    path: /health
    port: 3000
  initialDelaySeconds: 30
  periodSeconds: 10
 

3. 監控與觀測性

日誌:ELK Stack、Loki
指標:Prometheus、Grafana
追蹤:Jaeger、OpenTelemetry
告警:PagerDuty、Slack
 

部署清單(Checklist)

  • 建置成功,測試通過
  • 環境變數正確配置
  • 資料庫遷移執行
  • 靜態資源壓縮/CDN
  • HTTPS/SSL 憑證
  • 健康檢查通過
  • 煙霧測試 OK
  • 監控告警設定
  • 回滾方案就緒
  • 文件更新
     

常見問題與解決方案

停機問題:使用藍綠部署、金絲雀發布
配置漂移:GitOps、IaC、ConfigMap
密鑰洩漏:Secrets Manager、Vault
效能瓶頸:容器資源限制、負載平衡

部署是軟體交付的生命線,從手動 FTP 到自動化 CI/CD,代表開發成熟度。現代 DevOps 強調「頻繁、小幅度、安全」部署,實現真正的持續交付(Continuous Delivery)。掌握部署技能,就能將程式碼轉化為穩定服務,成為完整的全端工程師。