#!/bin/bash # Women's Safety App - No Docker Startup Script echo "๐Ÿš€ Starting Women Safety App Services (No Docker Mode)" # Set Python path export PYTHONPATH=$PWD:$PYTHONPATH echo "๐Ÿ”ง Activating virtual environment..." if [ -f ".venv/bin/activate" ]; then source .venv/bin/activate else echo "โŒ Virtual environment not found at .venv/" exit 1 fi echo "๐Ÿ“ฆ Installing dependencies..." pip install -r requirements.txt echo "๐Ÿ—ƒ๏ธ Checking database connection..." python -c " import asyncio import asyncpg from shared.config import settings async def test_db(): try: conn = await asyncpg.connect(settings.DATABASE_URL.replace('+asyncpg', '')) print('โœ… Database connection successful!') await conn.close() except Exception as e: print(f'โŒ Database connection failed: {e}') exit(1) asyncio.run(test_db()) " # Function to kill processes by port kill_port() { local port=$1 echo "๐Ÿ›‘ Stopping service on port $port..." lsof -ti:$port | xargs kill -9 2>/dev/null || true } # Function to cleanup on exit cleanup() { echo "๐Ÿ›‘ Shutting down services..." kill_port 8000 kill_port 8001 kill_port 8002 kill_port 8003 kill_port 8004 kill_port 8005 echo "โœ… All services stopped" exit 0 } # Trap cleanup on script exit trap cleanup EXIT # Clean up any existing processes echo "๐Ÿงน Cleaning up existing processes..." kill_port 8000 kill_port 8001 kill_port 8002 kill_port 8003 kill_port 8004 kill_port 8005 echo "โณ Waiting for ports to be freed..." sleep 3 echo "๐ŸŽฏ Starting microservices..." export PYTHONPATH="${PWD}:${PYTHONPATH}" # Start User Service echo "Starting User Service (port 8001)..." (cd services/user_service && PYTHONPATH="${PWD}/../..:${PYTHONPATH}" python -m uvicorn main:app --host 0.0.0.0 --port 8001 --reload) & # Start Emergency Service echo "Starting Emergency Service (port 8002)..." (cd services/emergency_service && PYTHONPATH="${PWD}/../..:${PYTHONPATH}" python -m uvicorn main:app --host 0.0.0.0 --port 8002 --reload) & # Start Location Service echo "Starting Location Service (port 8003)..." (cd services/location_service && PYTHONPATH="${PWD}/../..:${PYTHONPATH}" python -m uvicorn main:app --host 0.0.0.0 --port 8003 --reload) & # Start Calendar Service echo "Starting Calendar Service (port 8004)..." (cd services/calendar_service && PYTHONPATH="${PWD}/../..:${PYTHONPATH}" python -m uvicorn main:app --host 0.0.0.0 --port 8004 --reload) & # Start Notification Service echo "Starting Notification Service (port 8005)..." (cd services/notification_service && PYTHONPATH="${PWD}/../..:${PYTHONPATH}" python -m uvicorn main:app --host 0.0.0.0 --port 8005 --reload) & # Start API Gateway echo "Starting API Gateway (port 8000)..." (cd services/api_gateway && PYTHONPATH="${PWD}/../..:${PYTHONPATH}" python -m uvicorn main:app --host 0.0.0.0 --port 8000 --reload) & # Wait for services to start echo "โณ Waiting for services to start..." sleep 10 echo "๐ŸŽ‰ All services started successfully!" echo "๐Ÿ“‹ Services Overview:" echo " ๐Ÿ“ก API Gateway: http://localhost:8000" echo " ๐Ÿ‘ค User Service: http://localhost:8001" echo " ๐Ÿšจ Emergency Service: http://localhost:8002" echo " ๐Ÿ“ Location Service: http://localhost:8003" echo " ๐Ÿ“… Calendar Service: http://localhost:8004" echo " ๐Ÿ”” Notification Service: http://localhost:8005" echo "" echo "๐Ÿ“– API Documentation: http://localhost:8000/docs" echo "๐Ÿ“Š Monitoring services... Press Ctrl+C to stop all services" # Monitor services while true; do sleep 30 # Check if services are still running if ! curl -s http://localhost:8000/health > /dev/null 2>&1; then echo "โš ๏ธ API Gateway seems to be down, restarting..." cd services/api_gateway && python -m uvicorn main:app --host 0.0.0.0 --port 8000 --reload & cd ../.. fi if ! curl -s http://localhost:8001/health > /dev/null 2>&1; then echo "โš ๏ธ User Service seems to be down, restarting..." cd services/user_service && python -m uvicorn main:app --host 0.0.0.0 --port 8001 --reload & cd ../.. fi done