99 lines
2.5 KiB
Bash
Executable File
99 lines
2.5 KiB
Bash
Executable File
#!/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 |