Files
deskhub/plugin-webseite/backup.sh
T
2026-10-21 16:55:37 +00:00

27 lines
1.5 KiB
Bash

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