#!/bin/bash set -euo pipefail source /home/nico/backup/lib.sh # ================================ # Grundeinstellungen # ================================ WEBSITES_BASE="/home/nico/docker-setup/websites" BACKUP_DIR="/home/nico/backup/tmp/websites_backups" REMOTE="onedrive-tdhaider:/IONOS/Backups/websites" DATE=$(date +%F_%H-%M-%S) RUN_DIR="$BACKUP_DIR/$DATE" mkdir -p "$RUN_DIR" log "🚀 Starte Website Media-Backup" log "📅 Backup-Zeitpunkt: $DATE" log "=========================================" FAILED_SITES=() # ================================ # Alle Website-Ordner durchgehen # ================================ for SITE_PATH in "$WEBSITES_BASE"/*; do [ -d "$SITE_PATH" ] || continue SITE_NAME=$(basename "$SITE_PATH") log log "🔹 Verarbeite: $SITE_NAME" # Volume-Namen # Konvention: -media (z.B. haider-media) VOLUME_NAME="${SITE_NAME}-media" # Prüfen ob das Volume existiert if ! docker volume inspect "$VOLUME_NAME" &>/dev/null; then log "⚠️ Volume '$VOLUME_NAME' nicht gefunden – überspringe" FAILED_SITES+=("$SITE_NAME (Volume nicht gefunden)") continue fi # ================================ # Media-Volume sichern # ================================ MEDIA_FILE="$RUN_DIR/media_${SITE_NAME}_${DATE}.tar.gz" log "📦 Media-Volume Backup (Volume: $VOLUME_NAME)" if docker run --rm \ -v "$VOLUME_NAME":/data \ -v "$RUN_DIR":/backup \ alpine sh -c " nice -n 19 ionice -c2 -n7 \ tar -cf - -C /data . \ | gzip -1 > /backup/$(basename "$MEDIA_FILE") "; then log "✅ Media gesichert: $(basename "$MEDIA_FILE")" else log "❌ Media Backup fehlgeschlagen" FAILED_SITES+=("$SITE_NAME (Media)") continue fi done # ================================ # Einmaliger Upload # ================================ log log "☁️ Starte Upload zu OneDrive..." upload "$RUN_DIR" "$REMOTE/$DATE" log "✅ Upload abgeschlossen" cleanup_keep_latest "$REMOTE" 30 log "✅ Cleanup abgeschlossen!" # ================================ # Aufräumen # ================================ [[ -d "$BACKUP_DIR" ]] && rm -rf "$BACKUP_DIR" log log "🧹 Lokale temporäre Backups gelöscht" log "🏁 Website Media-Backup abgeschlossen" # ================================ # Ergebnisübersicht # ================================ if [ "${#FAILED_SITES[@]}" -gt 0 ]; then log log "⚠️ Folgende Seiten hatten Probleme:" for SITE in "${FAILED_SITES[@]}"; do log " - $SITE" done else log log "🎉 Alle Website-Media-Volumes erfolgreich gesichert!" fi