Node.js 部署實務:從 GitHub Actions 到現代化 CI/CD 策略
在現代化的開發團隊中,我們不會手動透過 FTP 上傳搬移檔案,而是建立一套自動化的 CI/CD (持續整合 / 持續部署) 流程。這能確保每一段進入正式環境的程式碼都經過嚴格測試,並以標準化的流程完成更新。
什麼是 CI/CD?
- CI (Continuous Integration):每次推送 (Push) 程式碼時,自動執行
npm test和npm run lint。它的目標是確保新功能沒有破壞舊有的穩定性。 - CD (Continuous Deployment):當測試通過後,自動將程式碼打包成 Docker 映像檔,並自動佈署到正式機或測試機。
自動化實戰:GitHub Actions
GitHub Actions 是目前 Node.js 社群最受歡迎的自動化工具。你只需要在專案根目錄建立 .github/workflows/deploy.yml:
name: Node.js 部署流水線
on:
push:
branches: [main] # 僅在 main 分支變動時觸發
jobs:
test-and-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: 安裝 Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: 'npm'
- run: npm ci # 比 npm install 更嚴謹,適合 CI 環境
- run: npm test
# 假設通過測試後,透過 SSH 遠端重啟 PM2 服務 (簡化範例)
- name: 遠端部署
run: |
echo "正在將代碼同步至伺服器..."
# 這裡通常會配合 SSH keys 或 Docker Push 邏輯
專業部署模式
為了達到「零停機」與「高安全性」,業界通常採用以下策略:
1. 藍綠部署 (Blue-Green Deployment)
- 原理:準備兩套完全一樣的環境,「藍」環境專門跑舊版,「綠」環境專門跑新版。
- 優點:確認新版 (綠) 沒問題後,直接在 Load Balancer 一秒切換流量。如果發現嚴重 Bug,切回舊版 (藍) 同樣只要一秒。
2. 金絲雀發布 (Canary Releases)
- 原理:先將 5% 的流量引導到新版本,觀察是否有錯誤報警,若無異常再逐步擴大比例至 100%。
- 優點:即使新版有 Bug,受影響的用戶比例也非常低。
3. 滾動更新 (Rolling Updates)
- 原理:如果您有多台伺服器,一次只更新其中一台,確保集群中永遠有舊版在服務,直到全部替換完畢。
環境變數的安全管理 (Secrets)
絕不要 將 .env 檔案或密鑰加入 Git。
- 在 GitHub 的 Settings > Secrets and variables 中設定敏感資訊。
- 在 Workflow 中透過
${{ secrets.DB_URL }}讀取並注入。
總結
- CI/CD 是讓團隊能快速迭代、不懼怕部署的關鍵。
- 始終讓 測試 成為部署前的必經之路。
- 掌握 藍綠部署 與 金絲雀發布 的概念,能讓你設計出更強韌的系統架構。