Some checks failed
CD Pipeline / deploy (push) Failing after 59s
- 建立 Gitea Actions CD pipeline (.gitea/workflows/cd.yaml) - 部署模式: rsync Python 檔案至 188 → docker restart (volume mount) - Dockerfile/requirements 變動時自動重建 Docker image - 部署通知: Telegram (開始/成功/失敗) - 健康檢查: https://mo.wooo.work/health (最多 5 次重試) - 同步最新 CLAUDE.md / ADR-008 / memory (2026-04-19) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
538 lines
11 KiB
Markdown
538 lines
11 KiB
Markdown
# 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): 初版發布,定義完整開發測試部署流程
|