#!/bin/bash # SingleChat Installation Script # Dieses Skript installiert die SingleChat-Anwendung für Production # set -e wird später aktiviert, nachdem Retry-Logik definiert ist echo "==========================================" echo "SingleChat Installation" echo "==========================================" # Prüfe ob Node.js installiert ist if ! command -v node &> /dev/null; then echo "FEHLER: Node.js ist nicht installiert!" echo "Bitte installiere Node.js (Version 18 oder höher)" exit 1 fi NODE_VERSION=$(node -v | cut -d'v' -f2 | cut -d'.' -f1) if [ "$NODE_VERSION" -lt 18 ]; then echo "FEHLER: Node.js Version 18 oder höher erforderlich!" echo "Aktuelle Version: $(node -v)" exit 1 fi echo "✓ Node.js Version: $(node -v)" # Installiere Dependencies echo "" echo "Installiere Dependencies..." echo "Hinweis: Bei Registry-Fehlern wird automatisch erneut versucht..." # Funktion für Retry mit Backoff install_with_retry() { local max_attempts=3 local attempt=1 local delay=5 while [ $attempt -le $max_attempts ]; do echo "Versuch $attempt von $max_attempts..." npm run install:all if [ $? -eq 0 ]; then return 0 fi if [ $attempt -lt $max_attempts ]; then echo "Installation fehlgeschlagen. Warte ${delay} Sekunden vor erneutem Versuch..." sleep $delay delay=$((delay * 2)) # Exponential backoff fi attempt=$((attempt + 1)) done return 1 } # Versuche Installation mit Retry if ! install_with_retry; then echo "" echo "FEHLER: Installation der Dependencies fehlgeschlagen nach mehreren Versuchen!" echo "Mögliche Lösungen:" echo "1. Prüfe deine Internetverbindung" echo "2. Versuche es später erneut (npm Registry könnte temporär überlastet sein)" echo "3. Verwende einen alternativen Registry: npm config set registry https://registry.npmmirror.com" exit 1 fi echo "✓ Dependencies installiert" # Aktiviere set -e für den Rest des Skripts set -e # Baue Client echo "" echo "Baue Client für Production..." 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 "docroot/dist" ]; then rm -rf docroot/dist fi cp -r client/dist docroot/ echo "✓ Dateien kopiert" # Erstelle .env Datei falls nicht vorhanden if [ ! -f ".env" ]; then echo "" echo "Erstelle .env Datei..." cat > .env << EOF NODE_ENV=production PORT=4000 SESSION_SECRET=$(openssl rand -hex 32) EOF echo "✓ .env Datei erstellt" echo "WICHTIG: Bitte ändere SESSION_SECRET in .env!" else echo "✓ .env Datei existiert bereits" fi # Prüfe ob systemd Service existiert echo "" echo "==========================================" echo "Installation abgeschlossen!" echo "==========================================" echo "" echo "Nächste Schritte:" echo "1. Überprüfe die .env Datei und passe SESSION_SECRET an" echo "2. Stelle sicher, dass Apache korrekt konfiguriert ist" echo "3. Starte den Server mit: npm run start:prod" echo " oder als systemd Service (siehe install-service.sh)" echo "" echo "Apache-Konfiguration sollte enthalten:" echo " ProxyPass / http://localhost:4000/" echo " ProxyPassReverse / http://localhost:4000/" echo ""