# MOMO 監控系統 - 開發測試部署流程

**版本：** 1.0
**制定日期：** 2026-01-13
**最後更新：** 2026-01-13

---

## 🏗️ 環境架構

### 環境分層

| 環境 | 位置 | 用途 | 網址 | 運行方式 |
|------|------|------|------|----------|
| **開發環境 (Dev)** | `/Users/ogt/momo_pro_system` | 本地開發、程式碼修改 | `http://127.0.0.1:80` | 直接運行 `python app.py` |
| **測試環境 (Test)** | 同開發環境 | 功能測試、安全測試 | 同開發環境 | 執行測試腳本 |

### 環境特性

#### 開發環境 (macOS Local)
- **系統**：macOS (Darwin)
- **Python**：pyenv 管理的 Python 3.11.7
- **資料庫**：本地 SQLite
- **用途**：
  - 程式碼開發
  - 快速測試
  - UI/UX 調整
  - 新功能實驗

#### 正式環境 (GCP VM)
- **系統**：Ubuntu 22.04 LTS
- **Python**：系統 Python 或 venv
- **服務管理**：systemd (`momo.service`)
- **反向代理**：可能使用 nginx
- **域名**：DuckDNS (momo.wooo.work)
- **用途**：
  - 生產服務
  - 24/7 運行
  - 爬蟲任務排程
  - 使用者訪問

---

## 📋 完整開發部署流程

### 階段 1：需求與規劃

```mermaid
graph LR
    A[需求確認] --> B[功能設計]
    B --> C[技術評估]
    C --> D[風險評估]
    D --> E[制定計劃]
```

**檢查清單**：
- [ ] 需求文檔完整
- [ ] 技術方案可行
- [ ] 評估對現有功能的影響
- [ ] 確認是否需要爬蟲修改（若是，參照憲法第四章）
- [ ] 確認是否影響安全（若是，參照憲法第二章）

---

### 階段 2：本地開發 (Dev)

#### 2.1 環境準備

```bash
# 確保在開發環境
cd /Users/ogt/momo_pro_system

# 確認虛擬環境
source venv/bin/activate

# 確認依賴最新
pip list
```

#### 2.2 程式碼開發

```bash
# 1. 創建功能分支（重大修改）
git checkout -b feature/功能名稱

# 2. 開發程式碼
# - 遵守憲法第三章程式碼規範
# - 使用繁體中文註解
# - 添加錯誤處理
# - 記錄詳細日誌

# 3. 本地測試
python app.py
# 訪問 http://127.0.0.1:80 測試功能
```

**開發規範**：
- ✅ 所有註解使用繁體中文
- ✅ 所有輸入經過驗證
- ✅ 使用 `safe_join()` 處理路徑
- ✅ POST 請求包含 CSRF token
- ✅ 敏感資訊使用環境變數
- ✅ 完整的錯誤處理和日誌

#### 2.3 Git 提交

```bash
# 查看修改
git status
git diff

# 提交修改
git add 相關檔案
git commit -m "[模組] 繁體中文描述"

# 範例：
# git commit -m "[UI] 為廠商缺貨系統所有子頁面添加返回主頁按鈕"
# git commit -m "[Crawler] [MOMO] 修復商品價格選擇器失效"
# git commit -m "[Security] 強化檔案上傳驗證"
```

---

### 階段 3：本地測試 (Test)

#### 3.1 功能測試

```bash
# 手動測試
python app.py
# 1. 測試新功能正常運作
# 2. 測試現有功能未受影響
# 3. 測試邊界情況
# 4. 測試錯誤處理
```

#### 3.2 安全測試（如涉及安全）

```bash
# 執行完整安全測試套件
./run_security_tests.sh

# 或個別測試
python test_sql_security.py
python test_path_traversal.py
python test_file_upload.py
```

**必須通過**：
- ✅ 所有安全測試通過
- ✅ 無新增安全漏洞
- ✅ 日誌記錄完整

#### 3.3 爬蟲測試（如涉及爬蟲）

```bash
# 執行爬蟲測試
python test_crawler_specific.py

# 測試項目：
# 1. 選擇器有效性
# 2. 資料完整性
# 3. 錯誤處理
# 4. 效能測試
```

**必須通過**：
- ✅ 選擇器正確抓取資料
- ✅ 資料格式正確
- ✅ 錯誤處理完整
- ✅ 執行時間合理

#### 3.4 回歸測試

```bash
# 確認現有功能未受影響
# 1. 測試主要功能流程
# 2. 測試業績分析
# 3. 測試爬蟲任務
# 4. 測試廠商缺貨系統
# 5. 測試 Google Drive 自動匯入
```

