79 lines
2.4 KiB
Bash
79 lines
2.4 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
# Deploy DB zum VServer
|
||
|
|
# Usage: ./scripts/deploy-db.sh [--dry-run]
|
||
|
|
set -e
|
||
|
|
|
||
|
|
LOCAL_DB="data/tracker_remote.db"
|
||
|
|
REMOTE_DB="/opt/antragstracker/data/tracker.db"
|
||
|
|
REMOTE_HOST="vserver"
|
||
|
|
DRY_RUN=false
|
||
|
|
|
||
|
|
if [ "$1" = "--dry-run" ]; then
|
||
|
|
DRY_RUN=true
|
||
|
|
echo "🔍 DRY RUN — keine Änderungen"
|
||
|
|
echo ""
|
||
|
|
fi
|
||
|
|
|
||
|
|
cd "$(dirname "$0")/.."
|
||
|
|
|
||
|
|
echo "=== DB Deploy ==="
|
||
|
|
echo "Lokale DB: $(du -sh $LOCAL_DB | cut -f1)"
|
||
|
|
|
||
|
|
# 0. Schema-Validierung
|
||
|
|
echo "0. Schema prüfen..."
|
||
|
|
EXPECTED_TABLES="vorlagen beratungen ketten ketten_glieder ki_bewertungen parteien antragsteller gremien orte referenzen"
|
||
|
|
MISSING=""
|
||
|
|
for tbl in $EXPECTED_TABLES; do
|
||
|
|
EXISTS=$(sqlite3 "$LOCAL_DB" "SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$tbl'" 2>/dev/null)
|
||
|
|
if [ "$EXISTS" != "1" ]; then
|
||
|
|
MISSING="$MISSING $tbl"
|
||
|
|
fi
|
||
|
|
done
|
||
|
|
|
||
|
|
if [ -n "$MISSING" ]; then
|
||
|
|
echo "❌ FEHLER: Fehlende Tabellen:$MISSING"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
echo " ✓ Alle ${#EXPECTED_TABLES[@]} Tabellen vorhanden"
|
||
|
|
|
||
|
|
# Stats
|
||
|
|
echo ""
|
||
|
|
echo " Vorlagen: $(sqlite3 "$LOCAL_DB" 'SELECT COUNT(*) FROM vorlagen')"
|
||
|
|
echo " Ketten: $(sqlite3 "$LOCAL_DB" 'SELECT COUNT(*) FROM ketten')"
|
||
|
|
echo " KI-Bew.: $(sqlite3 "$LOCAL_DB" 'SELECT COUNT(*) FROM ki_bewertungen')"
|
||
|
|
echo " Matches: $(sqlite3 "$LOCAL_DB" "SELECT COUNT(*) FROM ki_bewertungen WHERE typ='umsetzung_match'")"
|
||
|
|
echo " Orte: $(sqlite3 "$LOCAL_DB" 'SELECT COUNT(*) FROM orte WHERE lat IS NOT NULL')"
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# Flush WAL journal
|
||
|
|
echo " Flushing WAL..."
|
||
|
|
sqlite3 "$LOCAL_DB" "PRAGMA wal_checkpoint(TRUNCATE)" 2>/dev/null
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
if $DRY_RUN; then
|
||
|
|
echo "🔍 Würde hochladen: $(du -sh $LOCAL_DB | cut -f1) nach $REMOTE_HOST:$REMOTE_DB"
|
||
|
|
echo "🔍 Prod-DB Größe: $(ssh $REMOTE_HOST "du -sh $REMOTE_DB 2>/dev/null | cut -f1" || echo "N/A")"
|
||
|
|
echo ""
|
||
|
|
echo "DRY RUN fertig. Ohne --dry-run ausführen zum Deployen."
|
||
|
|
exit 0
|
||
|
|
fi
|
||
|
|
|
||
|
|
# 1. Backup auf VServer
|
||
|
|
BACKUP_NAME="${REMOTE_DB}.bak-$(date +%Y%m%d-%H%M)"
|
||
|
|
echo "1. Backup Prod-DB..."
|
||
|
|
ssh $REMOTE_HOST "cp $REMOTE_DB $BACKUP_NAME"
|
||
|
|
echo " → $BACKUP_NAME"
|
||
|
|
|
||
|
|
# 2. Upload
|
||
|
|
echo "2. Upload..."
|
||
|
|
scp "$LOCAL_DB" "$REMOTE_HOST:$REMOTE_DB"
|
||
|
|
|
||
|
|
# 3. Restart
|
||
|
|
echo "3. Restart Backend..."
|
||
|
|
ssh $REMOTE_HOST 'cd /opt/antragstracker && docker compose restart antragstracker' 2>&1 | grep -v "level=warning"
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo "✅ Deploy fertig"
|
||
|
|
echo "Backup: $BACKUP_NAME"
|
||
|
|
echo "Rollback: ssh $REMOTE_HOST 'cp $BACKUP_NAME $REMOTE_DB && cd /opt/antragstracker && docker compose restart antragstracker'"
|