Files
ewoooc/docs/SERVICE_DEPENDENCIES.md
OoO db21e7e8e8
Some checks failed
CD Pipeline / deploy (push) Has been cancelled
fix(devops): 移除 startup 腳本危險 compose 操作
2026-04-30 14:05:41 +08:00

12 KiB
Raw Blame History

MOMO Pro System 服務啟動順序與依賴關係

更新日期: 2026-02-06 版本: 2.0

服務架構總覽

                     ┌─────────────────────────────────────────┐
                     │           系統重開機                      │
                     └────────────────┬────────────────────────┘
                                      │
                                      ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ 第一層: 基礎服務 (系統自動啟動)                                              │
├─────────────────────────────────────────────────────────────────────────────┤
│  ┌──────────────┐    ┌──────────────┐    ┌──────────────┐                   │
│  │   Docker     │    │   K3s        │    │   Nginx      │                   │
│  │   systemd    │    │   systemd    │    │   systemd    │                   │
│  │   :自動啟動  │    │   :自動啟動  │    │   :自動啟動  │                   │
│  └──────┬───────┘    └──────┬───────┘    └──────────────┘                   │
│         │                   │                                               │
└─────────┼───────────────────┼───────────────────────────────────────────────┘
          │                   │
          ▼                   ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ 第二層: 核心服務                                                            │
├─────────────────────────────────────────────────────────────────────────────┤
│  ┌──────────────┐    ┌──────────────────────────────────────────────────┐  │
│  │   Harbor     │    │   K8s Services (K3s 管理)                        │  │
│  │   Registry   │    │                                                   │  │
│  │   :5050      │    │  ┌─────────────┐  ┌─────────────┐  ┌───────────┐ │  │
│  │              │    │  │ PostgreSQL  │→ │  momo-app   │→ │ scheduler │ │  │
│  │  依賴:Docker │    │  │   :5432     │  │    :80      │  │           │ │  │
│  └──────┬───────┘    │  └─────────────┘  └─────────────┘  └───────────┘ │  │
│         │            │                                                   │  │
│         │            │  依賴: K3s, Harbor (映像拉取)                     │  │
│         │            └──────────────────────────────────────────────────┘  │
└─────────┼───────────────────────────────────────────────────────────────────┘
          │
          ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ 第三層: DevOps 服務                                                         │
├─────────────────────────────────────────────────────────────────────────────┤
│  ┌──────────────┐    ┌──────────────┐                                       │
│  │   GitLab     │    │   n8n        │                                       │
│  │   :8929      │    │   :5678      │                                       │
│  │              │    │              │                                       │
│  │ 依賴:Docker  │    │ 依賴:Docker  │                                       │
│  └──────────────┘    └──────────────┘                                       │
└─────────────────────────────────────────────────────────────────────────────┘
          │
          ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ 第四層: 監控服務                                                            │
├─────────────────────────────────────────────────────────────────────────────┤
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐    │
│  │  Prometheus  │  │   Grafana    │  │ Alertmanager │  │ Node Exporter│    │
│  │    :9090     │  │    :3000     │  │    :9093     │  │    :9100     │    │
│  │              │  │              │  │              │  │              │    │
│  │ 依賴:Docker  │  │依賴:Prometheus│  │依賴:Prometheus│ │ 依賴:Docker  │    │
│  └──────────────┘  └──────────────┘  └──────────────┘  └──────────────┘    │
└─────────────────────────────────────────────────────────────────────────────┘

服務清單與端口

系統服務 (systemd 管理)

服務 類型 端口 自動啟動 說明
Docker systemd - 容器運行環境
K3s systemd 6443 Kubernetes 叢集
Nginx systemd 80/443 反向代理 + SSL

K8s 服務 (K3s 管理)

服務 類型 端口 Namespace 說明
momo-postgres StatefulSet 5432 momo PostgreSQL 資料庫
momo-app Deployment 80 momo Flask 主應用
momo-scheduler Deployment - momo 爬蟲排程器

Docker 容器服務

