From 9bae70747390c2140b919deae504c686020d52d8 Mon Sep 17 00:00:00 2001 From: "Torsten Schulz (local)" Date: Wed, 7 Jan 2026 17:54:49 +0100 Subject: [PATCH] Refactor deployment script to improve data management by introducing configurable backup and restore paths, enhancing error handling, and ensuring persistent data storage. Update backup processes to create timestamped directories for better organization. --- deploy-production.sh | 45 +++++++++++++++++++++++--------------------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/deploy-production.sh b/deploy-production.sh index 7bdc713..6a91c36 100755 --- a/deploy-production.sh +++ b/deploy-production.sh @@ -20,8 +20,11 @@ fi # Optional (empfohlen): Persistente Daten außerhalb des Git-Repos halten und per Symlink einbinden. # Das verhindert zuverlässig, dass Git jemals Produktivdaten überschreibt. -DATA_ROOT="${DATA_ROOT:-/var/lib/harheimertc}" -mkdir -p "$DATA_ROOT" +DEPLOY_HOME="${DEPLOY_HOME:-${HOME:-/tmp}}" +DATA_ROOT="${DATA_ROOT:-$DEPLOY_HOME/harheimertc-data}" +BACKUP_ROOT="${BACKUP_ROOT:-$DEPLOY_HOME/harheimertc-backups}" + +mkdir -p "$DATA_ROOT" "$BACKUP_ROOT" ensure_symlink_dir() { local src="$1" # z.B. server/data @@ -54,23 +57,25 @@ echo "" # 1. BACKUP: Laufende Produktivdaten VOR allen Git-Operationen sichern echo "1. Backing up current production data (pre-git)..." -# Fresh backup dir -rm -rf .backup -mkdir -p .backup +# Human readable timestamp (lokal) +BACKUP_TS="$(date +"%Y-%m-%d_%H-%M-%S")" +BACKUP_DIR="$BACKUP_ROOT/backup_$BACKUP_TS" +mkdir -p "$BACKUP_DIR" +echo " Backup directory: $BACKUP_DIR" # Backup server data (JSON) und CSVs immer vom Dateisystem, nicht aus 'stash' if [ -d server/data ]; then - cp -a server/data .backup/data_backup - echo " Backed up server/data -> .backup/data_backup" + cp -a server/data "$BACKUP_DIR/server-data" + echo " Backed up server/data -> $BACKUP_DIR/server-data" else echo "ERROR: server/data existiert nicht. Abbruch, damit wir keine Repo-Defaults ausrollen." exit 1 fi -mkdir -p .backup/public_data if ls public/data/*.csv >/dev/null 2>&1; then - cp -a public/data/*.csv .backup/public_data/ - echo " Backed up public/data/*.csv -> .backup/public_data/" + mkdir -p "$BACKUP_DIR/public-data" + cp -a public/data/*.csv "$BACKUP_DIR/public-data/" + echo " Backed up public/data/*.csv -> $BACKUP_DIR/public-data/" else echo " No public CSVs to backup (public/data/*.csv not found)" fi @@ -115,20 +120,20 @@ echo "" echo "6. Restoring production data..." # Stelle server/data vollständig wieder her (inkl. config.json, users.json, news.json, sessions.json, members.json, membership-applications) -if [ ! -d .backup/data_backup ]; then - echo "ERROR: Backup-Verzeichnis .backup/data_backup fehlt. Abbruch." +if [ ! -d "$BACKUP_DIR/server-data" ]; then + echo "ERROR: Backup-Verzeichnis $BACKUP_DIR/server-data fehlt. Abbruch." exit 1 fi mkdir -p server/data -cp -a .backup/data_backup/. server/data/ -echo " Restored server/data from backup." +cp -a "$BACKUP_DIR/server-data/." server/data/ +echo " Restored server/data from backup ($BACKUP_DIR/server-data)." # Stelle alle CSVs wieder her -if ls .backup/public_data/*.csv >/dev/null 2>&1; then +if ls "$BACKUP_DIR/public-data"/*.csv >/dev/null 2>&1; then mkdir -p public/data - cp -a .backup/public_data/*.csv public/data/ - echo " Restored public/data/*.csv from backup." + cp -a "$BACKUP_DIR/public-data"/*.csv public/data/ + echo " Restored public/data/*.csv from backup ($BACKUP_DIR/public-data)." else echo "No public CSVs to restore" fi @@ -139,11 +144,9 @@ if [ ! -s server/data/users.json ]; then exit 1 fi -# 7. Cleanup backup and stash +# 7. Cleanup stash (Backups werden bewusst behalten) echo "" -echo "7. Cleaning up backup and stash..." -rm -rf .backup - +echo "7. Cleaning up stash (keeping backups in $BACKUP_ROOT)..." # Clear the deployment stash (keep other stashes) echo " Clearing deployment stash..." git stash list | grep "Production deployment stash" | head -1 | cut -d: -f1 | xargs -r git stash drop