#!/bin/bash SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" # .env laden if [ -f "$SCRIPT_DIR/.env" ]; then set -a source "$SCRIPT_DIR/.env" set +a fi # Virtuelle Umgebung aktivieren falls vorhanden if [ -f "$SCRIPT_DIR/.venv/bin/activate" ]; then source "$SCRIPT_DIR/.venv/bin/activate" elif [ -f "$SCRIPT_DIR/venv/bin/activate" ]; then source "$SCRIPT_DIR/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_HOST=${ADMIN_HOST:-127.0.0.1} 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+=($!) echo "Starte Admin-API auf ${ADMIN_HOST}:${ADMIN_PORT}..." python3 -m uvicorn admin:app --reload --host "$ADMIN_HOST" --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 (${ADMIN_HOST}:${ADMIN_PORT})" echo "Admin-Oberfläche: http://localhost:$FRONTEND_PORT" wait