#!/bin/bash # ============================================================================= # Tägliches Backup vom Mac Mini zum MacBook # ============================================================================= # Dieses Script synchronisiert das Projekt vom Mac Mini zum MacBook # um bei Festplattendefekt keine Daten zu verlieren. # # Installation: # chmod +x ~/Projekte/breakpilot-pwa/scripts/daily-backup.sh # # Manuell ausführen: # ~/Projekte/breakpilot-pwa/scripts/daily-backup.sh # # Automatisch täglich (via LaunchAgent - wird unten erstellt): # Das Script läuft automatisch jeden Tag um 02:00 Uhr # ============================================================================= set -e # Konfiguration MACMINI_HOST="benjaminadmin@macmini" REMOTE_DIR="/Users/benjaminadmin/Projekte/breakpilot-pwa" LOCAL_DIR="/Users/benjaminadmin/Projekte/breakpilot-pwa" BACKUP_LOG="/Users/benjaminadmin/Projekte/backup-logs" TIMESTAMP=$(date +%Y-%m-%d_%H-%M-%S) # Log-Verzeichnis erstellen mkdir -p "$BACKUP_LOG" LOG_FILE="$BACKUP_LOG/backup-$TIMESTAMP.log" echo "=== Backup gestartet: $TIMESTAMP ===" | tee "$LOG_FILE" # 1. Prüfe Verbindung zum Mac Mini echo "[1/4] Prüfe Verbindung zum Mac Mini..." | tee -a "$LOG_FILE" if ! ping -c 1 -t 5 macmini &>/dev/null; then echo "FEHLER: Mac Mini nicht erreichbar!" | tee -a "$LOG_FILE" exit 1 fi echo " ✓ Mac Mini erreichbar" | tee -a "$LOG_FILE" # 2. Hole neuesten Stand vom Git Remote echo "[2/4] Hole neueste Commits von Gitea..." | tee -a "$LOG_FILE" cd "$LOCAL_DIR" git fetch origin 2>&1 | tee -a "$LOG_FILE" echo " ✓ Git fetch erfolgreich" | tee -a "$LOG_FILE" # 3. Synchronisiere Docker-Volumes und Datenbanken (optional) echo "[3/4] Sichere wichtige Daten vom Mac Mini..." | tee -a "$LOG_FILE" # Postgres Backup POSTGRES_BACKUP="$BACKUP_LOG/postgres-$TIMESTAMP.sql.gz" ssh "$MACMINI_HOST" "/usr/local/bin/docker exec breakpilot-pwa-postgres pg_dump -U postgres breakpilot | gzip" > "$POSTGRES_BACKUP" 2>> "$LOG_FILE" if [ -s "$POSTGRES_BACKUP" ]; then echo " ✓ Postgres-Backup: $POSTGRES_BACKUP" | tee -a "$LOG_FILE" else echo " ⚠ Postgres-Backup fehlgeschlagen oder leer" | tee -a "$LOG_FILE" fi # 4. Aufräumen alter Backups (behalte letzte 7 Tage) echo "[4/4] Räume alte Backups auf..." | tee -a "$LOG_FILE" find "$BACKUP_LOG" -name "postgres-*.sql.gz" -mtime +7 -delete 2>/dev/null find "$BACKUP_LOG" -name "backup-*.log" -mtime +7 -delete 2>/dev/null echo " ✓ Alte Backups entfernt (>7 Tage)" | tee -a "$LOG_FILE" echo "" | tee -a "$LOG_FILE" echo "=== Backup abgeschlossen: $(date +%Y-%m-%d_%H-%M-%S) ===" | tee -a "$LOG_FILE" echo "" | tee -a "$LOG_FILE" echo "Zusammenfassung:" | tee -a "$LOG_FILE" echo " - Git Repository: Aktuell (via fetch)" | tee -a "$LOG_FILE" echo " - Postgres-Backup: $POSTGRES_BACKUP" | tee -a "$LOG_FILE" echo " - Log: $LOG_FILE" | tee -a "$LOG_FILE"