#!/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 # Altes Backend löschen und neues kopieren echo "Lösche altes Backend (außer .env)..." # Sichere .env-Dateien temporär TEMP_ENV_DIR="/tmp/yourpart-backend-env-$$" if [ -d /opt/yourpart/backend ]; then sudo mkdir -p "$TEMP_ENV_DIR" sudo find /opt/yourpart/backend -maxdepth 1 -name '.env*' -type f -exec sudo cp {} "$TEMP_ENV_DIR/" \; 2>/dev/null || true # Lösche alles im Backend-Verzeichnis sudo rm -rf /opt/yourpart/backend/* /opt/yourpart/backend/.[!.]* 2>/dev/null || true # Stelle .env-Dateien wieder her if [ -d "$TEMP_ENV_DIR" ] && [ "$(ls -A $TEMP_ENV_DIR 2>/dev/null)" ]; then sudo cp "$TEMP_ENV_DIR"/* /opt/yourpart/backend/ 2>/dev/null || true echo "✓ .env-Dateien wurden gesichert und wiederhergestellt" fi sudo rm -rf "$TEMP_ENV_DIR" fi echo "Erstelle Backend-Verzeichnis (falls nicht vorhanden)..." sudo mkdir -p /opt/yourpart/backend echo "Kopiere neues Backend (ohne .env-Dateien)..." # Verwende rsync, um .env-Dateien auszuschließen if command -v rsync &> /dev/null; then sudo rsync -av --exclude='.env*' --exclude='node_modules' . /opt/yourpart/backend/ 2>/dev/null # node_modules separat kopieren (ohne .env) 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 und lösche dann .env-Dateien sudo cp -r * /opt/yourpart/backend/ 2>/dev/null sudo find /opt/yourpart/backend -name '.env*' -type f -delete 2>/dev/null || true fi # Stelle sicher, dass .env-Dateien nicht überschrieben wurden echo "Stelle sicher, dass .env-Dateien erhalten bleiben..." if [ -f /opt/yourpart/backend/.env ]; then echo "✓ Bestehende .env-Datei wurde beibehalten" else echo "⚠ Keine .env-Datei im Zielverzeichnis gefunden" # Falls .env im Quellverzeichnis existiert, kopiere sie nur wenn sie im Ziel nicht existiert if [ -f .env ]; then echo "Kopiere .env-Datei (nur wenn nicht vorhanden)..." sudo cp .env /opt/yourpart/backend/ sudo chown yourpart:yourpart /opt/yourpart/backend/.env sudo chmod 600 /opt/yourpart/backend/.env fi 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!"