---

### 階段 4：部署前準備

#### 4.1 程式碼檢查

**檢查清單**：
- [ ] 所有測試通過
- [ ] 程式碼遵守規範
- [ ] 註解完整清晰
- [ ] 無硬編碼敏感資訊
- [ ] 日誌記錄完整
- [ ] Git commit 完成
- [ ] 文檔更新完成

#### 4.2 確認修改檔案清單

```bash
# 查看本次修改的所有檔案
git status
git diff --name-only

# 列出修改清單，確認需要部署的檔案
# 範例：
# - sales_analysis.html
# - vendor_stockout_list.html
# - vendor_stockout_import.html
# - vendor_stockout_send_email.html
# - vendor_stockout_history.html
```

#### 4.3 備份正式環境

```bash
# 連接到 GCP VM
gcloud compute ssh momo-server --zone=asia-east1-a

# 在 VM 上執行備份
cd /home/ogt/momo_pro_system
./deploy_scripts/backup.sh
# 或手動備份
tar -czf backup_$(date +%Y%m%d_%H%M%S).tar.gz \
    --exclude='venv' \
    --exclude='__pycache__' \
    --exclude='*.log' \
    .
```

---

### 階段 5：部署到正式環境

#### 方法 A：完整部署（推薦用於大改動）

```bash
# 在本地執行
cd /Users/ogt/momo_pro_system

# 使用部署腳本自動上傳

# 腳本會：
# 1. 檢查 gcloud 登入狀態
# 2. 檢查 VM 狀態
# 3. 上傳所有檔案（排除 venv、__pycache__、logs）
# 4. 提示後續步驟
```

**然後連接到 VM**：

```bash
# 連接到 VM
gcloud compute ssh momo-server --zone=asia-east1-a

# 在 VM 上執行
cd ~/momo_pro_system

# 安裝/更新依賴（如有新依賴）
source venv/bin/activate
pip install -r requirements.txt

# 重啟服務
sudo systemctl restart momo.service

# 檢查服務狀態
sudo systemctl status momo.service

# 查看日誌
sudo journalctl -u momo.service -f
```

#### 方法 B：快速更新（用於小改動，僅 HTML/CSS/JS）

```bash
# 在本地執行
cd /Users/ogt/momo_pro_system

# 僅上傳修改的檔案
gcloud compute scp --zone=asia-east1-a \
    sales_analysis.html \
    vendor_stockout_list.html \
    vendor_stockout_import.html \
    vendor_stockout_send_email.html \
    vendor_stockout_history.html \
    momo-server:~/momo_pro_system/

# HTML 模板檔案不需要重啟服務
# Flask 會自動重新載入模板
```

**注意**：
- HTML/CSS/JS 檔案：不需重啟服務
- Python 檔案（.py）：需要重啟服務
- 配置檔案（.env）：需要重啟服務
- 依賴更新（requirements.txt）：需要重新安裝並重啟

---

### 階段 6：部署後驗證

#### 6.1 服務狀態檢查

```bash
# 在 GCP VM 上執行
sudo systemctl status momo.service

# 查看最近的日誌
sudo journalctl -u momo.service -n 100

# 檢查是否有錯誤
sudo journalctl -u momo.service -p err -n 50
```

#### 6.2 功能驗證

```bash
# 測試網站訪問
curl -I https://momo.wooo.work

# 測試特定功能頁面
curl -I https://momo.wooo.work/vendor-stockout/send-email
curl -I https://momo.wooo.work/vendor-stockout/history
```

**手動驗證**：
- [ ] 訪問 https://momo.wooo.work
- [ ] 測試修改的功能
- [ ] 確認新功能正常運作
- [ ] 確認現有功能未受影響
- [ ] 檢查是否有 JavaScript 錯誤（瀏覽器 Console）
- [ ] 測試在不同瀏覽器（Chrome, Safari）

#### 6.3 監控檢查

```bash
# 監控系統日誌（持續 10 分鐘）
tail -f /home/ogt/momo_pro_system/logs/system.log

# 檢查是否有錯誤或異常
```

**監控項目**：
- [ ] 無錯誤訊息
- [ ] 爬蟲任務正常執行
- [ ] 資料庫操作正常
- [ ] 記憶體使用正常
- [ ] CPU 使用正常

#### 6.4 24 小時監控

**重要**：部署後必須監控 24 小時
- 定期檢查日誌
- 確認排程任務正常執行
- 確認通知正常發送
- 監控系統資源使用

---

## 🔄 回滾流程

### 何時需要回滾

- ❌ 部署後發現嚴重錯誤
- ❌ 核心功能失效
- ❌ 爬蟲完全失敗
- ❌ 系統崩潰或無法啟動
- ❌ 資料庫損壞

