diff --git a/backup-mongodb.sh b/backup-mongodb.sh new file mode 100755 index 0000000..2b1378f --- /dev/null +++ b/backup-mongodb.sh @@ -0,0 +1,51 @@ +#!/bin/bash +set -euo pipefail +source /home/nico/backup/lib.sh +source /home/nico/docker-setup/mongodb/.env + +# ================================ +# Einstellungen +# ================================ +CONTAINER="mongodb" # Name deines MongoDB-Docker-Containers +DB_USER="${MONGO_ROOT_USER}" # MongoDB Root-User (aus .env) +DB_PASS="${MONGO_ROOT_PASSWORD}" # MongoDB Root-Passwort (aus .env) +BACKUP_DIR="/home/nico/backup/tmp/mongodb_backups" # Temporärer Backup-Pfad auf dem Server +REMOTE="onedrive-tdhaider:/IONOS/Backups/mongodb" # Ziel auf OneDrive + +DATE=$(date +%F_%H-%M-%S) +FILE="$BACKUP_DIR/mongodb_all_${DATE}.archive.gz" + +# ================================ +# Backup-Ordner vorbereiten +# ================================ +mkdir -p "$BACKUP_DIR" + +# ================================ +# Backup aller Datenbanken +# ================================ +log "📦 Backup starte für alle MongoDB-Datenbanken ..." +docker exec -t "$CONTAINER" mongodump \ + --username "$DB_USER" \ + --password "$DB_PASS" \ + --authenticationDatabase admin \ + --archive \ + | gzip > "$FILE" \ +|| fail "Fehler beim MongoDB-Backup" + +# ================================ +# Upload zu OneDrive +# ================================ +log "☁️ Lade Backup zu OneDrive hoch ..." +upload "$FILE" "$REMOTE" +log "✅ Upload abgeschlossen!" + +cleanup_keep_latest "$REMOTE" 30 +log "✅ Cleanup abgeschlossen!" + +# ================================ +# Lokale Backups aufräumen +# ================================ +[[ -d "$BACKUP_DIR" ]] && rm -rf "$BACKUP_DIR" +log "🧹 Lokale temporäre Backups gelöscht." + +log "🏁 MongoDB-Backup abgeschlossen!" \ No newline at end of file diff --git a/backup-websites.sh b/backup-websites.sh new file mode 100755 index 0000000..ed286d6 --- /dev/null +++ b/backup-websites.sh @@ -0,0 +1,99 @@ +#!/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 \ No newline at end of file