172 lines
6.6 KiB
Bash
Executable File
172 lines
6.6 KiB
Bash
Executable File
#!/bin/bash
|
||
# =============================================================================
|
||
# WOOO AIOps - 全服務備份總控腳本
|
||
# 版本: 3.0.0
|
||
# 建立日期: 2026-03-12
|
||
# 2026-04-05 Claude Code: 加入 AWOOOI DB (v1→v2) — 首席架構師備份審計
|
||
# 2026-04-05 Claude Code: 加入 Langfuse/Monitoring/SignOz/Open-WebUI/ClawBot (v2→v3) — 備份覆蓋率審計
|
||
# =============================================================================
|
||
|
||
set -euo pipefail
|
||
|
||
source "$(dirname "$0")/common.sh"
|
||
|
||
main() {
|
||
local start_time=$(date +%s)
|
||
local failed=0
|
||
local total=14
|
||
|
||
log_info "╔══════════════════════════════════════════════════════════════╗"
|
||
log_info "║ WOOO AIOps - 全服務備份開始 (v3.0) ║"
|
||
log_info "╚══════════════════════════════════════════════════════════════╝"
|
||
|
||
# 備份 Gitea
|
||
log_info ">>> [1/${total}] 備份 Gitea..."
|
||
if /backup/scripts/backup-gitea.sh; then
|
||
log_success " Gitea 備份成功"
|
||
else
|
||
log_error " Gitea 備份失敗"
|
||
failed=$((failed+1))
|
||
fi
|
||
|
||
# 備份 MOMO Pro
|
||
log_info ">>> [2/${total}] 備份 MOMO Pro..."
|
||
if /backup/scripts/backup-momo.sh; then
|
||
log_success " MOMO Pro 備份成功"
|
||
else
|
||
log_error " MOMO Pro 備份失敗"
|
||
failed=$((failed+1))
|
||
fi
|
||
|
||
# 備份 Harbor
|
||
log_info ">>> [3/${total}] 備份 Harbor..."
|
||
if /backup/scripts/backup-harbor.sh; then
|
||
log_success " Harbor 備份成功"
|
||
else
|
||
log_error " Harbor 備份失敗"
|
||
failed=$((failed+1))
|
||
fi
|
||
|
||
# 備份 AWOOOI DB (awoooi_prod + k3s_datastore)
|
||
# 2026-04-05 Claude Code: 首席架構師備份審計後加入
|
||
log_info ">>> [4/${total}] 備份 AWOOOI DB..."
|
||
if /backup/scripts/backup-awoooi.sh; then
|
||
log_success " AWOOOI DB 備份成功"
|
||
else
|
||
log_error " AWOOOI DB 備份失敗"
|
||
failed=$((failed+1))
|
||
fi
|
||
|
||
# 備份 Langfuse (AI 追蹤/評測數據)
|
||
# 2026-04-05 Claude Code: 備份覆蓋率審計後加入
|
||
log_info ">>> [5/${total}] 備份 Langfuse..."
|
||
if /backup/scripts/backup-langfuse.sh; then
|
||
log_success " Langfuse 備份成功"
|
||
else
|
||
log_error " Langfuse 備份失敗"
|
||
failed=$((failed+1))
|
||
fi
|
||
|
||
# 備份 Monitoring (Prometheus + Grafana + Alertmanager)
|
||
# 2026-04-05 Claude Code: 備份覆蓋率審計後加入
|
||
log_info ">>> [6/${total}] 備份 Monitoring..."
|
||
if /backup/scripts/backup-monitoring.sh; then
|
||
log_success " Monitoring 備份成功"
|
||
else
|
||
log_error " Monitoring 備份失敗"
|
||
failed=$((failed+1))
|
||
fi
|
||
|
||
# 備份 SignOz (ClickHouse + SQLite)
|
||
# 2026-04-05 Claude Code: 備份覆蓋率審計後加入
|
||
log_info ">>> [7/${total}] 備份 SignOz..."
|
||
if /backup/scripts/backup-signoz.sh; then
|
||
log_success " SignOz 備份成功"
|
||
else
|
||
log_error " SignOz 備份失敗"
|
||
failed=$((failed+1))
|
||
fi
|
||
|
||
# 備份 Open-WebUI (LLM 對話紀錄,從 188)
|
||
# 2026-04-05 Claude Code: 備份覆蓋率審計後加入
|
||
log_info ">>> [8/${total}] 備份 Open-WebUI (188)..."
|
||
if /backup/scripts/backup-open-webui.sh; then
|
||
log_success " Open-WebUI 備份成功"
|
||
else
|
||
log_error " Open-WebUI 備份失敗"
|
||
failed=$((failed+1))
|
||
fi
|
||
|
||
# 備份 ClawBot Redis (狀態/快取,從 188,低優先)
|
||
# 2026-04-05 Claude Code: 備份覆蓋率審計後加入
|
||
log_info ">>> [9/${total}] 備份 ClawBot Redis (188)..."
|
||
if /backup/scripts/backup-clawbot.sh; then
|
||
log_success " ClawBot Redis 備份成功"
|
||
else
|
||
log_error " ClawBot Redis 備份失敗"
|
||
failed=$((failed+1))
|
||
fi
|
||
|
||
# Sentry data plane (Postgres, ClickHouse, Kafka, Redis, object state)
|
||
log_info ">>> [10/${total}] 備份 Sentry..."
|
||
if /backup/scripts/backup-sentry.sh; then
|
||
log_success " Sentry 備份成功"
|
||
else
|
||
log_error " Sentry 備份失敗"
|
||
failed=$((failed+1))
|
||
fi
|
||
|
||
# AI model/tooling manifests from 188 (model blobs remain excluded by policy)
|
||
log_info ">>> [11/${total}] 備份 AI artifacts (188)..."
|
||
if /backup/scripts/backup-ai-artifacts.sh; then
|
||
log_success " AI artifacts 備份成功"
|
||
else
|
||
log_error " AI artifacts 備份失敗"
|
||
failed=$((failed+1))
|
||
fi
|
||
|
||
# Host, K3s, service, and recovery configuration state
|
||
log_info ">>> [12/${total}] 備份主機與服務設定..."
|
||
if /backup/scripts/backup-configs.sh; then
|
||
log_success " 主機與服務設定備份成功"
|
||
else
|
||
log_error " 主機與服務設定備份失敗"
|
||
failed=$((failed+1))
|
||
fi
|
||
|
||
# Public route, TLS, DNS-answer, and edge inventory evidence
|
||
log_info ">>> [13/${total}] 備份 public routes..."
|
||
if /backup/scripts/backup-public-routes.sh; then
|
||
log_success " Public routes 備份成功"
|
||
else
|
||
log_error " Public routes 備份失敗"
|
||
failed=$((failed+1))
|
||
fi
|
||
|
||
# Host188 product data planes: VibeWork/FIFA PostgreSQL, FIFA Redis, and n8n.
|
||
log_info ">>> [14/${total}] 備份 Host188 產品資料..."
|
||
if /backup/scripts/backup-host188-products.sh; then
|
||
log_success " Host188 產品資料備份成功"
|
||
else
|
||
log_error " Host188 產品資料備份失敗"
|
||
failed=$((failed+1))
|
||
fi
|
||
|
||
local end_time=$(date +%s)
|
||
local duration=$((end_time - start_time))
|
||
|
||
log_info "╔══════════════════════════════════════════════════════════════╗"
|
||
if [ $failed -eq 0 ]; then
|
||
log_success "║ 全服務備份完成 (${duration}s) - 全部成功 (${total}/${total}) ║"
|
||
notify_clawbot "success" "all" "全服務備份完成 (${total}/${total} 成功)" "${duration}"
|
||
else
|
||
log_error "║ 全服務備份完成 (${duration}s) - ${failed} 個失敗 ($((total-failed))/${total}) ║"
|
||
notify_clawbot "warning" "all" "全服務備份完成 ($((total-failed))/${total} 成功)" "${duration}"
|
||
fi
|
||
log_info "╚══════════════════════════════════════════════════════════════╝"
|
||
|
||
return $failed
|
||
}
|
||
|
||
main "$@"
|