#!/bin/bash # SingleChat Deployment nach /opt/ypchat # Dieses Skript kopiert die Anwendung nach /opt/ypchat und installiert sie dort set -e SOURCE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" TARGET_DIR="/opt/ypchat" USER="www-data" GROUP="www-data" echo "==========================================" echo "SingleChat Deployment nach /opt/ypchat" echo "==========================================" # Prüfe ob als root ausgeführt if [ "$EUID" -ne 0 ]; then echo "FEHLER: Dieses Skript muss als root ausgeführt werden!" echo "Bitte führe aus: sudo ./deploy-to-opt.sh" exit 1 fi # Prüfe ob Source-Verzeichnis existiert if [ ! -d "$SOURCE_DIR" ]; then echo "FEHLER: Source-Verzeichnis $SOURCE_DIR existiert nicht!" exit 1 fi echo "Source-Verzeichnis: $SOURCE_DIR" echo "Target-Verzeichnis: $TARGET_DIR" echo "" # Erstelle Target-Verzeichnis falls nicht vorhanden if [ ! -d "$TARGET_DIR" ]; then echo "Erstelle Target-Verzeichnis..." mkdir -p "$TARGET_DIR" echo "✓ Verzeichnis erstellt" fi # Kopiere Dateien (ausschließlich node_modules, .git, dist, logs, npm cache) echo "Kopiere Dateien nach $TARGET_DIR..." rsync -av --progress \ --exclude 'node_modules' \ --exclude '.git' \ --exclude 'client/node_modules' \ --exclude 'client/dist' \ --exclude 'docroot/dist' \ --exclude 'logs' \ --exclude '.env' \ --exclude '.npm-cache' \ --exclude '.npm' \ "$SOURCE_DIR/" "$TARGET_DIR/" echo "✓ Dateien kopiert" # Setze Besitzer echo "Setze Besitzer auf $USER:$GROUP..." chown -R $USER:$GROUP "$TARGET_DIR" echo "✓ Besitzer gesetzt" # Wechsle ins Target-Verzeichnis und führe Installation durch echo "" echo "Führe Installation in $TARGET_DIR durch..." cd "$TARGET_DIR" # Repariere npm Cache für www-data falls nötig echo "" echo "Prüfe npm Cache-Berechtigungen..." if [ -d "/var/www/.npm" ]; then chown -R $USER:$GROUP "/var/www/.npm" 2>/dev/null || true fi # Setze npm Cache auf ein Verzeichnis im App-Verzeichnis NPM_CACHE_DIR="$TARGET_DIR/.npm-cache" mkdir -p "$NPM_CACHE_DIR" chown -R $USER:$GROUP "$NPM_CACHE_DIR" # Installiere Dependencies echo "" echo "Installiere Dependencies..." sudo -u $USER bash -c "cd '$TARGET_DIR' && npm config set cache '$NPM_CACHE_DIR' && npm run install:all" if [ $? -ne 0 ]; then echo "FEHLER: Installation der Dependencies fehlgeschlagen!" exit 1 fi echo "✓ Dependencies installiert" # Baue Client echo "" echo "Baue Client für Production..." sudo -u $USER bash -c "cd '$TARGET_DIR' && npm config set cache '$NPM_CACHE_DIR' && cd client && npm config set cache '$NPM_CACHE_DIR' && cd .. && npm run build" if [ $? -ne 0 ]; then echo "FEHLER: Build fehlgeschlagen!" exit 1 fi echo "✓ Client gebaut" # Kopiere dist nach docroot echo "" echo "Kopiere gebaute Dateien nach docroot..." if [ -d "$TARGET_DIR/docroot/dist" ]; then rm -rf "$TARGET_DIR/docroot/dist" fi cp -r "$TARGET_DIR/client/dist" "$TARGET_DIR/docroot/" chown -R $USER:$GROUP "$TARGET_DIR/docroot/dist" echo "✓ Dateien kopiert" # Erstelle .env Datei falls nicht vorhanden if [ ! -f "$TARGET_DIR/.env" ]; then echo "" echo "Erstelle .env Datei..." SESSION_SECRET=$(openssl rand -hex 32) cat > "$TARGET_DIR/.env" << EOF NODE_ENV=production PORT=4000 SESSION_SECRET=$SESSION_SECRET EOF chown $USER:$GROUP "$TARGET_DIR/.env" echo "✓ .env Datei erstellt" echo "SESSION_SECRET wurde generiert: $SESSION_SECRET" else echo "✓ .env Datei existiert bereits" fi echo "" echo "==========================================" echo "Deployment abgeschlossen!" echo "==========================================" echo "" echo "Nächste Schritte:" echo "1. Installiere den Service:" echo " cd $TARGET_DIR" echo " sudo ./install-service-ypchat.sh" echo "" echo "2. Stoppe den alten Service:" echo " sudo systemctl stop ypchat" echo "" echo "3. Starte den neuen Service:" echo " sudo systemctl start ypchat" echo " sudo systemctl status ypchat" echo ""