init backup scripts
This commit is contained in:
Executable
+136
@@ -0,0 +1,136 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
source /home/nico/backup/lib.sh
|
||||
|
||||
# ================================
|
||||
# Grundeinstellungen
|
||||
# ================================
|
||||
WORDPRESS_BASE="/home/nico/docker-setup/wordpress"
|
||||
BACKUP_DIR="/home/nico/backup/tmp/wordpress_backups"
|
||||
REMOTE="onedrive-tdhaider:/IONOS/Backups/wordpress"
|
||||
MARIADB_CONTAINER="mariadb"
|
||||
|
||||
DATE=$(date +%F_%H-%M-%S)
|
||||
RUN_DIR="$BACKUP_DIR/$DATE"
|
||||
|
||||
mkdir -p "$RUN_DIR"
|
||||
|
||||
log "🚀 Starte WordPress Komplett-Backup"
|
||||
log "📅 Backup-Zeitpunkt: $DATE"
|
||||
log "========================================="
|
||||
|
||||
FAILED_SITES=()
|
||||
|
||||
# ================================
|
||||
# Alle WordPress-Seiten durchgehen
|
||||
# ================================
|
||||
for SITE_PATH in "$WORDPRESS_BASE"/*; do
|
||||
[ -d "$SITE_PATH" ] || continue
|
||||
|
||||
SITE_NAME=$(basename "$SITE_PATH")
|
||||
ENV_FILE="$SITE_PATH/.env"
|
||||
VOLUME_NAME="wordpress_${SITE_NAME}"
|
||||
SITE_DIR="$RUN_DIR/$SITE_NAME"
|
||||
|
||||
log
|
||||
log "🔹 Verarbeite: $SITE_NAME"
|
||||
|
||||
if [ ! -f "$ENV_FILE" ]; then
|
||||
log "⚠️ Keine .env gefunden – überspringe"
|
||||
FAILED_SITES+=("$SITE_NAME (keine .env)")
|
||||
continue
|
||||
fi
|
||||
|
||||
mkdir -p "$SITE_DIR"
|
||||
|
||||
# ================================
|
||||
# .env laden
|
||||
# ================================
|
||||
set -o allexport
|
||||
source "$ENV_FILE"
|
||||
set +o allexport
|
||||
|
||||
if [[ -z "${MYSQL_DATABASE:-}" || -z "${MYSQL_USER:-}" || -z "${MYSQL_PASSWORD:-}" ]]; then
|
||||
log "❌ Unvollständige DB-Zugangsdaten"
|
||||
FAILED_SITES+=("$SITE_NAME (DB-Config)")
|
||||
continue
|
||||
fi
|
||||
|
||||
# ================================
|
||||
# Datenbank sichern
|
||||
# ================================
|
||||
DB_FILE="$SITE_DIR/db_${SITE_NAME}_${DATE}.sql.gz"
|
||||
log "🗄️ DB Backup: $MYSQL_DATABASE"
|
||||
|
||||
if docker exec -e MYSQL_PWD="$MYSQL_PASSWORD" "$MARIADB_CONTAINER" \
|
||||
mariadb-dump -h 127.0.0.1 -u "$MYSQL_USER" "$MYSQL_DATABASE" \
|
||||
| gzip > "$DB_FILE"; then
|
||||
log "✅ DB gesichert"
|
||||
else
|
||||
log "❌ DB Backup fehlgeschlagen"
|
||||
FAILED_SITES+=("$SITE_NAME (DB)")
|
||||
continue
|
||||
fi
|
||||
|
||||
# ================================
|
||||
# WordPress-Dateien (Volume)
|
||||
# ================================
|
||||
FILES_FILE="$SITE_DIR/files_${SITE_NAME}_${DATE}.tar.gz"
|
||||
log "📦 Dateien Backup (low-load, Volume: $VOLUME_NAME)"
|
||||
|
||||
if docker run --rm \
|
||||
-v "$VOLUME_NAME":/data \
|
||||
-v "$SITE_DIR":/backup \
|
||||
alpine sh -c "
|
||||
nice -n 19 ionice -c2 -n7 \
|
||||
tar \
|
||||
--exclude='./wp-content/cache' \
|
||||
--exclude='./wp-content/wflogs' \
|
||||
--exclude='./wp-content/uploads/cache' \
|
||||
--exclude='./wp-content/updraft' \
|
||||
-cf - -C /data . \
|
||||
| gzip -1 > /backup/$(basename "$FILES_FILE")
|
||||
"; then
|
||||
log "✅ Dateien gesichert"
|
||||
else
|
||||
log "❌ Dateien Backup fehlgeschlagen"
|
||||
FAILED_SITES+=("$SITE_NAME (Files)")
|
||||
continue
|
||||
fi
|
||||
|
||||
done
|
||||
|
||||
# ================================
|
||||
# Einmaliger Upload
|
||||
# ================================
|
||||
log
|
||||
log "☁️ Starte EINEN Gesamt-Upload zu OneDrive..."
|
||||
upload "$RUN_DIR" "$REMOTE/$DATE"
|
||||
|
||||
log "✅ Upload abgeschlossen"
|
||||
|
||||
cleanup_keep_latest "$REMOTE" 2
|
||||
log "✅ Cleanup abgeschlossen!"
|
||||
|
||||
# ================================
|
||||
# Aufräumen
|
||||
# ================================
|
||||
[[ -d "$BACKUP_DIR" ]] && rm -rf "$BACKUP_DIR"
|
||||
|
||||
log
|
||||
log "🧹 Lokale temporäre Backups gelöscht"
|
||||
log "🏁 WordPress 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 WordPress-Seiten erfolgreich gesichert!"
|
||||
fi
|
||||
Reference in New Issue
Block a user