#!/bin/bash set -euo pipefail TARGET_DIR="${1:?Zielverzeichnis fehlt: ./update-backend.sh [STAGE]}" # Zweiter Parameter: STAGE für DB-Sync (früher erster Parameter) STAGE="${2:-production}" BACKEND_TARGET="$TARGET_DIR/backend" echo "Updating YourPart Backend..." echo "Ziel: $BACKEND_TARGET" echo "Using STAGE: $STAGE" echo "NOTE: .env files will NOT be overwritten" # Zum Backend-Verzeichnis wechseln cd backend # Alle generierten Verzeichnisse löschen echo "Lösche alle generierten Verzeichnisse..." rm -rf node_modules/.cache/ rm -rf logs/ rm -rf tmp/ # Dependencies installieren echo "Installing dependencies..." npm ci --production # Sichere .env-Dateien aus dem Ziel-Backend temporär TEMP_ENV_DIR="/tmp/yourpart-env-backup-$$" echo "Sichere .env-Dateien aus $BACKEND_TARGET..." sudo mkdir -p "$TEMP_ENV_DIR" if [ -d "$BACKEND_TARGET" ]; then sudo find "$BACKEND_TARGET" -maxdepth 1 -name '.env*' -type f -exec cp {} "$TEMP_ENV_DIR/" \; 2>/dev/null || true if [ "$(ls -A $TEMP_ENV_DIR 2>/dev/null)" ]; then echo "✓ .env-Dateien gesichert: $(ls $TEMP_ENV_DIR)" else echo "⚠ Keine .env-Dateien in $BACKEND_TARGET gefunden" fi fi # Altes Backend löschen echo "Lösche altes Backend..." sudo rm -rf "$BACKEND_TARGET" # Erstelle Backend-Verzeichnis echo "Erstelle Backend-Verzeichnis..." sudo mkdir -p "$BACKEND_TARGET" sudo mkdir -p /opt/yourpart-data/adult-verification # Kopiere neues Backend (ohne .env-Dateien aus dem Quellverzeichnis) echo "Kopiere neues Backend..." if command -v rsync &> /dev/null; then sudo rsync -av --exclude='.env*' --exclude='node_modules' . "$BACKEND_TARGET/" 2>/dev/null if [ -d node_modules ]; then sudo rsync -av --exclude='.env*' node_modules/ "$BACKEND_TARGET/node_modules/" 2>/dev/null || \ sudo cp -r node_modules "$BACKEND_TARGET/" 2>/dev/null fi else # Fallback: Kopiere alles außer .env sudo cp -r * "$BACKEND_TARGET/" 2>/dev/null fi # Stelle .env-Dateien wieder her echo "Stelle .env-Dateien wieder her..." if [ -d "$TEMP_ENV_DIR" ] && [ "$(ls -A $TEMP_ENV_DIR 2>/dev/null)" ]; then sudo cp "$TEMP_ENV_DIR"/.env* "$BACKEND_TARGET/" 2>/dev/null || true echo "✓ .env-Dateien wiederhergestellt" else echo "⚠ Keine .env-Dateien zum Wiederherstellen vorhanden" fi sudo rm -rf "$TEMP_ENV_DIR" # Prüfe ob .env vorhanden ist if [ -f "$BACKEND_TARGET/.env" ]; then echo "✓ .env-Datei ist vorhanden" else echo "⚠ WARNUNG: Keine .env-Datei in $BACKEND_TARGET gefunden!" echo " Bitte manuell erstellen: sudo nano $BACKEND_TARGET/.env" fi # Berechtigungen setzen echo "Setting permissions..." sudo chown -R yourpart:yourpart "$BACKEND_TARGET" sudo chmod -R 755 "$BACKEND_TARGET" sudo chown -R yourpart:yourpart /opt/yourpart-data sudo chmod -R 755 /opt/yourpart-data # Stelle sicher, dass .env-Dateien die richtigen Berechtigungen haben if [ -f "$BACKEND_TARGET/.env" ]; then sudo chmod 600 "$BACKEND_TARGET/.env" fi # Systemd-Service aktualisieren und neu laden echo "Updating systemd service..." sudo cp yourpart.service /etc/systemd/system/ sudo systemctl daemon-reload # Datenbank-Synchronisation durchführen echo "Running database synchronization..." cd "$BACKEND_TARGET" # STAGE für Schema-Updates verwenden echo "Running database sync with STAGE=$STAGE..." export STAGE=$STAGE && npm run sync-db # Service neu starten echo "Restarting yourpart service..." sudo systemctl restart yourpart # Kurz warten und Status prüfen sleep 2 echo "Checking service status..." sudo systemctl status yourpart --no-pager echo "Backend update completed!"