255 lines
12 KiB
Markdown
255 lines
12 KiB
Markdown
# 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
|
||
|
||
# 安全重啟 Harbor(ADR-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`
|