#!/usr/bin/env bash # =========================================== # MusiaIA - Full Stack Startup Script # =========================================== set -euo pipefail # Colors for output GREEN='\033[0;32m' BLUE='\033[0;34m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # Get script directory and project root SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" REPO_ROOT="${SCRIPT_DIR}" echo -e "${BLUE}========================================${NC}" echo -e "${BLUE} MusiaIA - AI Music Generator${NC}" echo -e "${BLUE}========================================${NC}" echo "" # Load environment variables if [[ -f "${REPO_ROOT}/.env" ]]; then echo -e "${YELLOW}Loading environment variables from .env...${NC}" # shellcheck disable=SC1090 source "${REPO_ROOT}/.env" echo -e "${GREEN}✓ Environment loaded${NC}" else echo -e "${YELLOW}⚠ .env file not found, using default values${NC}" fi # Export required environment variables export ANTHROPIC_BASE_URL="${ANTHROPIC_BASE_URL:-https://api.z.ai/api/anthropic}" export ANTHROPIC_AUTH_TOKEN="${ANTHROPIC_AUTH_TOKEN:-}" export PYTHONPATH="${REPO_ROOT}/src/backend/api:${REPO_ROOT}/src/backend" # Verify critical environment variables if [[ -z "${ANTHROPIC_AUTH_TOKEN:-}" ]]; then echo -e "${YELLOW}⚠ Warning: ANTHROPIC_AUTH_TOKEN not set${NC}" else echo -e "${GREEN}✓ ANTHROPIC_AUTH_TOKEN configured${NC}" fi echo "" echo -e "${YELLOW}Configuration:${NC}" echo -e " ANTHROPIC_BASE_URL: ${ANTHROPIC_BASE_URL}" echo -e " ANTHROPIC_AUTH_TOKEN: ${ANTHROPIC_AUTH_TOKEN:0:20}..." echo -e " API_HOST: ${API_HOST:-0.0.0.0}" echo -e " API_PORT: ${API_PORT:-8000}" echo -e " FRONTEND_PORT: 5173" echo "" # Kill existing servers if running echo -e "${YELLOW}Checking for existing processes...${NC}" pkill -f "uvicorn.*main:app" 2>/dev/null || true pkill -f "vite.*5173" 2>/dev/null || true sleep 2 echo -e "${GREEN}✓ Cleaned up old processes${NC}" # Start backend server in background echo "" echo -e "${BLUE}Starting Backend Server (FastAPI)...${NC}" cd "${REPO_ROOT}/src/backend/api" # Start uvicorn with environment PYTHONPATH="${REPO_ROOT}/src/backend/api:${REPO_ROOT}/src/backend" \ uvicorn main:app \ --host "${API_HOST:-0.0.0.0}" \ --port "${API_PORT:-8000}" \ --reload \ > "${REPO_ROOT}/backend.log" 2>&1 & BACKEND_PID=$! echo -e "${GREEN}✓ Backend started (PID: ${BACKEND_PID})${NC}" # Wait for backend to be ready echo -e "${YELLOW}Waiting for backend to be ready...${NC}" for i in {1..30}; do if curl -s http://localhost:8000/health > /dev/null 2>&1; then echo -e "${GREEN}✓ Backend is ready!${NC}" break fi if [[ $i -eq 30 ]]; then echo -e "${RED}✗ Backend failed to start${NC}" kill $BACKEND_PID 2>/dev/null || true exit 1 fi sleep 1 done # Start frontend server in background echo "" echo -e "${BLUE}Starting Frontend Server (Vite + React)...${NC}" cd "${REPO_ROOT}/frontend" npm run dev -- --host 0.0.0.0 --port 5173 \ > "${REPO_ROOT}/frontend.log" 2>&1 & FRONTEND_PID=$! echo -e "${GREEN}✓ Frontend started (PID: ${FRONTEND_PID})${NC}" # Wait for frontend to be ready echo -e "${YELLOW}Waiting for frontend to be ready...${NC}" for i in {1..30}; do if curl -s http://localhost:5173 > /dev/null 2>&1; then echo -e "${GREEN}✓ Frontend is ready!${NC}" break fi if [[ $i -eq 30 ]]; then echo -e "${RED}✗ Frontend failed to start${NC}" kill $BACKEND_PID $FRONTEND_PID 2>/dev/null || true exit 1 fi sleep 1 done # Save PIDs to file for later cleanup echo $BACKEND_PID > "${REPO_ROOT}/.backend.pid" echo $FRONTEND_PID > "${REPO_ROOT}/.frontend.pid" echo "" echo -e "${GREEN}========================================${NC}" echo -e "${GREEN} 🎉 All systems running!${NC}" echo -e "${GREEN}========================================${NC}" echo "" echo -e "${BLUE}Frontend Dashboard:${NC} http://localhost:5173" echo -e "${BLUE}Backend API:${NC} http://localhost:8000" echo -e "${BLUE}API Documentation:${NC} http://localhost:8000/docs" echo "" echo -e "${YELLOW}Press Ctrl+C to stop all servers${NC}" echo "" # Wait for interrupt trap 'echo ""; echo -e "${YELLOW}Shutting down servers...${NC}"; kill $BACKEND_PID $FRONTEND_PID 2>/dev/null || true; rm -f "${REPO_ROOT}/.backend.pid" "${REPO_ROOT}/.frontend.pid"; echo -e "${GREEN}✓ All servers stopped${NC}"; exit 0' INT # Keep script running wait