#!/bin/bash set -euo pipefail # ===== Konfiguration ===== SOURCE="/root/docker/dokuwiki/data" # Root von DokuWiki (enthält data/) BACKUPDIR="/root/dokuwiki_backup" REMOTE_USER="backupuser" REMOTE_HOST="backupserver" REMOTE_PATH="/remote/backup/path" RETENTION_DAYS=14 DATE=$(date +%F) ARCHIVE="dokuwiki-rsit-$DATE.tar.gz" HASHFILE="$ARCHIVE.sha256" # Nur diese Teilpfade sichern (relativ zu $SOURCE) INCLUDE_PATHS=( "data/meta/rsit" "data/media/rsit" "data/pages/rsit" ) # ===== Vorbereitung ===== mkdir -p "$BACKUPDIR" # ===== Prüfen, ob alle Pfade existieren (sonst hart abbrechen) ===== for p in "${INCLUDE_PATHS[@]}"; do if [[ ! -d "$SOURCE/$p" ]]; then echo "FEHLER: Verzeichnis fehlt: $SOURCE/$p" >&2 exit 1 fi done # ===== Archiv erstellen (Struktur bleibt erhalten) ===== tar -czf "$BACKUPDIR/$ARCHIVE" -C "$SOURCE" "${INCLUDE_PATHS[@]}" # ===== Hash erzeugen ===== cd "$BACKUPDIR" sha256sum "$ARCHIVE" > "$HASHFILE" # ===== Upload ===== #rsync -avz "$ARCHIVE" "$HASHFILE" \ # "${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_PATH}/" # ===== Alte Backups lokal löschen ===== find "$BACKUPDIR" -type f -mtime +"$RETENTION_DAYS" -name "dokuwiki-rsit-*.tar.gz" -delete find "$BACKUPDIR" -type f -mtime +"$RETENTION_DAYS" -name "dokuwiki-rsit-*.sha256" -delete