服務 容器名稱 端口 依賴 說明
Harbor harbor-* 5050 Docker, Network Container Registry
GitLab gitlab 8929 Docker Git + CI/CD
n8n momo-n8n 5678 Docker 工作流自動化
Prometheus prometheus 9090 Docker 監控數據收集
Grafana grafana 3000 Docker, Prometheus 監控儀表板
Alertmanager alertmanager 9093 Docker, Prometheus 告警管理
Node Exporter node-exporter 9100 Docker 主機指標採集

啟動順序詳解

階段 1: 系統基礎服務 (0-60秒)

系統重開機後systemd 自動啟動:

# 自動啟動的服務
systemctl is-enabled docker    # enabled
systemctl is-enabled k3s       # enabled
systemctl is-enabled nginx     # enabled

階段 2: Harbor Registry (60-120秒)

Harbor 必須在 K8s 應用之前啟動,因為 Pod 需要拉取映像。

cd /home/wooo/devops/harbor/harbor
docker compose up -d

# 等待 Harbor 就緒
while ! curl -s http://127.0.0.1:5050/api/v2.0/ping; do
    sleep 5
done

依賴: Docker 被依賴: K8s momo-app, momo-scheduler

階段 3: K8s 服務 (120-300秒)

K3s 會自動嘗試啟動 Pod但需確保 PostgreSQL 先就緒。

# 檢查 PostgreSQL
kubectl wait --for=condition=ready pod/momo-postgres-0 -n momo --timeout=120s

# 檢查 momo-app
kubectl wait --for=condition=ready -l app=momo-app pod -n momo --timeout=120s

依賴鏈: Harbor → PostgreSQL → momo-app → scheduler

階段 4: DevOps 服務 (180-300秒)

GitLab 和 n8n 可以在背景啟動。

docker start gitlab gitlab-runner
docker start momo-n8n

階段 5: 監控服務 (240-360秒)

cd /home/wooo/monitoring
docker compose up -d

自動啟動機制

systemd 服務配置

# 安裝啟動服務
sudo cp /home/wooo/momo_pro_system/scripts/tools/momo-startup-complete.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable momo-startup-complete.service

# 查看狀態
sudo systemctl status momo-startup-complete.service

手動執行啟動腳本

sudo /home/wooo/momo_pro_system/scripts/tools/system_startup_complete.sh

查看啟動日誌

# systemd 日誌
sudo journalctl -u momo-startup-complete.service

# 啟動腳本日誌
sudo tail -f /var/log/momo_startup.log

故障排除

Harbor 無法啟動

# 檢查 Harbor 日誌
docker logs harbor-core

# 安全重啟 HarborADR-011禁止 down / --remove-orphans
cd /home/wooo/devops/harbor/harbor
docker compose stop
docker compose up -d --force-recreate

K8s Pod ImagePullBackOff

# 檢查 Harbor 連線
curl -v http://127.0.0.1:5050/api/v2.0/ping

# 重建 registry secret
kubectl delete secret harbor-registry -n momo
kubectl create secret docker-registry harbor-registry \
    --docker-server=harbor.wooo.work \
    --docker-username=admin \
    --docker-password=Wooo_Harbor_2026 \
    -n momo

# 重啟 Pods
kubectl rollout restart deployment/momo-app -n momo

PostgreSQL 不穩定

# 檢查 PostgreSQL 日誌
kubectl logs momo-postgres-0 -n momo

# 調整 probe 設定 (如果 probe 過於敏感)
kubectl patch statefulset momo-postgres -n momo -p '{
    "spec": {
        "template": {
            "spec": {
                "containers": [{
                    "name": "postgres",
                    "livenessProbe": {
                        "initialDelaySeconds": 30,
                        "periodSeconds": 30,
                        "timeoutSeconds": 10,
                        "failureThreshold": 5
                    }
                }]
            }
        }
    }
}'

監控與告警

啟動完成後,系統會透過 Telegram 發送通知:

  • 所有服務正常
  • ⚠️ 部分服務異常
  • 啟動失敗

告警接收者:

  • Telegram Bot: @wooowooowooobot
  • Chat ID: 5619078117