Files
Customer/alumnihub-backup.sh

64 lines
1.6 KiB
Bash
Executable File

#!/usr/bin/bash
set -euo pipefail
# Speicherort der Backups
BACKUP_ROOT="/var/backups"
# 30 Backups sollen behalten werden
RETAIN=30
# Postgres-Verbindung
PGHOST="localhost"
PGPORT="5432"
PGUSER="florian"
PGDATABASE="oqtane"
OQTANE_DIR="/home/konstantin/oqtane.framework/publish"
# Timestamp für den Ordnernamen
TS="$(date -u +'%Y%m%dT%H%M%SZ')"
DEST_DIR="${BACKUP_ROOT}/oqtane_${TS}"
########## Vorbereitung ##########
mkdir -p "$DEST_DIR"
echo "[$(date -Iseconds)] Starte Backup, Ziel: $DEST_DIR"
########## 1) Postgres-Backup ##########
# Voraussetzung: Passwortzugang über ~/.pgpass für den Benutzer,
# unter dem dieses Skript läuft.
# Dump nur der DB oqtane (Custom-Format)
pg_dump -h "localhost" -p "5432" -U "florian" -d "oqtane" -Fc \
-f "${DEST_DIR}/db_${PGDATABASE}.dump"
echo "[$(date -Iseconds)] Postgres-Backup fertig."
########## 2) Komplettes System-Backup ##########
# Achtung: sollte als root laufen, damit alle Dateien gelesen werden können.
tar -cvpzf "${DEST_DIR}/oqtane_files.tar.gz" \
--absolute-names "$OQTANE_DIR"
echo "[$(date -Iseconds)] Oqtane-Ordner gesichert."
########## 3) Rotation: nur die letzten $RETAIN Backups behalten ##########
shopt -s nullglob
backups=( "$BACKUP_ROOT"/* )
# Nach Ordnernamen (Timestamp) absteigend sortieren = neueste zuerst
IFS=$'\n' backups=( $(printf '%s\n' "${backups[@]}" | sort -r) )
unset IFS
if (( ${#backups[@]} > RETAIN )); then
echo "[$(date -Iseconds)] Zu viele Backups: ${#backups[@]} > $RETAIN. Lösche alte…"
for old in "${backups[@]:RETAIN}"; do
echo " Lösche $old"
rm -rf -- "$old"
done
fi
echo "[$(date -Iseconds)] Backup-Job abgeschlossen."