129 lines
3.4 KiB
Bash
Executable File
129 lines
3.4 KiB
Bash
Executable File
#!/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 ""
|
|
|