#!/bin/bash set -e echo "🚀 Team Status Board - Запуск приложения" echo "=========================================" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$SCRIPT_DIR" # Функция проверки наличия команды command_exists() { command -v "$1" >/dev/null 2>&1 } # Определение команды Python (с проверкой pip) PYTHON_CMD="" for cmd in python3 py python; do if command_exists "$cmd" && "$cmd" -m pip --version >/dev/null 2>&1; then PYTHON_CMD="$cmd" break fi done if [ -z "$PYTHON_CMD" ]; then echo "❌ Python или pip не найден. Установите Python 3.8+" echo " Windows: https://www.python.org/downloads/" echo " При установке отметьте 'Add Python to PATH'" exit 1 fi echo "✓ Python найден: $($PYTHON_CMD --version)" # Проверка Node.js if ! command_exists node; then echo "❌ Node.js не найден. Установите Node.js 18+" exit 1 fi echo "✓ Node.js найден: $(node --version)" # Проверка npm if ! command_exists npm; then echo "❌ npm не найден. Установите npm" exit 1 fi echo "✓ npm найден: $(npm --version)" # Создание и активация venv для бэкенда if [ ! -d "backend/venv" ]; then echo "📦 Создание виртуального окружения Python..." $PYTHON_CMD -m venv backend/venv fi echo "✓ Виртуальное окружение готово" # Активация venv (разные способы для Linux/WSL и Windows) if [ -f "backend/venv/bin/activate" ]; then source backend/venv/bin/activate elif [ -f "backend/venv/Scripts/activate" ]; then source backend/venv/Scripts/activate else echo "❌ Не найдено окружение venv" exit 1 fi # Установка зависимостей Python echo "📦 Установка Python зависимостей..." pip install --quiet -r backend/requirements.txt echo "✓ Python зависимости установлены" # Установка зависимостей Node.js echo "📦 Установка Node.js зависимостей..." cd frontend if [ ! -f "node_modules/.package-lock.json" ] || [ ! -x "node_modules/.bin/vite" ]; then npm install --silent fi echo "✓ Node.js зависимости установлены" cd .. # Определение порта для бэкенда BACKEND_PORT=8000 FRONTEND_PORT=3000 # Проверка и освобождение портов (опционально) if command_exists lsof; then if lsof -i :$BACKEND_PORT >/dev/null 2>&1; then echo "⚠️ Порт $BACKEND_PORT уже занят,Attempting to kill process..." lsof -ti :$BACKEND_PORT | xargs kill -9 2>/dev/null || true sleep 1 fi if lsof -i :$FRONTEND_PORT >/dev/null 2>&1; then echo "⚠️ Порт $FRONTEND_PORT уже занят, attempting to kill process..." lsof -ti :$FRONTEND_PORT | xargs kill -9 2>/dev/null || true sleep 1 fi fi # Примечание: база данных сохраняется между запусками echo "" echo "=========================================" echo "🔙 Запуск бэкенда (FastAPI)..." echo "🎨 Запуск фронтенда (React + Vite)..." echo "=========================================" echo "" # Запуск бэкенда в фоне cd backend $PYTHON_CMD main.py & BACKEND_PID=$! cd .. # Ожидание запуска бэкенда echo "⏳ Ожидание запуска бэкенда..." sleep 3 # Проверка работоспособности бэкенда if command_exists curl; then if curl -s http://localhost:$BACKEND_PORT/api/employees >/dev/null 2>&1; then echo "✓ Бэкенд запущен успешно" else echo "⚠️ Бэкенд может быть недоступен, проверьте логи" fi fi # Запуск фронтенда cd frontend npm run dev & FRONTEND_PID=$! cd .. echo "" echo "=========================================" echo "✅ Приложение запущено!" echo "" echo "🌐 Фронтенд: http://localhost:$FRONTEND_PORT" echo "🔌 Бэкенд API: http://localhost:$BACKEND_PORT" echo "📚 API Docs: http://localhost:$BACKEND_PORT/docs" echo "" echo "PID бэкенда: $BACKEND_PID" echo "PID фронтенда: $FRONTEND_PID" echo "" echo "Для остановки нажмите Ctrl+C" echo "=========================================" # Ожидание завершения wait