scripte/backup_docker.sh

67 lines
2.8 KiB
Bash
Executable File

#!/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/<DATUM_UHRZEIT>/
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 "<none>" | 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"