# Deployment Procedures

> 生產環境部署原則與決策。安全部署工作流程、回滾策略與驗證。教你思考而非腳本。

- Skill: `tai-ch0802/deployment-procedures` (Agent Skill)
- Install (CLI): `npx skillmds@latest add tai-ch0802/deployment-procedures`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tai-ch0802/deployment-procedures/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: Tai-ch0802 (https://skillmd.com/u/tai-ch0802)
- Updated: 2026-09-21
- Page: https://skillmd.com/skills/tai-ch0802/deployment-procedures

---


# 部署程序

> 安全生產發布的部署原則與決策。
> **學習思考方式，而非記憶腳本。**

---

## ⚠️ 如何使用此技能

此技能教導**部署原則**，而非可複製的 bash 腳本。

- 每次部署都是獨特的
- 理解每個步驟背後的原因
- 根據你的平台調整程序

---

## 1. 平台選擇

### 決策樹

```
你要部署什麼？
│
├── 靜態網站 / JAMstack
│   └── Vercel、Netlify、Cloudflare Pages
│
├── 簡單 Web 應用
│   ├── 託管 → Railway、Render、Fly.io
│   └── 控制 → VPS + PM2/Docker
│
├── 微服務
│   └── 容器編排
│
└── 無伺服器
    └── 邊緣函式、Lambda
```

### 每個平台有不同的程序

| 平台 | 部署方式 |
|------|----------|
| **Vercel/Netlify** | Git push、自動部署 |
| **Railway/Render** | Git push 或 CLI |
| **VPS + PM2** | SSH + 手動步驟 |
| **Docker** | 映像推送 + 編排 |
| **Kubernetes** | kubectl apply |

---

## 2. 部署前原則

### 4 大驗證類別

| 類別 | 檢查內容 |
|------|----------|
| **程式碼品質** | 測試通過、Lint 乾淨、已審查 |
| **建構** | 生產建構可運作、無警告 |
| **環境** | 環境變數已設定、密鑰有效 |
| **安全** | 備份完成、回滾計畫就緒 |

### 部署前檢查清單

- [ ] 所有測試通過
- [ ] 程式碼已審查並核准
- [ ] 生產建構成功
- [ ] 環境變數已驗證
- [ ] 資料庫遷移準備就緒（如有）
- [ ] 回滾計畫已記錄
- [ ] 團隊已通知
- [ ] 監控已就緒

---

## 3. 部署工作流程原則

### 5 階段流程

```
1. 準備
   └── 驗證程式碼、建構、環境變數

2. 備份
   └── 在變更前儲存當前狀態

3. 部署
   └── 在監控打開的情況下執行

4. 驗證
   └── 健康檢查、日誌、關鍵流程

5. 確認或回滾
   └── 一切正常？確認。有問題？回滾。
```

### 階段原則

| 階段 | 原則 |
|------|------|
| **準備** | 永遠不部署未測試的程式碼 |
| **備份** | 沒有備份就無法回滾 |
| **部署** | 看著它進行，不要走開 |
| **驗證** | 信任但要驗證 |
| **確認** | 準備好回滾觸發機制 |

---

## 4. 部署後驗證

### 驗證內容

| 檢查 | 原因 |
|------|------|
| **健康端點** | 服務正在運行 |
| **錯誤日誌** | 沒有新錯誤 |
| **關鍵使用者流程** | 重要功能可運作 |
| **效能** | 回應時間可接受 |

### 驗證時間窗口

- **前 5 分鐘**：主動監控
- **15 分鐘**：確認穩定
- **1 小時**：最終驗證
- **隔天**：審查指標

---

## 5. 回滾原則

### 何時回滾

| 症狀 | 動作 |
|------|------|
| 服務停機 | 立即回滾 |
| 關鍵錯誤 | 回滾 |
| 效能 >50% 降低 | 考慮回滾 |
| 小問題 | 如果能快速修復則向前修復 |

### 按平台的回滾策略

| 平台 | 回滾方式 |
|------|----------|
| **Vercel/Netlify** | 重新部署上個提交 |
| **Railway/Render** | 在控制面板回滾 |
| **VPS + PM2** | 還原備份、重啟 |
| **Docker** | 使用上個映像標籤 |
| **K8s** | kubectl rollout undo |

### 回滾原則

1. **速度優先於完美**：先回滾，之後再除錯
2. **不要累積錯誤**：一次回滾，而非多次變更
3. **溝通**：告訴團隊發生了什麼
4. **事後分析**：穩定後了解原因

---

## 6. 零停機部署

### 策略

| 策略 | 運作方式 |
|------|----------|
| **滾動式** | 逐一替換實例 |
| **藍綠** | 在環境間切換流量 |
| **金絲雀** | 漸進式流量轉移 |

### 選擇原則

| 情境 | 策略 |
|------|------|
| 標準發布 | 滾動式 |
| 高風險變更 | 藍綠（易回滾） |
| 需要驗證 | 金絲雀（用真實流量測試） |

---

## 7. 緊急程序

### 服務停機優先順序

1. **評估**：症狀是什麼？
2. **快速修復**：如果不清楚就重啟
3. **回滾**：如果重啟沒幫助
4. **調查**：穩定後再查

### 調查順序

| 檢查 | 常見問題 |
|------|----------|
| **日誌** | 錯誤、例外 |
| **資源** | 磁碟滿、記憶體 |
| **網路** | DNS、防火牆 |
| **依賴** | 資料庫、API |

---

## 8. 反模式

| ❌ 不要 | ✅ 要 |
|---------|-------|
| 週五部署 | 週初部署 |
| 匆忙部署 | 遵循流程 |
| 跳過測試環境 | 永遠先測試 |
| 不備份就部署 | 部署前備份 |
| 部署後就走開 | 監控 15+ 分鐘 |
| 一次多個變更 | 一次一個變更 |

---

## 9. 決策檢查清單

部署前：

- [ ] **平台適當的程序？**
- [ ] **備份策略就緒？**
- [ ] **回滾計畫已記錄？**
- [ ] **監控已配置？**
- [ ] **團隊已通知？**
- [ ] **部署後有時間監控？**

---

## 10. 最佳實踐

1. **小而頻繁的部署**優於大發布
2. **功能旗標**用於高風險變更
3. **自動化**重複步驟
4. **記錄**每次部署
5. **審查**問題後哪裡出了錯
6. **在需要前測試回滾**

---

> **記住：** 每次部署都是風險。透過準備而非速度來降低風險。