### 回滾步驟

```bash
# 1. 連接到 GCP VM
gcloud compute ssh momo-server --zone=asia-east1-a

# 2. 停止服務
sudo systemctl stop momo.service

# 3. 還原備份
cd /home/ogt/momo_pro_system
mv momo_pro_system momo_pro_system_failed
tar -xzf backup_20260113_HHMMSS.tar.gz

# 4. 重啟服務
sudo systemctl start momo.service

# 5. 驗證服務恢復
sudo systemctl status momo.service
curl -I https://momo.wooo.work

# 6. 記錄問題
# 在本地環境修復問題，重新測試後再次部署
```

---

## 📝 部署檢查清單總表

### 部署前檢查（Pre-Deployment）

- [ ] 功能開發完成
- [ ] 本地測試通過
- [ ] 安全測試通過（如涉及）
- [ ] 爬蟲測試通過（如涉及）
- [ ] 回歸測試通過
- [ ] 程式碼遵守規範
- [ ] Git commit 完成
- [ ] 文檔更新完成
- [ ] 正式環境已備份

### 部署中檢查（During Deployment）

- [ ] 檔案上傳成功
- [ ] 依賴安裝成功（如需要）
- [ ] 服務重啟成功（如需要）
- [ ] 無錯誤訊息

### 部署後檢查（Post-Deployment）

- [ ] 服務狀態正常
- [ ] 網站可以訪問
- [ ] 新功能正常運作
- [ ] 現有功能未受影響
- [ ] 日誌無異常
- [ ] 排程任務正常
- [ ] 監控 24 小時
- [ ] 更新部署日誌

---

## 🔧 常用命令速查

### 本地開發

```bash
# 啟動開發環境
cd /Users/ogt/momo_pro_system
source venv/bin/activate
python app.py

# 執行測試
./run_security_tests.sh
python test_specific.py

# Git 操作
git status
git add .
git commit -m "[模組] 描述"
git push
```

## 📊 環境差異注意事項

### 路徑差異

| 項目 | 開發環境 | 正式環境 |
|------|----------|----------|
| 專案路徑 | `/Users/ogt/momo_pro_system` | `/home/ogt/momo_pro_system` |
| Python | `/Users/ogt/.pyenv/versions/3.11.7/bin/python` | `/home/ogt/momo_pro_system/venv/bin/python` |
| 資料庫 | `data/momo_database.db` | `data/momo_database.db` |
| 日誌 | `logs/` | `logs/` |

### 服務運行差異

| 項目 | 開發環境 | 正式環境 |
|------|----------|----------|
| 運行方式 | 直接 `python app.py` | systemd service |
| Port | 80 | 80 |
| 網址 | `http://127.0.0.1:80` | `https://momo.wooo.work` |
| 自動重啟 | 否 | 是（systemd） |
| 日誌管理 | 檔案 | systemd journal + 檔案 |

### 注意事項

1. **程式碼差異**：
   - 開發環境和正式環境的程式碼必須保持同步
   - 避免在正式環境直接修改程式碼
   - 所有修改必須經過開發→測試→部署流程

2. **資料庫差異**：
   - 開發環境和正式環境使用不同的資料庫
   - 不要混用資料庫檔案
   - 測試時使用測試資料，避免污染正式資料

3. **環境變數**：
   - `.env` 檔案在兩個環境中可能不同
   - 確保正式環境的憑證正確配置
   - 不要將 `.env` 上傳到 Git

---

## 🎯 最佳實踐

### DO ✅

- ✅ 小步提交，頻繁部署
- ✅ 每次部署前備份
- ✅ 完整測試後再部署
- ✅ 部署後立即驗證
- ✅ 監控 24 小時
- ✅ 記錄部署日誌
- ✅ 遵守憲法規範

### DON'T ❌

- ❌ 直接在正式環境改程式碼
- ❌ 跳過測試直接部署
- ❌ 部署後不驗證
- ❌ 不備份就部署
- ❌ 在高峰時段部署重大更新
- ❌ 同時部署多個大改動

---

## 📈 持續改進

### 定期檢視

- 每月檢視部署流程效率
- 收集部署中遇到的問題
- 優化自動化腳本
- 更新文檔

### 自動化目標

未來可考慮的自動化：
- [ ] CI/CD 流程（GitHub Actions）
- [ ] 自動化測試流程
- [ ] 自動化部署腳本
- [ ] 自動化回滾機制
- [ ] 部署通知（Telegram/Line）

---

**版本歷史**：
- v1.0 (2026-01-13): 初版發布，定義完整開發測試部署流程
