#!/bin/bash # Deploy-Script mit Uptime-Kuma-Wartungsmodus # Usage: ./scripts/deploy.sh [files...] # Ohne Argumente: alles deployen # # Setzt den GWÖ-Monitor in Uptime Kuma auf Wartung, # deployed, und aktiviert den Monitor wieder. # # Benötigt: UPTIME_KUMA_USER + UPTIME_KUMA_PASS in ~/.env oder als ENV set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" PROJECT_DIR="$(dirname "$SCRIPT_DIR")" SERVER="vserver" REMOTE_DIR="/opt/gwoe-antragspruefer" UPTIME_KUMA_URL="https://status.toppyr.de" MONITOR_ID=9 # GWÖ-Antragsprüfer # Credentials laden if [ -f ~/.env ]; then source ~/.env fi cd "$PROJECT_DIR" # Branch-Guard: Prod (gwoe.toppyr.de) ist auf release/1.0 festgelegt. # 1.x-Entwicklung laeuft auf gwoe-dev.toppyr.de via Cron-Auto-Deploy aus main. CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "") EXPECTED_BRANCH="release/1.0" if [ "${1:-}" = "--force" ]; then shift echo "⚠ --force aktiv: Branch-Guard übersprungen ($CURRENT_BRANCH)" elif [ "$CURRENT_BRANCH" != "$EXPECTED_BRANCH" ]; then cat </dev/null || echo " (Uptime Kuma nicht erreichbar, überspringe)" else echo "⚠ UPTIME_KUMA_USER/PASS nicht gesetzt, überspringe Wartungsmodus" fi # 2. Build + Deploy if [ $# -gt 0 ]; then # Spezifische Files echo "📦 Packe: $@" tar czf /tmp/gwoe-deploy.tar.gz "$@" else # Alles echo "📦 Packe gesamtes Projekt (ohne venv/data/reports)..." tar czf /tmp/gwoe-deploy.tar.gz \ --exclude='venv' --exclude='__pycache__' \ --exclude='data' --exclude='reports' --exclude='.env' . fi echo "🚀 Upload + Build..." scp /tmp/gwoe-deploy.tar.gz "$SERVER:/tmp/" ssh "$SERVER" "cd $REMOTE_DIR && tar xzf /tmp/gwoe-deploy.tar.gz && docker compose up -d --build" 2>&1 | tail -5 # 3. Warte auf Health echo "⏳ Warte auf Health-Check..." for i in $(seq 1 30); do code=$(curl -sS -o /dev/null -w "%{http_code}" --max-time 3 "https://gwoe.toppyr.de/health" 2>/dev/null || echo "000") if [ "$code" = "200" ]; then echo "✅ Health OK nach ${i}s" break fi sleep 1 done # 4. Uptime Kuma wieder aktivieren if [ -n "${UPTIME_KUMA_USER:-}" ] && [ -n "${UPTIME_KUMA_PASS:-}" ]; then echo "▶ Reaktiviere Monitor..." python3 -c " from uptime_kuma_api import UptimeKumaApi api = UptimeKumaApi('$UPTIME_KUMA_URL') api.login('$UPTIME_KUMA_USER', '$UPTIME_KUMA_PASS') api.resume_monitor($MONITOR_ID) api.disconnect() print(' Monitor aktiv') " 2>/dev/null || echo " (Uptime Kuma nicht erreichbar)" fi echo "=== Deploy abgeschlossen ==="