139 lines
4.4 KiB
Bash
Executable File
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
|