gateway/notes/start.sh
2025-04-06 23:57:10 +02:00

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