#!/bin/bash # ============================================================================= # Apache Superset 部署腳本 # MOMO Pro System - UAT 環境 # ============================================================================= set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$SCRIPT_DIR" # 顏色定義 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' log_info() { echo -e "${BLUE}[INFO]${NC} $1"; } log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; } log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; } log_error() { echo -e "${RED}[ERROR]${NC} $1"; } # 顯示使用方式 usage() { echo "使用方式: $0 [命令]" echo "" echo "命令:" echo " deploy 部署 Superset (預設)" echo " stop 停止 Superset" echo " restart 重啟 Superset" echo " logs 查看日誌" echo " status 查看狀態" echo " clean 已停用:避免誤刪 Superset 資料" echo "" } # 部署 Superset deploy() { log_info "開始部署 Apache Superset..." # 檢查 Docker if ! command -v docker &> /dev/null; then log_error "Docker 未安裝" exit 1 fi # 拉取映像 log_info "拉取 Docker 映像..." docker compose pull # 啟動服務 log_info "啟動 Superset 服務..." docker compose up -d # 等待健康檢查 log_info "等待服務啟動 (約 2 分鐘)..." local max_wait=180 local waited=0 local interval=10 while [ $waited -lt $max_wait ]; do if docker compose ps | grep -q "healthy"; then log_success "Superset 啟動成功!" break fi # 檢查是否有容器失敗 if docker compose ps | grep -q "Exit"; then log_error "容器啟動失敗" docker compose logs --tail=50 exit 1 fi sleep $interval waited=$((waited + interval)) log_info "等待中... ($waited/$max_wait 秒)" done if [ $waited -ge $max_wait ]; then log_warn "等待超時,請手動檢查服務狀態" docker compose ps fi # 顯示訪問資訊 echo "" log_success "==========================================" log_success "Apache Superset 部署完成!" log_success "==========================================" echo "" echo "內部訪問: http://127.0.0.1:8088" echo "外部訪問: https://monitor.wooo.work/superset/" echo "" echo "登入帳號: admin" echo "登入密碼: " echo "" echo "下一步:" echo " 1. 設定 Nginx 反向代理" echo " 2. 新增資料庫連線 (UAT/GCP)" echo " 3. 建立資料集和儀表板" echo "" } # 停止服務 stop() { log_info "停止 Superset 服務..." docker compose stop log_success "服務已停止" } # 重啟服務 restart() { log_info "重啟 Superset 服務..." docker compose restart log_success "服務已重啟" } # 查看日誌 logs() { docker compose logs -f --tail=100 } # 查看狀態 status() { echo "" log_info "Superset 服務狀態:" echo "" docker compose ps echo "" # 檢查健康狀態 if docker compose ps | grep -q "healthy"; then log_success "所有服務運行正常" elif docker compose ps | grep -q "unhealthy"; then log_warn "有服務不健康" fi } # 清除所有資料 clean() { log_error "clean 已停用:資料清除必須先完成備份與人工審核" log_error "如需重建 Superset,請先匯出儀表板、確認 volume 名稱,再由維運人員手動處理" exit 1 } # 主程式 case "${1:-deploy}" in deploy) deploy ;; stop) stop ;; restart) restart ;; logs) logs ;; status) status ;; clean) clean ;; -h|--help) usage ;; *) log_error "未知命令: $1" usage exit 1 ;; esac