dramaling-vocab-learning/docs/05_deployment/deployment-checklist.md

320 lines
6.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 部署檢查清單
## 🚀 部署前檢查清單
### 📋 代碼準備
#### 代碼品質
- [ ] 所有測試通過 (`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