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