Files
ewoooc/DEPLOY_README.md
ogt 1b4f3a7bbe
Some checks failed
CD Pipeline / deploy (push) Failing after 59s
feat: EwoooC 初始化 — 完整專案推版至 Gitea
- 建立 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>
2026-04-19 01:21:13 +08:00

7.1 KiB
Raw Permalink Blame History

Momo Pro System - 部署快速指南

🚀 推薦方案對比

方案 成本/月 部署難度 維護成本 擴展性 推薦度
Cloud Run $10-30 極易 極低
Docker (本機) $0 容易
VM (Compute Engine) $32 中等
GKE (Kubernetes) $123+ 困難

🎯 方案一Cloud Run最推薦

特點:

  • 完全託管,自動擴展
  • 按使用付費,沒流量不收費
  • 自動 HTTPS
  • 5 分鐘部署完成

快速部署

# 一鍵部署
./deploy_scripts/deploy_cloudrun.sh

或手動部署:

# 登入 GCP
gcloud auth login

# 設定專案
gcloud config set project YOUR_PROJECT_ID

# 部署(從原始碼自動建立)
gcloud run deploy momo-pro-system \
    --source . \
    --region=asia-east1 \
    --allow-unauthenticated \
    --port=5000

詳細文檔: deploy_docker_guide.md


🏠 方案二:本機 Docker 測試

適合:

  • 本機開發測試
  • 不需要公開訪問
  • 學習 Docker

快速啟動

# 一鍵測試
./deploy_scripts/test_docker_local.sh

或手動啟動:

# 啟動容器
docker-compose up -d

# 訪問
open http://localhost

# 查看日誌
docker-compose logs -f

# 停止
docker-compose down

🖥️ 方案三VM 部署(傳統方式)

適合:

  • 需要完全控制
  • 已有 VM 資源
  • 自定義環境需求

Docker 方式(推薦)

# 1. 建立 VM
gcloud compute instances create momo-server \
    --zone=asia-east1-a \
    --machine-type=e2-medium \
    --image-family=cos-stable \
    --image-project=cos-cloud

# 2. 上傳程式碼
gcloud compute scp --recurse . momo-server:~/momo_pro_system --zone=asia-east1-a

# 3. SSH 到 VM
gcloud compute ssh momo-server --zone=asia-east1-a

# 4. 在 VM 上啟動
cd ~/momo_pro_system
docker-compose up -d

傳統方式

# 使用傳統腳本部署

# 在 VM 上執行
./deploy_scripts/setup_vm.sh
./deploy_scripts/setup_service.sh
./deploy_scripts/setup_nginx.sh

詳細文檔: deploy_gcp_guide.md


📁 檔案結構

momo_pro_system/
├── Dockerfile                      # Docker 映像定義
├── docker-compose.yml              # Docker Compose 配置
├── nginx.conf                      # Nginx 配置
├── .dockerignore                   # Docker 忽略檔案
├── DEPLOY_README.md               # 本檔案
├── deploy_docker_guide.md         # Docker 詳細指南
├── deploy_gcp_guide.md            # 傳統 VM 詳細指南
└── deploy_scripts/
    ├── deploy_cloudrun.sh         # Cloud Run 一鍵部署 ⭐
    ├── test_docker_local.sh       # 本機 Docker 測試 ⭐
    ├── setup_vm.sh                # VM 環境設定
    ├── setup_service.sh           # 系統服務設定
    ├── setup_nginx.sh             # Nginx 設定
    └── backup.sh                  # 備份腳本

🔧 環境變數設定

建立 .env 檔案

# Flask 設定
FLASK_ENV=production
SECRET_KEY=your-secret-key-here

# Email 設定
EMAIL_USER=your-email@gmail.com
EMAIL_PASSWORD=your-app-password
SMTP_SERVER=smtp.gmail.com
SMTP_PORT=587

# 資料庫
DATABASE_PATH=data/momo_database.db

Gmail App Password 設定

  1. 開啟 Google 帳戶設定
  2. 安全性 → 兩步驟驗證
  3. 應用程式密碼 → 選擇"郵件"
  4. 複製 16 位密碼到 EMAIL_PASSWORD

📊 監控和維護

Cloud Run

# 查看日誌
gcloud logging read "resource.type=cloud_run_revision" --limit=50

# 查看指標
gcloud run services describe momo-pro-system --region=asia-east1

# 更新服務
./deploy_scripts/deploy_cloudrun.sh

Docker (本機/VM)

# 查看日誌
docker-compose logs -f

# 查看狀態
docker-compose ps

# 重啟服務
docker-compose restart

# 更新服務
docker-compose down
docker-compose pull
docker-compose up -d

💾 備份策略

自動備份(推薦)

# 設定每日自動備份到 Cloud Storage
# 1. 建立 bucket
gsutil mb -l asia-east1 gs://momo-backups

# 2. 設定 cron job
0 2 * * * cd /app && ./deploy_scripts/backup.sh && gsutil cp backups/*.zip gs://momo-backups/

手動備份

# 執行備份腳本
./deploy_scripts/backup.sh

# 備份檔案位置
ls -lh ~/backups/

🆘 故障排除

問題 1容器無法啟動

# 查看詳細日誌
docker-compose logs momo-app

# 檢查配置
docker-compose config

問題 2無法連接資料庫

# 檢查資料庫檔案
ls -lh data/momo_database.db

# 測試資料庫連接
docker exec momo-pro-system python -c "import sqlite3; print(sqlite3.connect('/app/data/momo_database.db'))"

問題 3Email 無法發送

# 檢查環境變數
docker exec momo-pro-system env | grep EMAIL

# 測試 SMTP 連接
docker exec momo-pro-system python -c "
import smtplib
import os
smtp = smtplib.SMTP(os.getenv('SMTP_SERVER'), int(os.getenv('SMTP_PORT')))
smtp.starttls()
print('SMTP 連接成功')
"

問題 4Cloud Run 超時

# 增加超時時間
gcloud run services update momo-pro-system \
    --timeout=900 \
    --region=asia-east1

💰 成本優化

Cloud Run 優化

# 設定最小實例為 0沒流量時不收費
gcloud run services update momo-pro-system \
    --min-instances=0 \
    --region=asia-east1

# 減少記憶體配置
gcloud run services update momo-pro-system \
    --memory=1Gi \
    --region=asia-east1

VM 優化

# 使用 Preemptible VM可節省 80% 成本)
gcloud compute instances create momo-server \
    --preemptible \
    --machine-type=e2-small

# 使用 Spot VM新版 Preemptible
gcloud compute instances create momo-server \
    --provisioning-model=SPOT \
    --machine-type=e2-small

🔒 安全性建議

  1. 使用 Secret Manager 儲存敏感資訊
  2. 啟用 HTTPSCloud Run 自動VM 需設定)
  3. 限制訪問權限(使用 IAM
  4. 定期更新依賴
  5. 啟用日誌監控

📞 支援


🎯 快速決策指南

選擇 Cloud Run如果

  • 想要最簡單的部署
  • 流量不穩定(自動擴展)
  • 預算有限(按用量付費)

選擇本機 Docker如果

  • 只是開發測試
  • 不需要公開訪問
  • 想學習 Docker

選擇 VM如果

  • 需要完全控制權
  • 有特殊環境需求
  • 已有 VM 資源

不要選擇 GKE除非

  • 需要複雜的微服務架構
  • 有專業 DevOps 團隊
  • 預算充足

推薦:使用 Cloud Run 開始,需要時再遷移到其他方案。