Some checks failed
CD Pipeline / deploy (push) Failing after 59s
- 建立 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>
187 lines
4.2 KiB
Bash
Executable File
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
|