#!/bin/bash # Erkennen des Betriebssystems case "$(uname -s)" in CYGWIN*|MINGW*|MSYS*|Windows*) OS="Windows" VENV_PATH="gwserver/venv/Scripts" ACTIVATE_CMD="$VENV_PATH/activate" ;; *) OS="Unix" VENV_PATH="gwserver/venv/bin" ACTIVATE_CMD="$VENV_PATH/activate" ;; esac echo "Erkanntes Betriebssystem: $OS" # Prüfen, ob Python installiert ist PYTHON_CMD="" if command -v python3 &>/dev/null; then PYTHON_CMD="python3" elif command -v python &>/dev/null; then PYTHON_CMD="python" else echo "Python ist nicht installiert. Bitte installieren Sie Python 3.8 oder höher." exit 1 fi # Virtuelle Umgebung erstellen, falls sie nicht existiert if [ ! -d "gwserver/venv" ]; then echo "Erstelle virtuelle Python-Umgebung..." cd gwserver $PYTHON_CMD -m venv venv cd .. fi # Virtuelle Umgebung aktivieren echo "Aktiviere virtuelle Umgebung..." if [ "$OS" = "Windows" ]; then source "$ACTIVATE_CMD" 2>/dev/null || . "$ACTIVATE_CMD" 2>/dev/null || echo "Warnung: Aktivierung der virtuellen Umgebung fehlgeschlagen. Fahre fort..." else source "$ACTIVATE_CMD" 2>/dev/null || . "$ACTIVATE_CMD" 2>/dev/null || echo "Warnung: Aktivierung der virtuellen Umgebung fehlgeschlagen. Fahre fort..." fi # Abhängigkeiten installieren echo "Installiere Abhängigkeiten..." pip install -r requirements.txt # gwserver als Hintergrundprozess starten echo "Starte gwserver-Server..." # START CORE cd gwserver if [ "$OS" = "Windows" ]; then # Windows: starte in einem separaten Prozess start uvicorn app:app --reload --host 0.0.0.0 --port 8000 # Keine PID-Erfassung nötig unter Windows mit 'start' GWSERVER_PID="" else # Unix: starte im Hintergrund und erfasse PID uvicorn app:app --reload --host 0.0.0.0 --port 8000 & GWSERVER_PID=$! fi # END CORE cd .. echo "gwserver API läuft auf: http://localhost:8000" echo "API-Dokumentation: http://localhost:8000/docs" echo "Drücke STRG+C, um Server zu beenden" # Funktion zum Beenden der Server bei STRG+C cleanup() { echo -e "\nBeende Server..." if [ "$OS" = "Windows" ]; then # Windows: Taskkill für uvicorn taskkill //F //IM uvicorn.exe 2>/dev/null || echo "Konnte uvicorn nicht beenden" else # Unix: Verwende die erfasste PID if [ -n "$GWSERVER_PID" ]; then kill $GWSERVER_PID 2>/dev/null || echo "Konnte Prozess $GWSERVER_PID nicht beenden" fi fi echo "Server wurden beendet" exit 0 } # Signal-Handler für STRG+C trap cleanup SIGINT # Warten auf Benutzeraktion if [ "$OS" = "Windows" ]; then # Unter Windows: Warte auf Eingabe read -p "Drücke Enter zum Beenden..." dummy cleanup else # Unter Unix: Warte auf Prozess if [ -n "$GWSERVER_PID" ]; then wait $GWSERVER_PID else # Fallback: einfach warten read -p "Drücke Enter zum Beenden..." dummy cleanup fi fi