#!/bin/bash set -e # Pounce Start Script # Startet Backend und Frontend sauber SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" BACKEND_DIR="$SCRIPT_DIR/backend" FRONTEND_DIR="$SCRIPT_DIR/frontend" echo "==========================================" echo "🚀 Pounce Start Script" echo "==========================================" # Farben für Output GREEN='\033[0;32m' RED='\033[0;31m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # Funktion zum Beenden von Prozessen stop_services() { echo "" echo -e "${YELLOW}🛑 Beende laufende Prozesse...${NC}" # Backend (uvicorn) - mehrere Versuche pkill -9 -f "uvicorn app.main:app" 2>/dev/null || true pkill -9 -f "uvicorn" 2>/dev/null || true # Frontend (next) - mehrere Versuche pkill -9 -f "next start" 2>/dev/null || true pkill -9 -f "node.*next" 2>/dev/null || true pkill -9 -f "npm start" 2>/dev/null || true # Port 3000 freigeben (alle Prozesse auf Port 3000) lsof -ti:3000 2>/dev/null | xargs kill -9 2>/dev/null || true # Port 8000 freigeben lsof -ti:8000 2>/dev/null | xargs kill -9 2>/dev/null || true sleep 3 # Prüfen ob Ports frei sind if lsof -i:8000 >/dev/null 2>&1; then echo -e "${RED}✗ Port 8000 ist noch belegt!${NC}" lsof -i:8000 exit 1 fi if lsof -i:3000 >/dev/null 2>&1; then echo -e "${RED}✗ Port 3000 ist noch belegt!${NC}" lsof -i:3000 exit 1 fi echo -e "${GREEN}✓ Alle Prozesse beendet, Ports frei${NC}" } # Funktion zum Starten des Backends start_backend() { echo "" echo -e "${YELLOW}🔧 Starte Backend...${NC}" cd "$BACKEND_DIR" # Aktiviere Virtual Environment if [ ! -d "venv" ]; then echo -e "${RED}✗ venv nicht gefunden!${NC}" exit 1 fi source venv/bin/activate # Lösche altes Log > backend.log # Starte uvicorn im Hintergrund nohup uvicorn app.main:app --host 0.0.0.0 --port 8000 > backend.log 2>&1 & BACKEND_PID=$! echo "Backend PID: $BACKEND_PID" # Warte und prüfe mehrmals for i in {1..10}; do sleep 1 if curl -s http://127.0.0.1:8000/health > /dev/null 2>&1; then echo -e "${GREEN}✓ Backend läuft auf Port 8000${NC}" return 0 fi echo -n "." done echo "" echo -e "${RED}✗ Backend konnte nicht gestartet werden${NC}" echo "Letzte 30 Zeilen vom Log:" tail -30 backend.log exit 1 } # Funktion zum Starten des Frontends start_frontend() { echo "" echo -e "${YELLOW}🎨 Starte Frontend...${NC}" cd "$FRONTEND_DIR" # Prüfe ob .next existiert if [ ! -d ".next" ]; then echo -e "${RED}✗ .next nicht gefunden! Bitte erst 'npm run build' ausführen.${NC}" exit 1 fi # Lösche altes Log > frontend.log # Starte Frontend im Hintergrund PORT=3000 nohup npm start > frontend.log 2>&1 & FRONTEND_PID=$! echo "Frontend PID: $FRONTEND_PID" # Warte und prüfe mehrmals for i in {1..15}; do sleep 1 # Prüfe ob Prozess noch läuft if ! kill -0 $FRONTEND_PID 2>/dev/null; then echo "" echo -e "${RED}✗ Frontend-Prozess wurde beendet${NC}" echo "Letzte 30 Zeilen vom Log:" tail -30 frontend.log exit 1 fi # Prüfe ob Port offen ist if curl -s http://127.0.0.1:3000 > /dev/null 2>&1; then echo -e "${GREEN}✓ Frontend läuft auf Port 3000${NC}" return 0 fi echo -n "." done echo "" echo -e "${RED}✗ Frontend konnte nicht gestartet werden${NC}" echo "Letzte 30 Zeilen vom Log:" tail -30 frontend.log exit 1 } # Funktion für Status-Anzeige show_status() { echo "" echo "==========================================" echo -e "${GREEN}✓ Pounce erfolgreich gestartet!${NC}" echo "==========================================" echo "" echo "URLs:" echo " Backend: http://127.0.0.1:8000" echo " Frontend: http://127.0.0.1:3000" echo " Health: http://127.0.0.1:8000/health" echo "" echo "Logs:" echo " Backend: tail -f $BACKEND_DIR/backend.log" echo " Frontend: tail -f $FRONTEND_DIR/frontend.log" echo "" echo "Laufende Prozesse:" ps aux | grep -E "(uvicorn|next start)" | grep -v grep | awk '{print " PID " $2 ": " $11 " " $12 " " $13}' echo "" echo "Ports:" lsof -i:8000 -i:3000 2>/dev/null | grep LISTEN || echo " Keine Port-Info verfügbar" echo "" } # Funktion zum Testen der Services test_services() { echo "" echo -e "${YELLOW}🧪 Teste Services...${NC}" # Test Backend Health HEALTH=$(curl -s http://127.0.0.1:8000/health | grep -o '"status":"healthy"' || echo "") if [ -n "$HEALTH" ]; then echo -e "${GREEN}✓ Backend Health Check OK${NC}" else echo -e "${RED}✗ Backend Health Check FAILED${NC}" fi # Test Frontend HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:3000) if [ "$HTTP_CODE" = "200" ]; then echo -e "${GREEN}✓ Frontend HTTP 200 OK${NC}" else echo -e "${RED}✗ Frontend HTTP $HTTP_CODE${NC}" fi # Test OAuth Providers OAUTH=$(curl -s http://127.0.0.1:8000/api/v1/oauth/providers | grep -o '"google_enabled":true' || echo "") if [ -n "$OAUTH" ]; then echo -e "${GREEN}✓ OAuth Providers OK${NC}" else echo -e "${YELLOW}⚠ OAuth Check konnte nicht durchgeführt werden${NC}" fi } # Main stop_services start_backend start_frontend test_services show_status echo -e "${GREEN}🎉 Alles läuft!${NC}" echo "" echo "Zum Stoppen: pkill -f 'uvicorn' && pkill -f 'next start'"