Container-Duplikation fuer v1.x-Entwicklung: - docker-compose.dev.yml: eigener Container gwoe-antragspruefer-dev, Traefik-Host gwoe-dev.toppyr.de, Keycloak-Client gwoe-antragspruefer-dev, ohne SMTP (Mail aus Dev = gar nicht), GITEA_FEEDBACK_LABELS=feedback,dev. - scripts/deploy.sh: Branch-Guard verhindert Prod-Deploy aus main; Prod geht nur aus release/1.0 (oder mit --force). Dev-Server zieht main per Cron alle 5 Minuten und baut neu.
108 lines
3.3 KiB
Bash
Executable File
108 lines
3.3 KiB
Bash
Executable File
#!/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 <<EOF
|
|
✗ Prod-Deploy abgebrochen: lokal aktiv ist '$CURRENT_BRANCH', erwartet '$EXPECTED_BRANCH'.
|
|
|
|
Prod (gwoe.toppyr.de) ist auf release/1.0 festgelegt. Vor einem Deploy:
|
|
git checkout release/1.0
|
|
|
|
Fuer Dev (gwoe-dev.toppyr.de) braucht es kein deploy.sh — der Server zieht
|
|
main per Cron alle 5 Minuten.
|
|
|
|
Mit --force kann der Guard ueberbruckt werden (nur in Notfaellen).
|
|
EOF
|
|
exit 1
|
|
fi
|
|
|
|
echo "=== GWÖ-Antragsprüfer Deploy ==="
|
|
|
|
# 1. Uptime Kuma auf Wartung setzen
|
|
if [ -n "${UPTIME_KUMA_USER:-}" ] && [ -n "${UPTIME_KUMA_PASS:-}" ]; then
|
|
echo "⏸ Setze Monitor auf Wartung..."
|
|
python3 -c "
|
|
from uptime_kuma_api import UptimeKumaApi
|
|
api = UptimeKumaApi('$UPTIME_KUMA_URL')
|
|
api.login('$UPTIME_KUMA_USER', '$UPTIME_KUMA_PASS')
|
|
api.pause_monitor($MONITOR_ID)
|
|
api.disconnect()
|
|
print(' Monitor pausiert')
|
|
" 2>/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 ==="
|