#!/bin/bash # Backup-Skript für Docker-Umgebung nach Best Practice # Sichert: Docker-Images, Volumes, Konfigs, MariaDB-Dumps (automatisch aus db_uebersicht.md) # Ziel: /home/thomas/backup_images// set -e BACKUP_ROOT="/home/thomas/backup_images" TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S") BACKUP_DIR="$BACKUP_ROOT/$TIMESTAMP" mkdir -p "$BACKUP_DIR" # 1. docker-compose.yml und wichtige Konfigs sichern cp /home/thomas/docker-compose.yml "$BACKUP_DIR/" cp /home/thomas/nginx_docker_setup.md "$BACKUP_DIR/" 2>/dev/null || true cp /home/thomas/SYSTEM_INFO_DOCKER.txt "$BACKUP_DIR/" 2>/dev/null || true cp /home/thomas/container/nginx/nginx.conf "$BACKUP_DIR/" 2>/dev/null || true # 2. Docker-Images sichern mkdir -p "$BACKUP_DIR/images" docker images --format '{{.Repository}}:{{.Tag}}' | grep -v "" | while read IMAGE; do SAFE_IMAGE=$(echo $IMAGE | tr '/:' '_') docker save "$IMAGE" | gzip > "$BACKUP_DIR/images/${SAFE_IMAGE}.tar.gz" done # 3. MariaDB-Dumps automatisch aus db_uebersicht.md mkdir -p "$BACKUP_DIR/db_dumps" DB_UEBERSICHT="/home/thomas/db_uebersicht.md" tail -n +5 "$DB_UEBERSICHT" | grep -v '^$' | while IFS='|' read -r _ app db_host port user pass _ _ _; do db_host=$(echo "$db_host" | xargs) user=$(echo "$user" | xargs) pass=$(echo "$pass" | xargs) if [[ -n "$db_host" && -n "$user" && -n "$pass" && "$db_host" != "DB-Host" ]]; then DUMP_FILE="$BACKUP_DIR/db_dumps/${db_host}.sql" echo "Erstelle Dump für $db_host ($user)..." docker exec $db_host mysqldump -u $user -p$pass --all-databases --single-transaction --quick --lock-tables=false > "$DUMP_FILE" \ || echo "Fehler beim Dump von $db_host" fi done # 4. Volumes & wichtige Daten sichern (ohne MariaDB-DB-Volumes) mkdir -p "$BACKUP_DIR/volumes" # Webshop Media/Static/Templates cd /home/thomas/container/webshop/cleanbuild tar czf "$BACKUP_DIR/volumes/webshop_media.tar.gz" media/ tar czf "$BACKUP_DIR/volumes/webshop_staticfiles.tar.gz" staticfiles/ tar czf "$BACKUP_DIR/volumes/webshop_templates.tar.gz" templates/ # SSV Media/Static cd /home/thomas/container/ssv/html tar czf "$BACKUP_DIR/volumes/ssv_media.tar.gz" media/ tar czf "$BACKUP_DIR/volumes/ssv_staticfiles.tar.gz" staticfiles/ # 5. Let's Encrypt Zertifikate sichern (optional, falls Rechte vorhanden) if [ -d "/etc/letsencrypt/live/kasimirat.de" ]; then mkdir -p "$BACKUP_DIR/letsencrypt" cp -r /etc/letsencrypt/live/kasimirat.de "$BACKUP_DIR/letsencrypt/" 2>/dev/null || true cp -r /etc/letsencrypt/archive/kasimirat.de "$BACKUP_DIR/letsencrypt/" 2>/dev/null || true fi # 6. Container-Infos sichern mkdir -p "$BACKUP_DIR/container_info" docker ps -a > "$BACKUP_DIR/container_info/docker_ps_a.txt" docker inspect $(docker ps -aq) > "$BACKUP_DIR/container_info/docker_inspect.json" echo "Backup abgeschlossen: $BACKUP_DIR"