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

255 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 自動啟動:
```bash
# 自動啟動的服務
systemctl is-enabled docker # enabled
systemctl is-enabled k3s # enabled
systemctl is-enabled nginx # enabled
```
### 階段 2: Harbor Registry (60-120秒)
Harbor 必須在 K8s 應用之前啟動,因為 Pod 需要拉取映像。
```bash
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 先就緒。
```bash
# 檢查 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 可以在背景啟動。
```bash
docker start gitlab gitlab-runner
docker start momo-n8n
```
### 階段 5: 監控服務 (240-360秒)
```bash
cd /home/wooo/monitoring
docker compose up -d
```
## 自動啟動機制
### systemd 服務配置
```bash
# 安裝啟動服務
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
```
### 手動執行啟動腳本
```bash
sudo /home/wooo/momo_pro_system/scripts/tools/system_startup_complete.sh
```
### 查看啟動日誌
```bash
# systemd 日誌
sudo journalctl -u momo-startup-complete.service
# 啟動腳本日誌
sudo tail -f /var/log/momo_startup.log
```
## 故障排除
### Harbor 無法啟動
```bash
# 檢查 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
```bash
# 檢查 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 不穩定
```bash
# 檢查 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`