# Momo Pro System - 部署快速指南 ## 🚀 推薦方案對比 | 方案 | 成本/月 | 部署難度 | 維護成本 | 擴展性 | 推薦度 | |-----|--------|---------|---------|--------|-------| | **Cloud Run** | $10-30 | ⭐ 極易 | ⭐ 極低 | ⭐⭐⭐ 高 | ⭐⭐⭐⭐⭐ | | Docker (本機) | $0 | ⭐⭐ 容易 | ⭐⭐ 低 | ⭐ 低 | ⭐⭐⭐⭐ | | VM (Compute Engine) | $32 | ⭐⭐⭐ 中等 | ⭐⭐⭐ 中 | ⭐⭐ 中 | ⭐⭐⭐ | | GKE (Kubernetes) | $123+ | ⭐⭐⭐⭐⭐ 困難 | ⭐⭐⭐⭐ 高 | ⭐⭐⭐ 高 | ⭐⭐ | --- ## 🎯 方案一:Cloud Run(最推薦) **特點:** - ✅ 完全託管,自動擴展 - ✅ 按使用付費,沒流量不收費 - ✅ 自動 HTTPS - ✅ 5 分鐘部署完成 ### 快速部署 ```bash # 一鍵部署 ./deploy_scripts/deploy_cloudrun.sh ``` 或手動部署: ```bash # 登入 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](deploy_docker_guide.md) --- ## 🏠 方案二:本機 Docker 測試 **適合:** - 本機開發測試 - 不需要公開訪問 - 學習 Docker ### 快速啟動 ```bash # 一鍵測試 ./deploy_scripts/test_docker_local.sh ``` 或手動啟動: ```bash # 啟動容器 docker-compose up -d # 訪問 open http://localhost # 查看日誌 docker-compose logs -f # 停止 docker-compose down ``` --- ## 🖥️ 方案三:VM 部署(傳統方式) **適合:** - 需要完全控制 - 已有 VM 資源 - 自定義環境需求 ### Docker 方式(推薦) ```bash # 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 ``` ### 傳統方式 ```bash # 使用傳統腳本部署 # 在 VM 上執行 ./deploy_scripts/setup_vm.sh ./deploy_scripts/setup_service.sh ./deploy_scripts/setup_nginx.sh ``` **詳細文檔:** [deploy_gcp_guide.md](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 檔案 ```bash # 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 ```bash # 查看日誌 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) ```bash # 查看日誌 docker-compose logs -f # 查看狀態 docker-compose ps # 重啟服務 docker-compose restart # 更新服務 docker-compose down docker-compose pull docker-compose up -d ``` --- ## 💾 備份策略 ### 自動備份(推薦) ```bash # 設定每日自動備份到 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/ ``` ### 手動備份 ```bash # 執行備份腳本 ./deploy_scripts/backup.sh # 備份檔案位置 ls -lh ~/backups/ ``` --- ## 🆘 故障排除 ### 問題 1:容器無法啟動 ```bash # 查看詳細日誌 docker-compose logs momo-app # 檢查配置 docker-compose config ``` ### 問題 2:無法連接資料庫 ```bash # 檢查資料庫檔案 ls -lh data/momo_database.db # 測試資料庫連接 docker exec momo-pro-system python -c "import sqlite3; print(sqlite3.connect('/app/data/momo_database.db'))" ``` ### 問題 3:Email 無法發送 ```bash # 檢查環境變數 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 連接成功') " ``` ### 問題 4:Cloud Run 超時 ```bash # 增加超時時間 gcloud run services update momo-pro-system \ --timeout=900 \ --region=asia-east1 ``` --- ## 💰 成本優化 ### Cloud Run 優化 ```bash # 設定最小實例為 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 優化 ```bash # 使用 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. **啟用 HTTPS**(Cloud Run 自動,VM 需設定) 3. **限制訪問權限**(使用 IAM) 4. **定期更新依賴** 5. **啟用日誌監控** --- ## 📞 支援 - **Docker 詳細指南:** [deploy_docker_guide.md](deploy_docker_guide.md) - **傳統 VM 指南:** [deploy_gcp_guide.md](deploy_gcp_guide.md) - **GCP 文檔:** https://cloud.google.com/docs - **Docker 文檔:** https://docs.docker.com --- ## 🎯 快速決策指南 **選擇 Cloud Run,如果:** - ✅ 想要最簡單的部署 - ✅ 流量不穩定(自動擴展) - ✅ 預算有限(按用量付費) **選擇本機 Docker,如果:** - ✅ 只是開發測試 - ✅ 不需要公開訪問 - ✅ 想學習 Docker **選擇 VM,如果:** - ✅ 需要完全控制權 - ✅ 有特殊環境需求 - ✅ 已有 VM 資源 **不要選擇 GKE,除非:** - ✅ 需要複雜的微服務架構 - ✅ 有專業 DevOps 團隊 - ✅ 預算充足 --- **推薦:使用 Cloud Run 開始,需要時再遷移到其他方案。**