# 部署檢查清單

## 🚀 部署前檢查清單

### 📋 代碼準備

#### 代碼品質
- [ ] 所有測試通過 (`npm test`)
- [ ] 無 TypeScript 錯誤 (`npm run type-check`)
- [ ] 無 ESLint 警告 (`npm run lint`)
- [ ] 代碼覆蓋率達標 (>80%)
- [ ] 已移除所有 `console.log` 和調試代碼

#### 功能完整性
- [ ] 所有核心功能正常運作
- [ ] 響應式設計在所有裝置正常顯示
- [ ] 跨瀏覽器相容性測試完成
- [ ] 404 和錯誤頁面正常顯示
- [ ] Loading 和 Skeleton 狀態正確實現

### 🔐 安全檢查

#### 環境變數
- [ ] 生產環境變數已設置
- [ ] 移除所有測試/開發用 API keys
- [ ] `NEXTAUTH_SECRET` 已更新為強密碼
- [ ] 資料庫連線使用生產憑證
- [ ] 所有敏感資料已加密

#### 安全配置
- [ ] HTTPS 已啟用
- [ ] CSP (Content Security Policy) 已配置
- [ ] CORS 設置正確
- [ ] Rate limiting 已實施
- [ ] SQL injection 防護已啟用

### ⚡ 性能優化

#### 構建優化
- [ ] 生產構建成功 (`npm run build`)
- [ ] Bundle size 在預算內 (<200KB gzipped)
- [ ] 圖片已優化和壓縮
- [ ] 字體已優化載入
- [ ] 未使用的 CSS/JS 已移除

#### 載入性能
- [ ] Lighthouse 分數 > 90
- [ ] First Contentful Paint < 1.8s
- [ ] Largest Contentful Paint < 2.5s
- [ ] 累積版面配置位移 < 0.1
- [ ] 關鍵資源已預載入

### 📦 依賴管理

```bash
# 更新依賴
npm update
npm audit fix

# 檢查過時套件
npm outdated

# 清理未使用依賴
npm prune
```

- [ ] 所有依賴已更新到穩定版本
- [ ] 無已知安全漏洞 (`npm audit`)
- [ ] package-lock.json 已提交
- [ ] 生產依賴正確分類

### 🗄️ 資料庫準備

#### Supabase 設置
- [ ] 生產資料庫已創建
- [ ] 資料庫 Migration 已執行
- [ ] 資料庫索引已優化
- [ ] Row Level Security (RLS) 已啟用
- [ ] 備份策略已配置

#### 資料遷移
```sql
-- 執行 migration
supabase db push

-- 驗證 schema
supabase db diff

-- 設置備份
supabase db backup
```

### 🌐 Vercel 部署設置

#### 環境變數配置
```bash
# 在 Vercel Dashboard 設置
NEXT_PUBLIC_SUPABASE_URL=https://xxx.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=xxx
SUPABASE_SERVICE_ROLE_KEY=xxx
GOOGLE_GEMINI_API_KEY=xxx
NEXTAUTH_URL=https://dramaling.vercel.app
NEXTAUTH_SECRET=xxx
```

#### 構建設置
- [ ] Build Command: `npm run build`
- [ ] Output Directory: `.next`
- [ ] Install Command: `npm ci`
- [ ] Node.js Version: 18.x

#### 域名配置
- [ ] 自定義域名已設置
- [ ] SSL 證書已配置
- [ ] DNS 記錄已更新
- [ ] www 重定向已設置

### 📊 監控設置

#### 錯誤追蹤
- [ ] Sentry 已配置
- [ ] 錯誤報告已啟用
- [ ] Source maps 已上傳
- [ ] 警報規則已設置

#### 性能監控
- [ ] Google Analytics 已設置
- [ ] Web Vitals 追蹤已啟用
- [ ] Custom metrics 已配置
- [ ] 性能預算警報已設置

#### 日誌記錄
```typescript
// utils/logger.ts
const logger = {
  info: (message: string, data?: any) => {
    if (process.env.NODE_ENV === 'production') {
      // 發送到日誌服務
      sendToLogService({ level: 'info', message, data })
    }
  },
  error: (message: string, error?: any) => {
    if (process.env.NODE_ENV === 'production') {
      // 發送到錯誤追蹤服務
      sendToErrorTracking({ message, error })
    }
  }
}
```

