Files
singlechat/install.sh

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 ""