27 lines
1.5 KiB
Bash
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))"
|