#!/usr/bin/env bash # Sichert das Volume "plugin_daten" (veröffentlichte Pakete, Katalog- und Push-Datenbank) als .tar.gz und löscht alte Sicherungen. # Aufruf auf dem Server im Ordner mit der docker-compose.yml: ./backup.sh [Zielordner] [Tage aufbewahren] # Beispiel Cronjob (täglich 03:15): 15 3 * * * cd /home/docker/plugin-deskhub && ./backup.sh /home/docker/backups 14 # Wiederherstellen: docker compose down && docker run --rm -v plugin-deskhub_plugin_daten:/data -v /pfad:/backup alpine sh -c "rm -rf /data/* && tar xzf /backup/DATEI.tar.gz -C /data" && docker compose up -d # Die Sicherung enthält Pakete und Installationsdaten, aber NICHT die Schlüssel (liegen im Ordner schluessel/, getrennt sichern). set -euo pipefail TARGET="${1:-./backups}" KEEP_DAYS="${2:-14}" PROJECT="$(basename "$(pwd)")" VOLUME="${PROJECT}_plugin_daten" if ! docker volume inspect "$VOLUME" >/dev/null 2>&1; then echo "Volume $VOLUME nicht gefunden. Im Ordner mit der docker-compose.yml ausführen." >&2 exit 1 fi [[ "$KEEP_DAYS" =~ ^[0-9]+$ ]] || { echo "Tage muss eine Zahl sein." >&2; exit 1; } mkdir -p "$TARGET" chmod 700 "$TARGET" FILE="plugin-daten-$(date +%Y%m%d-%H%M%S).tar.gz" docker run --rm -v "$VOLUME":/data:ro -v "$(cd "$TARGET" && pwd)":/backup alpine tar czf "/backup/$FILE" -C /data . chmod 600 "$TARGET/$FILE" find "$TARGET" -maxdepth 1 -name 'plugin-daten-*.tar.gz' -mtime +"$KEEP_DAYS" -delete echo "Gesichert: $TARGET/$FILE ($(du -h "$TARGET/$FILE" | cut -f1))"