#!/bin/bash # Скрипт для запуска микросервисной архитектуры Women Safety App # Запускает все необходимые микросервисы и API Gateway # Цвета для вывода GREEN="\033[0;32m" YELLOW="\033[0;33m" BLUE="\033[0;34m" RED="\033[0;31m" NC="\033[0m" # No Color # Переход в директорию проекта cd "$(dirname "$0")" || { echo -e "${RED}Не удалось перейти в директорию проекта${NC}"; exit 1; } # Активация виртуального окружения echo -e "${YELLOW}Активация виртуального окружения...${NC}" source venv/bin/activate # Установка переменной PYTHONPATH export PYTHONPATH="${PWD}:${PYTHONPATH}" # Функция для проверки доступности порта check_port() { local port=$1 if lsof -Pi :$port -sTCP:LISTEN -t >/dev/null ; then return 0 # порт занят else return 1 # порт свободен fi } # Создание скрипта миграции echo -e "${YELLOW}Создание скрипта миграции базы данных...${NC}" cat > migrate_db.py << 'EOF' import asyncio async def run_migrations(): from shared.database import init_db print("✅ Миграции базы данных запущены") await init_db() print("✅ Миграции базы данных завершены") if __name__ == "__main__": asyncio.run(run_migrations()) EOF # Запуск миграции echo -e "${YELLOW}Запуск миграций базы данных...${NC}" python migrate_db.py # Запуск микросервисов в фоновом режиме echo -e "${YELLOW}Запуск микросервисов...${NC}" # Список сервисов для запуска services=( "user_service:8001" "emergency_service:8002" "location_service:8003" "calendar_service:8004" "notification_service:8005" ) # Запуск сервисов в фоновом режиме for service in "${services[@]}"; do name=${service%%:*} port=${service#*:} if check_port $port; then echo -e "${YELLOW}Порт $port уже используется, пропускаем запуск $name${NC}" continue fi echo -e "${BLUE}Запуск $name на порту $port...${NC}" python -m uvicorn services.${name}.main:app --host 0.0.0.0 --port $port & # Сохраняем PID процесса echo $! > /tmp/${name}.pid # Ждем немного, чтобы сервис успел запуститься sleep 2 done # Проверка, что все сервисы запущены echo -e "${YELLOW}Проверка статуса сервисов...${NC}" for service in "${services[@]}"; do name=${service%%:*} port=${service#*:} if check_port $port; then echo -e "${GREEN}✅ Сервис $name запущен на порту $port${NC}" else echo -e "${RED}❌ Сервис $name НЕ запущен на порту $port${NC}" fi done # Получение IP-адреса для доступа из мобильного приложения EXTERNAL_IP=$(hostname -I | awk '{print $1}') echo -e "${GREEN}📱 IP-адрес для доступа из мобильного приложения: ${EXTERNAL_IP}:8000${NC}" # Запуск API Gateway echo -e "${GREEN}Запуск API Gateway на порту 8000...${NC}" python -m uvicorn services.api_gateway.main:app --host 0.0.0.0 --port 8000