#!/bin/bash # Optionaler Parameter für STAGE (Standard: production) STAGE=${1:-production} echo "Updating YourPart Backend..." 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 /opt/yourpart/backend temporär TEMP_ENV_DIR="/tmp/yourpart-env-backup-$$" echo "Sichere .env-Dateien aus /opt/yourpart/backend..." sudo mkdir -p "$TEMP_ENV_DIR" if [ -d /opt/yourpart/backend ]; then sudo find /opt/yourpart/backend -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 /opt/yourpart/backend gefunden" fi fi # Altes Backend löschen echo "Lösche altes Backend..." sudo rm -rf /opt/yourpart/backend # Erstelle Backend-Verzeichnis echo "Erstelle Backend-Verzeichnis..." sudo mkdir -p /opt/yourpart/backend # 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' . /opt/yourpart/backend/ 2>/dev/null if [ -d node_modules ]; then sudo rsync -av --exclude='.env*' node_modules/ /opt/yourpart/backend/node_modules/ 2>/dev/null || \ sudo cp -r node_modules /opt/yourpart/backend/ 2>/dev/null fi else # Fallback: Kopiere alles außer .env sudo cp -r * /opt/yourpart/backend/ 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* /opt/yourpart/backend/ 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 /opt/yourpart/backend/.env ]; then echo "✓ .env-Datei ist vorhanden" else echo "⚠ WARNUNG: Keine .env-Datei in /opt/yourpart/backend gefunden!" echo " Bitte manuell erstellen: sudo nano /opt/yourpart/backend/.env" fi # Berechtigungen setzen echo "Setting permissions..." sudo chown -R yourpart:yourpart /opt/yourpart/backend sudo chmod -R 755 /opt/yourpart/backend # Stelle sicher, dass .env-Dateien die richtigen Berechtigungen haben if [ -f /opt/yourpart/backend/.env ]; then sudo chmod 600 /opt/yourpart/backend/.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 /opt/yourpart/backend # 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!"