Files
musica-ia/start.sh

139 lines
4.4 KiB
Bash
Executable File

#!/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