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>
580 lines
11 KiB
Markdown
580 lines
11 KiB
Markdown
# MOMO Pro System - 一鍵部署指南 v2.0
|
||
|
||
> 將 MOMO Pro System 完整部署到新的 VM 環境
|
||
> 支援 Docker Compose、Kubernetes、Harbor Registry、監控堆疊
|
||
|
||
## 目錄
|
||
|
||
- [快速開始](#快速開始)
|
||
- [部署模式](#部署模式)
|
||
- [K8s 部署](#k8s-部署)
|
||
- [Harbor 管理](#harbor-管理)
|
||
- [監控堆疊](#監控堆疊)
|
||
- [Systemd 服務](#systemd-服務)
|
||
- [環境需求](#環境需求)
|
||
- [配置說明](#配置說明)
|
||
- [備份與還原](#備份與還原)
|
||
- [SSL 憑證](#ssl-憑證)
|
||
- [故障排除](#故障排除)
|
||
|
||
---
|
||
|
||
## 快速開始
|
||
|
||
### Docker Compose 部署(最簡單)
|
||
|
||
```bash
|
||
# 1. 進入部署目錄
|
||
cd deploy
|
||
|
||
# 2. 執行部署腳本
|
||
chmod +x deploy.sh
|
||
./deploy.sh deploy
|
||
|
||
# 3. 依照提示完成配置
|
||
```
|
||
|
||
### Kubernetes 部署
|
||
|
||
```bash
|
||
# 部署到 K8s(含 Harbor 映像推送)
|
||
./deploy.sh --k8s deploy
|
||
|
||
# 或分步驟執行
|
||
./deploy.sh harbor-push # 建構並推送映像
|
||
./deploy.sh k8s-deploy # 部署到 K8s
|
||
```
|
||
|
||
### 完整部署流程(生產環境)
|
||
|
||
```bash
|
||
# 1. 環境檢查
|
||
./deploy.sh check
|
||
|
||
# 2. 部署應用 + 設定開機自動啟動
|
||
./deploy.sh --with-systemd deploy
|
||
|
||
# 3. 設定 SSL 憑證
|
||
./deploy.sh -d mo.wooo.work ssl
|
||
|
||
# 4. 部署監控堆疊
|
||
./deploy.sh monitoring-deploy
|
||
|
||
# 5. 健康檢查
|
||
./deploy.sh health
|
||
```
|
||
|
||
---
|
||
|
||
## 部署模式
|
||
|
||
### 模式 A: Docker Compose 本地部署
|
||
|
||
```bash
|
||
./deploy.sh deploy
|
||
# 或
|
||
./deploy.sh --local deploy
|
||
```
|
||
|
||
**適用場景:**
|
||
- 開發/測試環境
|
||
- 單機部署
|
||
|
||
### 模式 B: Kubernetes 部署
|
||
|
||
```bash
|
||
./deploy.sh --k8s deploy
|
||
```
|
||
|
||
**適用場景:**
|
||
- 生產環境
|
||
- 需要高可用性
|
||
- 需要自動擴展
|
||
|
||
### 模式 C: SSH 遠端部署
|
||
|
||
```bash
|
||
./deploy.sh --ssh \
|
||
-h 192.168.1.100 \
|
||
-u wooo \
|
||
-p /opt/momo-pro-system \
|
||
deploy
|
||
```
|
||
|
||
**前置需求:**
|
||
- SSH 金鑰已設定(無密碼登入)
|
||
- 遠端主機已安裝 Docker
|
||
|
||
### 模式 D: 匯出部署包
|
||
|
||
```bash
|
||
# 不含資料
|
||
./deploy.sh --export
|
||
|
||
# 含資料庫備份
|
||
./deploy.sh --export --with-data
|
||
```
|
||
|
||
**輸出檔案:**
|
||
```
|
||
momo-pro-system_20260129_143000.tar.gz
|
||
```
|
||
|
||
---
|
||
|
||
## K8s 部署
|
||
|
||
### K8s 命令
|
||
|
||
| 命令 | 說明 |
|
||
|------|------|
|
||
| `./deploy.sh k8s-deploy` | 部署到 Kubernetes |
|
||
| `./deploy.sh k8s-status` | 查看部署狀態 |
|
||
| `./deploy.sh k8s-logs` | 查看應用日誌 |
|
||
| `./deploy.sh k8s-rollback` | 回滾到上一版本 |
|
||
| `./deploy.sh k8s-cleanup` | 清理所有 K8s 資源 |
|
||
|
||
### K8s 選項
|
||
|
||
| 選項 | 說明 |
|
||
|------|------|
|
||
| `-n, --namespace` | K8s 命名空間(預設: momo) |
|
||
|
||
### K8s 部署流程
|
||
|
||
```bash
|
||
# 1. 建構並推送映像
|
||
./deploy.sh harbor-push
|
||
|
||
# 2. 部署到 K8s
|
||
./deploy.sh -n momo k8s-deploy
|
||
|
||
# 3. 查看狀態
|
||
./deploy.sh k8s-status
|
||
|
||
# 4. 查看日誌
|
||
./deploy.sh k8s-logs
|
||
```
|
||
|
||
### K8s 回滾
|
||
|
||
```bash
|
||
# 回滾 momo-app
|
||
./deploy.sh k8s-rollback
|
||
|
||
# 回滾特定 deployment
|
||
kubectl rollout undo deployment/momo-scheduler -n momo
|
||
```
|
||
|
||
---
|
||
|
||
## Harbor 管理
|
||
|
||
### Harbor 命令
|
||
|
||
| 命令 | 說明 |
|
||
|------|------|
|
||
| `./deploy.sh harbor-install` | 安裝 Harbor Registry |
|
||
| `./deploy.sh harbor-push` | 建構並推送映像 |
|
||
| `./deploy.sh harbor-scan` | 執行容器安全掃描 |
|
||
| `./deploy.sh harbor-health` | 檢查 Harbor 健康狀態 |
|
||
|
||
### Harbor 選項
|
||
|
||
| 選項 | 說明 |
|
||
|------|------|
|
||
| `--registry` | Harbor URL(預設: harbor.wooo.work) |
|
||
| `--harbor-user` | Harbor 用戶名(預設: admin) |
|
||
| `--harbor-pass` | Harbor 密碼 |
|
||
|
||
### 使用 Harbor
|
||
|
||
```bash
|
||
# 登入 Harbor
|
||
docker login harbor.wooo.work -u admin
|
||
|
||
# 建構並推送映像
|
||
./deploy.sh harbor-push
|
||
|
||
# 安全掃描
|
||
./deploy.sh harbor-scan
|
||
```
|
||
|
||
---
|
||
|
||
## 監控堆疊
|
||
|
||
### 監控命令
|
||
|
||
| 命令 | 說明 |
|
||
|------|------|
|
||
| `./deploy.sh monitoring-deploy` | 部署監控堆疊 |
|
||
| `./deploy.sh monitoring-status` | 查看監控狀態 |
|
||
|
||
### 監控組件
|
||
|
||
| 組件 | 端口 | 用途 |
|
||
|------|------|------|
|
||
| Prometheus | 9090 | 指標收集 |
|
||
| Grafana | 3000 | 視覺化儀表板 |
|
||
| Alertmanager | 9093 | 告警管理 |
|
||
| Node Exporter | 9100 | 主機監控 |
|
||
| cAdvisor | 8080 | 容器監控 |
|
||
| Loki | 3100 | 日誌收集 |
|
||
|
||
### 部署監控
|
||
|
||
```bash
|
||
# Docker 環境
|
||
./deploy.sh monitoring-deploy
|
||
|
||
# K8s 環境(使用 Helm)
|
||
./deploy.sh --k8s monitoring-deploy
|
||
```
|
||
|
||
### 存取監控
|
||
|
||
| 服務 | URL | 帳號 |
|
||
|------|-----|------|
|
||
| Grafana | http://localhost:3000 | admin / Wooo_Grafana_2026 |
|
||
| Prometheus | http://localhost:9090 | - |
|
||
|
||
---
|
||
|
||
## Systemd 服務
|
||
|
||
### Systemd 命令
|
||
|
||
| 命令 | 說明 |
|
||
|------|------|
|
||
| `./deploy.sh systemd-setup` | 設定開機自動啟動 |
|
||
| `./deploy.sh systemd-status` | 查看服務狀態 |
|
||
|
||
### 設定開機啟動
|
||
|
||
```bash
|
||
# 方法一:部署時設定
|
||
./deploy.sh --with-systemd deploy
|
||
|
||
# 方法二:單獨設定
|
||
./deploy.sh systemd-setup
|
||
```
|
||
|
||
### 服務管理
|
||
|
||
```bash
|
||
# 查看服務狀態
|
||
systemctl status momo-pro-system
|
||
|
||
# 重啟服務
|
||
sudo systemctl restart momo-pro-system
|
||
|
||
# 停止服務
|
||
sudo systemctl stop momo-pro-system
|
||
```
|
||
|
||
### 建立的 Systemd 服務
|
||
|
||
| 服務 | 說明 |
|
||
|------|------|
|
||
| `momo-pro-system.service` | 主應用程式 |
|
||
| `harbor.service` | Harbor Registry |
|
||
| `gitlab.service` | GitLab CE |
|
||
| `n8n.service` | n8n 自動化 |
|
||
| `momo-monitoring.service` | 監控堆疊 |
|
||
| `momo-health-check.timer` | 健康監控定時器 |
|
||
|
||
---
|
||
|
||
## 環境需求
|
||
|
||
### 硬體需求
|
||
|
||
| 項目 | 最低需求 | 建議配置 |
|
||
|------|----------|----------|
|
||
| CPU | 4 核心 | 8 核心 |
|
||
| RAM | 8 GB | 16 GB |
|
||
| 硬碟 | 50 GB SSD | 100 GB SSD |
|
||
|
||
### 軟體需求
|
||
|
||
| 軟體 | 版本 | 說明 |
|
||
|------|------|------|
|
||
| Docker | 20.10+ | 容器運行環境 |
|
||
| Docker Compose | v2.0+ | 容器編排 |
|
||
| kubectl | 1.28+ | K8s 客戶端(K8s 模式) |
|
||
| Helm | 3.0+ | K8s 套件管理(監控用) |
|
||
| curl | - | HTTP 請求 |
|
||
|
||
### 端口需求
|
||
|
||
| 端口 | 服務 | 必要 |
|
||
|------|------|------|
|
||
| 80/443 | Nginx | ✓ |
|
||
| 5001 | Flask App | ✓(Docker 模式) |
|
||
| 5432 | PostgreSQL | ✓ |
|
||
| 3000 | Grafana | 選填 |
|
||
| 9090 | Prometheus | 選填 |
|
||
| 5678 | n8n | 選填 |
|
||
| 5050 | Harbor | 選填 |
|
||
|
||
---
|
||
|
||
## 配置說明
|
||
|
||
### 互動式配置
|
||
|
||
部署時會提示輸入以下配置:
|
||
|
||
```
|
||
資料庫配置
|
||
──────────────────────────────────
|
||
PostgreSQL 用戶名 [momo]:
|
||
PostgreSQL 密碼 [自動生成]:
|
||
|
||
應用程式配置
|
||
──────────────────────────────────
|
||
Flask Secret Key [自動生成]:
|
||
|
||
Ollama AI 配置
|
||
──────────────────────────────────
|
||
Ollama Host [http://192.168.0.188:11434]:
|
||
|
||
通知服務配置
|
||
──────────────────────────────────
|
||
Telegram Bot Token []:
|
||
Telegram Chat ID []:
|
||
```
|
||
|
||
### 使用預設配置
|
||
|
||
```bash
|
||
./deploy.sh -y deploy
|
||
```
|
||
|
||
### 使用自訂配置檔
|
||
|
||
```bash
|
||
# 複製模板
|
||
cp deploy/configs/.env.template .env
|
||
|
||
# 編輯配置
|
||
nano .env
|
||
|
||
# 使用自訂配置部署
|
||
./deploy.sh -e .env deploy
|
||
```
|
||
|
||
---
|
||
|
||
## 備份與還原
|
||
|
||
### 完整備份
|
||
|
||
```bash
|
||
./deploy.sh backup
|
||
```
|
||
|
||
**備份內容:**
|
||
- PostgreSQL 完整資料庫(SQL 格式)
|
||
- 所有資料表的 CSV 匯出
|
||
- 配置檔案(.env, docker-compose.yml)
|
||
- n8n 工作流程
|
||
|
||
**輸出位置:**
|
||
```
|
||
backups/momo_backup_20260129_143000.tar.gz
|
||
```
|
||
|
||
### 從備份還原
|
||
|
||
```bash
|
||
./deploy.sh -b backups/momo_backup_20260129.tar.gz restore
|
||
```
|
||
|
||
### 定時備份
|
||
|
||
```bash
|
||
# 每天凌晨 2 點備份
|
||
0 2 * * * cd /opt/momo-pro-system && ./deploy/deploy.sh -y backup
|
||
```
|
||
|
||
---
|
||
|
||
## SSL 憑證
|
||
|
||
### 申請 Let's Encrypt 憑證
|
||
|
||
```bash
|
||
./deploy.sh -d momo.example.com ssl
|
||
```
|
||
|
||
**前置需求:**
|
||
1. 域名已解析到此伺服器
|
||
2. 端口 80 可被外部存取
|
||
|
||
### 手動續期
|
||
|
||
```bash
|
||
certbot renew --force-renewal
|
||
docker restart momo-nginx
|
||
```
|
||
|
||
---
|
||
|
||
## 命令參考
|
||
|
||
### 基本命令
|
||
|
||
| 命令 | 說明 |
|
||
|------|------|
|
||
| `deploy` | 執行完整部署 |
|
||
| `backup` | 備份現有環境 |
|
||
| `restore` | 從備份還原 |
|
||
| `check` | 環境檢查 |
|
||
| `health` | 健康檢查 |
|
||
| `ssl` | 設定 SSL 憑證 |
|
||
| `export` | 匯出部署包 |
|
||
|
||
### K8s 命令
|
||
|
||
| 命令 | 說明 |
|
||
|------|------|
|
||
| `k8s-deploy` | 部署到 K8s |
|
||
| `k8s-status` | 查看 K8s 狀態 |
|
||
| `k8s-logs` | 查看 K8s 日誌 |
|
||
| `k8s-rollback` | 回滾 K8s 部署 |
|
||
| `k8s-cleanup` | 清理 K8s 資源 |
|
||
|
||
### Harbor 命令
|
||
|
||
| 命令 | 說明 |
|
||
|------|------|
|
||
| `harbor-install` | 安裝 Harbor |
|
||
| `harbor-push` | 推送映像 |
|
||
| `harbor-scan` | 安全掃描 |
|
||
| `harbor-health` | 健康檢查 |
|
||
|
||
### 監控命令
|
||
|
||
| 命令 | 說明 |
|
||
|------|------|
|
||
| `monitoring-deploy` | 部署監控 |
|
||
| `monitoring-status` | 監控狀態 |
|
||
|
||
### Systemd 命令
|
||
|
||
| 命令 | 說明 |
|
||
|------|------|
|
||
| `systemd-setup` | 設定服務 |
|
||
| `systemd-status` | 服務狀態 |
|
||
|
||
---
|
||
|
||
## 選項參考
|
||
|
||
| 選項 | 說明 |
|
||
|------|------|
|
||
| `--local` | Docker Compose 部署 |
|
||
| `--k8s` | Kubernetes 部署 |
|
||
| `--ssh` | SSH 遠端部署 |
|
||
| `--export` | 匯出部署包 |
|
||
| `-h, --host` | SSH 目標主機 |
|
||
| `-u, --user` | SSH 用戶名 |
|
||
| `-p, --path` | 遠端路徑 |
|
||
| `-n, --namespace` | K8s 命名空間 |
|
||
| `--registry` | Harbor URL |
|
||
| `-e, --env-file` | 環境變數檔案 |
|
||
| `-d, --domain` | 域名 |
|
||
| `-b, --backup` | 備份檔案路徑 |
|
||
| `--no-monitoring` | 不部署監控 |
|
||
| `--with-data` | 包含資料 |
|
||
| `--with-systemd` | 設定開機啟動 |
|
||
| `-y, --yes` | 跳過確認 |
|
||
|
||
---
|
||
|
||
## 故障排除
|
||
|
||
### Docker 連線失敗
|
||
|
||
```bash
|
||
sudo systemctl restart docker
|
||
```
|
||
|
||
### K8s 部署失敗
|
||
|
||
```bash
|
||
# 查看 Pod 狀態
|
||
kubectl get pods -n momo
|
||
|
||
# 查看詳細事件
|
||
kubectl describe pod <pod-name> -n momo
|
||
|
||
# 查看日誌
|
||
kubectl logs deployment/momo-app -n momo
|
||
```
|
||
|
||
### Harbor 登入失敗
|
||
|
||
```bash
|
||
# 確認 Harbor 運行中
|
||
docker ps | grep harbor
|
||
|
||
# 重啟 Harbor
|
||
cd /home/wooo/devops/harbor/harbor
|
||
docker compose restart
|
||
```
|
||
|
||
### 服務無法啟動
|
||
|
||
```bash
|
||
# 查看容器日誌
|
||
docker compose logs
|
||
|
||
# 查看 systemd 日誌
|
||
journalctl -u momo-pro-system -f
|
||
```
|
||
|
||
---
|
||
|
||
## 目錄結構
|
||
|
||
```
|
||
deploy/
|
||
├── deploy.sh # 主入口腳本 v2.0
|
||
├── README.md # 本文件
|
||
├── lib/
|
||
│ ├── common.sh # 通用函數
|
||
│ ├── check.sh # 環境檢查
|
||
│ ├── config.sh # 配置生成
|
||
│ ├── docker.sh # Docker 操作
|
||
│ ├── database.sh # 資料庫備份/還原
|
||
│ ├── ssl.sh # SSL 憑證
|
||
│ ├── health.sh # 健康檢查
|
||
│ ├── k8s.sh # K8s 部署(新增)
|
||
│ ├── harbor.sh # Harbor 管理(新增)
|
||
│ ├── monitoring.sh # 監控堆疊(新增)
|
||
│ └── systemd.sh # Systemd 服務(新增)
|
||
└── configs/
|
||
└── .env.template # 環境變數模板
|
||
```
|
||
|
||
---
|
||
|
||
## 更新記錄
|
||
|
||
- **2026-01-29**: v2.0.0
|
||
- 新增 Kubernetes 部署支援
|
||
- 新增 Harbor Registry 整合
|
||
- 新增監控堆疊部署 (Prometheus/Grafana/Loki)
|
||
- 新增 Systemd 服務管理
|
||
- 新增容器安全掃描功能
|
||
- 增強健康監控和自動修復
|
||
|
||
- **2026-01-26**: v1.0.0
|
||
- 初始版本
|
||
- 支援本地、SSH、匯出三種部署模式
|
||
- 完整資料庫備份/還原
|
||
- Let's Encrypt SSL 自動化
|