什麼是 Deployment (部署)?

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

什麼是 Deployment (部署)?

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

 

部署的核心流程與階段

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

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

典型步驟:

  1. 建置(Build):編譯程式碼、打包依賴(如 npm build、mvn 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)。掌握部署技能,就能將程式碼轉化為穩定服務,成為完整的全端工程師。