67 lines
2.8 KiB
Bash
Executable File
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" |