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>
360 lines
7.1 KiB
Markdown
360 lines
7.1 KiB
Markdown
# 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 開始,需要時再遷移到其他方案。**
|