Files
ewoooc/docker/superset/deploy.sh
ogt 1b4f3a7bbe
Some checks failed
CD Pipeline / deploy (push) Failing after 59s
feat: EwoooC 初始化 — 完整專案推版至 Gitea
- 建立 Gitea Actions CD pipeline (.gitea/workflows/cd.yaml)
- 部署模式: rsync Python 檔案至 188 → docker restart (volume mount)
- Dockerfile/requirements 變動時自動重建 Docker image
- 部署通知: Telegram (開始/成功/失敗)
- 健康檢查: https://mo.wooo.work/health (最多 5 次重試)
- 同步最新 CLAUDE.md / ADR-008 / memory (2026-04-19)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 01:21:13 +08:00

187 lines
4.2 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 清除所有資料 (危險)"
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 "登入密碼: Wooo_Superset_2026"
echo ""
echo "下一步:"
echo " 1. 設定 Nginx 反向代理"
echo " 2. 新增資料庫連線 (UAT/GCP)"
echo " 3. 建立資料集和儀表板"
echo ""
}
# 停止服務
stop() {
log_info "停止 Superset 服務..."
docker compose down
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_warn "這將刪除所有 Superset 資料,包括:"
log_warn " - 儀表板"
log_warn " - 圖表"
log_warn " - 資料集"
log_warn " - 資料庫連線設定"
echo ""
read -p "確定要繼續嗎? (輸入 YES 確認): " confirm
if [ "$confirm" = "YES" ]; then
log_info "停止並清除服務..."
docker compose down -v
log_success "已清除所有資料"
else
log_info "已取消"
fi
}
# 主程式
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