### 📝 文檔更新

- [ ] README.md 已更新
- [ ] API 文檔已完成
- [ ] 部署流程已記錄
- [ ] 環境變數說明已更新
- [ ] CHANGELOG.md 已更新

### 🧪 最終測試

#### Staging 環境測試
- [ ] 在 staging 環境完整測試
- [ ] 用戶註冊/登入流程正常
- [ ] 詞卡生成功能正常
- [ ] 學習功能正常
- [ ] 付費功能正常（如適用）

#### 生產環境驗證
- [ ] 首頁載入正常
- [ ] 所有連結正常運作
- [ ] 表單提交正常
- [ ] API 端點響應正常
- [ ] 第三方整合正常

## 📋 部署步驟

### 1. 準備階段
```bash
# 切換到 main 分支
git checkout main
git pull origin main

# 執行測試
npm run test
npm run lint
npm run type-check

# 構建測試
npm run build
```

### 2. 部署到 Staging
```bash
# 部署到 staging 分支
git checkout staging
git merge main
git push origin staging

# Vercel 會自動部署 staging 分支
# 測試 staging URL: https://dramaling-staging.vercel.app
```

### 3. 生產部署
```bash
# 創建版本標籤
git tag -a v1.0.0 -m "Release version 1.0.0"
git push origin v1.0.0

# 部署到生產
git checkout main
git push origin main

# Vercel 自動部署到生產環境
```

### 4. 部署後驗證
```bash
# 檢查部署狀態
vercel list

# 查看部署日誌
vercel logs

# 監控錯誤
vercel logs --error
```

## 🔄 回滾計劃

### 快速回滾步驟
```bash
# 方法 1: Vercel Dashboard
# 1. 進入 Vercel Dashboard
# 2. 選擇 Deployments
# 3. 找到上一個穩定版本
# 4. 點擊 "Promote to Production"

# 方法 2: Git 回滾
git revert HEAD
git push origin main

# 方法 3: 緊急回滾
vercel rollback
```

### 資料庫回滾
```sql
-- 備份當前資料
pg_dump -h db.xxx.supabase.co -U postgres -d postgres > backup.sql

-- 恢復到之前版本
psql -h db.xxx.supabase.co -U postgres -d postgres < previous_backup.sql
```

## 📱 生產環境監控

### 即時監控指標
- CPU 使用率 < 80%
- 記憶體使用率 < 85%
- 錯誤率 < 1%
- 平均響應時間 < 200ms
- 可用性 > 99.9%

### 警報設置
```javascript
// 設置警報閾值
const alerts = {
  errorRate: 0.01, // 1%
  responseTime: 500, // ms
  availability: 0.999, // 99.9%
  diskUsage: 0.9, // 90%
}
```

## ✅ 部署完成確認

### 功能驗證
- [ ] 用戶可以正常註冊/登入
- [ ] 詞卡生成功能正常
- [ ] 學習功能正常運作
- [ ] 數據正確保存
- [ ] Email 通知正常發送

### 性能驗證
- [ ] 頁面載入時間符合預期
- [ ] API 響應時間正常
- [ ] 無記憶體洩漏
- [ ] 無異常錯誤

### 安全驗證
- [ ] HTTPS 正常運作
- [ ] 認證機制正常
- [ ] 敏感資料已加密
- [ ] 無安全警告

## 📞 緊急聯絡

| 角色 | 聯絡方式 |
|------|---------|
| 開發負責人 | dev-lead@dramaling.com |
| 運維團隊 | ops@dramaling.com |
| 安全團隊 | security@dramaling.com |
| 客服團隊 | support@dramaling.com |

## 🎉 部署成功後

1. **通知相關人員**
   - 發送部署完成郵件
   - 更新團隊 Slack/Discord
   - 更新專案看板

2. **監控初期表現**
   - 觀察錯誤率 (前 24 小時)
   - 檢查用戶反饋
   - 監控性能指標

3. **文檔更新**
   - 更新版本號
   - 記錄部署日誌
   - 更新 Release Notes