#!/bin/bash # .env laden if [ -f .env ]; then set -a source .env set +a fi # Virtuelle Umgebung aktivieren falls vorhanden if [ -f .venv/bin/activate ]; then source .venv/bin/activate elif [ -f venv/bin/activate ]; then source venv/bin/activate fi if [ -z "$ADMIN_PASSWORD" ]; then echo "Fehler: ADMIN_PASSWORD ist nicht gesetzt. Bitte .env befüllen." exit 1 fi PROXY_HOST=${PROXY_HOST:-0.0.0.0} PROXY_PORT=${PROXY_PORT:-8000} ADMIN_PORT=${ADMIN_PORT:-8001} FRONTEND_PORT=5173 PIDS=() cleanup() { echo "Beende alle Prozesse..." for pid in "${PIDS[@]}"; do kill "$pid" 2>/dev/null done wait 2>/dev/null } port_in_use() { lsof -iTCP:"$1" -sTCP:LISTEN -t &>/dev/null } # Ports prüfen bevor irgendetwas gestartet wird for port in "$PROXY_PORT" "$ADMIN_PORT" "$FRONTEND_PORT"; do if port_in_use "$port"; then echo "Fehler: Port $port ist bereits belegt." exit 1 fi done trap cleanup EXIT INT TERM # Datenbank initialisieren echo "Initialisiere Datenbank..." cd backend python3 init_db.py cd .. # Backend starten echo "Starte Backend (Proxy) auf ${PROXY_HOST}:${PROXY_PORT}..." cd backend python3 -m uvicorn main:app --reload --host "$PROXY_HOST" --port "$PROXY_PORT" & PIDS+=($!) # Admin-API immer nur lokal erreichbar (Host nicht konfigurierbar) echo "Starte Admin-API auf 127.0.0.1:${ADMIN_PORT}..." python3 -m uvicorn admin:app --reload --host 127.0.0.1 --port "$ADMIN_PORT" & PIDS+=($!) cd .. # Frontend starten echo "Starte Frontend..." cd frontend npm install --silent npm run dev & PIDS+=($!) cd .. echo "Backend läuft (Port $PROXY_PORT)" echo "Admin-API läuft (Port $ADMIN_PORT, nur lokal)" echo "Admin-Oberfläche: http://localhost:$FRONTEND_PORT" wait