105 lines
No EOL
2.9 KiB
Bash
105 lines
No EOL
2.9 KiB
Bash
#!/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 |