175 lines
4.0 KiB
Bash
Executable File
175 lines
4.0 KiB
Bash
Executable File
#!/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 "登入密碼: <SUPERSET_ADMIN_PASSWORD>"
|
||
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
|