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