meldestelle/config/scripts/backup.sh
Stefan Mogeritsch 09b0b1a462 infra: clean up Keycloak configuration, enforce consistency in .env, and improve health checks
Streamlined Keycloak configurations with defaults for development and production in `.env`. Added health checks and improved environment variable documentation with comments to differentiate local and server deployments. Ensured compatibility with pre-built registry images.
2026-03-06 11:23:24 +01:00

53 lines
1.7 KiB
Bash

#!/bin/bash
# ==========================================
# Meldestelle Backup Script
# Sichert Datenbanken und Konfigurationen
# ==========================================
# .env laden (SSoT für alle Variablen)
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
if [ -f "$PROJECT_ROOT/.env" ]; then
set -a
# shellcheck disable=SC1091
source "$PROJECT_ROOT/.env"
set +a
fi
# Konfiguration (Defaults falls .env nicht vorhanden)
BACKUP_DIR="${BACKUP_DIR:-$HOME/backups/meldestelle}"
DATE=$(date +%Y-%m-%d_%H-%M-%S)
RETENTION_DAYS="${BACKUP_RETENTION_DAYS:-7}"
PROJECT_NAME="${PROJECT_NAME:-meldestelle}"
# Container Namen (müssen mit docker-compose übereinstimmen)
DB_CONTAINER="${PROJECT_NAME}-postgres"
DB_USER="${POSTGRES_USER:-pg-user}"
# Verzeichnisse erstellen
mkdir -p "$BACKUP_DIR"
echo "🚀 Starte Backup: $DATE"
# 1. PostgreSQL Dump
echo " -> Erstelle Datenbank-Dump..."
if docker exec "$DB_CONTAINER" pg_dumpall -U "$DB_USER" > "$BACKUP_DIR/db_dump_$DATE.sql"; then
echo " ✅ DB Dump erfolgreich."
gzip "$BACKUP_DIR/db_dump_$DATE.sql"
else
echo " ❌ FEHLER beim DB Dump!"
# Optional: Mail senden oder Exit Code setzen
fi
# 2. Konfigurations-Dateien sichern (.env ist kritisch!)
echo " -> Sichere Konfigurationen..."
tar -czf "$BACKUP_DIR/config_$DATE.tar.gz" .env docker-compose.yaml dc-*.yaml config/
# 3. Alte Backups löschen (Rotation)
echo " -> Lösche Backups älter als $RETENTION_DAYS Tage..."
find "$BACKUP_DIR" -name "db_dump_*.sql.gz" -mtime +$RETENTION_DAYS -delete
find "$BACKUP_DIR" -name "config_*.tar.gz" -mtime +$RETENTION_DAYS -delete
echo "✅ Backup abgeschlossen: $BACKUP_DIR"
ls -lh "$BACKUP_DIR" | grep "$DATE"