Scripts/Docker Restore

Aus XccesS Wiki
Version vom 6. Juni 2025, 17:16 Uhr von Hendrik (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „<syntaxhighlight lang="bash" line="1"> #!/usr/bin/env bash # ========================================================================== # restore_docker_rsync.sh # • Spielt einen rsync-Snapshot zurück, der von backup_docker_rsync.sh # erzeugt wurde. (Volumes + Docker-Config + Compose-Dateien) # • Standard-Ziel: / (also Original-Orte) # • Standard-Snapshot: latest (kann via -s <timestamp> gewählt werden) # • Optionale --dry…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen
#!/usr/bin/env bash
# ==========================================================================
#  restore_docker_rsync.sh
#  • Spielt einen rsync-Snapshot zurück, der von backup_docker_rsync.sh
#    erzeugt wurde. (Volumes + Docker-Config + Compose-Dateien)
#  • Standard-Ziel: /             (also Original-Orte)
#  • Standard-Snapshot: latest    (kann via -s <timestamp> gewählt werden)
#  • Optionale --dry-run          (nur anzeigen, nichts ändern)
# ==========================================================================

set -euo pipefail

# ---------- Variablen ----------------------------------------------------
BACKUP_ROOT="/mnt/Backup/Docker"
SNAP="latest"
DRYRUN=""

# ---------- Usage --------------------------------------------------------
usage() {
  cat <<EOF
Usage: $0 [-s SNAPSHOT] [--dry-run]

  -s, --snapshot   Timestamp-Verzeichnis (z.B. 2025-06-06-1557) oder 'latest'
  --dry-run        Keine Änderungen; zeige nur, was passieren würde
EOF
  exit 1
}

# ---------- Argumente parsen --------------------------------------------
while [[ $# -gt 0 ]]; do
  case $1 in
    -s|--snapshot) SNAP="$2"; shift 2 ;;
    --dry-run)     DRYRUN="--dry-run"; shift ;;
    -h|--help)     usage ;;
    *) echo "Unbekannter Parameter $1"; usage ;;
  esac
done

SNAPDIR="$BACKUP_ROOT/$SNAP"
[[ -d "$SNAPDIR" ]] || { echo "Snapshot $SNAPDIR existiert nicht!" ; exit 1; }

echo " === Docker RESTORE === "
echo " Snapshot  : $SNAPDIR"
[[ -n $DRYRUN ]] && echo " Modus     : DRY-RUN (keine Änderungen)"
read -rp "Fortfahren? [yes/no] " CONFIRM
[[ $CONFIRM == "yes" ]] || { echo "Abbruch." ; exit 0; }

# ---------- 1) Docker stoppen -------------------------------------------
echo "[*] Stoppe Docker-Dienst ..."
systemctl stop docker

# ---------- 2) Volumes zurückspielen ------------------------------------
echo "[*] Stelle Volumes wieder her ..."
rsync -a $DRYRUN --delete \
      "$SNAPDIR/volumes/" /var/lib/docker/volumes/

# ---------- 3) Docker-Config zurückspielen ------------------------------
echo "[*] Stelle Docker-Konfiguration wieder her ..."
rsync -a $DRYRUN --delete \
      "$SNAPDIR/etc-docker/" /etc/docker/

if [[ -d "$SNAPDIR/docker-systemd" ]]; then
  rsync -a $DRYRUN --delete \
        "$SNAPDIR/docker-systemd/" /etc/systemd/system/docker.service.d/
fi

# ---------- 4) Compose-Dateien zurückspielen ----------------------------
echo "[*] Stelle Compose-Dateien wieder her ..."
rsync -a $DRYRUN "$SNAPDIR/metadata/compose/" /

# ---------- 5) Dienste starten ------------------------------------------
echo "[*] Starte Docker neu ..."
systemctl daemon-reload
systemctl start docker

# ---------- 6) Stacks hochfahren ----------------------------------------
echo "[*] Starte alle Compose-Stacks ..."
find /data/compose -maxdepth 2 -name 'docker-compose*.yml' -execdir docker compose up -d \;

echo "=== Restore abgeschlossen ==="