Files
backup-scripts/backup-websites.sh
T
2026-05-03 00:38:06 +02:00

99 lines
2.5 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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: <site_name>-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