# 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 開始，需要時再遷移到其他方案。**
