This commit is contained in:
139
run_gateway_with_dependencies.sh
Executable file
139
run_gateway_with_dependencies.sh
Executable file
@@ -0,0 +1,139 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Скрипт для запуска API Gateway с зависимостями для приложения Women Safety
|
||||
|
||||
# Устанавливаем цветные сообщения
|
||||
GREEN="\033[1;32m"
|
||||
BLUE="\033[1;34m"
|
||||
YELLOW="\033[1;33m"
|
||||
RED="\033[1;31m"
|
||||
RESET="\033[0m"
|
||||
|
||||
echo -e "${BLUE}🚀 Запуск API Gateway и необходимых сервисов...${RESET}"
|
||||
|
||||
# Переход в директорию проекта
|
||||
cd "$(dirname "$0")" || { echo -e "${RED}Не удалось перейти в директорию проекта${RESET}"; exit 1; }
|
||||
|
||||
# Активация виртуального окружения, если оно существует
|
||||
if [ -d "venv" ]; then
|
||||
echo -e "${YELLOW}🔄 Активация виртуального окружения venv...${RESET}"
|
||||
source venv/bin/activate
|
||||
elif [ -d ".venv" ]; then
|
||||
echo -e "${YELLOW}🔄 Активация виртуального окружения .venv...${RESET}"
|
||||
source .venv/bin/activate
|
||||
else
|
||||
echo -e "${YELLOW}⚠️ Виртуальное окружение не найдено, продолжаем без него...${RESET}"
|
||||
fi
|
||||
|
||||
# Установка переменной PYTHONPATH
|
||||
export PYTHONPATH="${PWD}:${PYTHONPATH}"
|
||||
|
||||
# Функция для проверки, запущен ли сервис на указанном порту
|
||||
check_service() {
|
||||
local port=$1
|
||||
local service_name=$2
|
||||
|
||||
if lsof -ti:$port > /dev/null 2>&1; then
|
||||
echo -e "${GREEN}✅ Сервис $service_name уже запущен на порту $port${RESET}"
|
||||
return 0
|
||||
else
|
||||
echo -e "${YELLOW}⚠️ Сервис $service_name не запущен на порту $port${RESET}"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Функция для запуска сервиса
|
||||
start_service() {
|
||||
local port=$1
|
||||
local service_path=$2
|
||||
local service_name=$3
|
||||
|
||||
echo -e "${BLUE}🚀 Запуск $service_name на порту $port...${RESET}"
|
||||
cd "$service_path" || { echo -e "${RED}❌ Не удалось перейти в директорию $service_path${RESET}"; return 1; }
|
||||
|
||||
# Запускаем сервис в фоновом режиме
|
||||
python -m uvicorn main:app --host 0.0.0.0 --port $port &
|
||||
local pid=$!
|
||||
|
||||
# Ждем 3 секунды и проверяем, запустился ли сервис
|
||||
sleep 3
|
||||
if kill -0 $pid 2>/dev/null; then
|
||||
echo -e "${GREEN}✅ Сервис $service_name успешно запущен (PID: $pid)${RESET}"
|
||||
# Возвращаемся в корневую директорию
|
||||
cd "$(dirname "$0")" || { echo -e "${RED}Не удалось вернуться в корневую директорию${RESET}"; exit 1; }
|
||||
return 0
|
||||
else
|
||||
echo -e "${RED}❌ Не удалось запустить сервис $service_name${RESET}"
|
||||
# Возвращаемся в корневую директорию
|
||||
cd "$(dirname "$0")" || { echo -e "${RED}Не удалось вернуться в корневую директорию${RESET}"; exit 1; }
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Проверяем и запускаем пользовательский сервис (создаёт таблицы пользователей)
|
||||
if ! check_service 8001 "User Service"; then
|
||||
start_service 8001 "./services/user_service" "User Service"
|
||||
fi
|
||||
|
||||
# Проверяем и запускаем сервис календаря
|
||||
if ! check_service 8004 "Calendar Service"; then
|
||||
start_service 8004 "./services/calendar_service" "Calendar Service"
|
||||
fi
|
||||
|
||||
# Проверяем и запускаем сервис оповещений об экстренных ситуациях
|
||||
if ! check_service 8002 "Emergency Service"; then
|
||||
start_service 8002 "./services/emergency_service" "Emergency Service"
|
||||
fi
|
||||
|
||||
# Проверяем и запускаем сервис локаций
|
||||
if ! check_service 8003 "Location Service"; then
|
||||
start_service 8003 "./services/location_service" "Location Service"
|
||||
fi
|
||||
|
||||
# Проверяем и запускаем сервис уведомлений
|
||||
if ! check_service 8005 "Notification Service"; then
|
||||
start_service 8005 "./services/notification_service" "Notification Service"
|
||||
fi
|
||||
|
||||
# Ждем несколько секунд, чтобы сервисы успели инициализироваться
|
||||
echo -e "${YELLOW}⏳ Ожидаем инициализацию сервисов (5 сек)...${RESET}"
|
||||
sleep 5
|
||||
|
||||
# Функция для проверки здоровья сервиса
|
||||
check_health() {
|
||||
local url=$1
|
||||
local service_name=$2
|
||||
|
||||
if curl -s "$url" > /dev/null 2>&1; then
|
||||
echo -e "${GREEN}✅ Проверка здоровья $service_name успешна${RESET}"
|
||||
return 0
|
||||
else
|
||||
echo -e "${RED}❌ Проверка здоровья $service_name не удалась${RESET}"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Проверяем здоровье запущенных сервисов
|
||||
check_health "http://localhost:8001/health" "User Service"
|
||||
check_health "http://localhost:8002/health" "Emergency Service"
|
||||
check_health "http://localhost:8003/health" "Location Service"
|
||||
check_health "http://localhost:8004/health" "Calendar Service"
|
||||
check_health "http://localhost:8005/health" "Notification Service"
|
||||
|
||||
# Теперь запускаем API Gateway
|
||||
echo -e "${BLUE}🔄 Запуск API Gateway на порту 8000...${RESET}"
|
||||
|
||||
# Порт для API Gateway
|
||||
API_GATEWAY_PORT=8000
|
||||
|
||||
# Проверяем, не занят ли порт уже
|
||||
if lsof -ti:$API_GATEWAY_PORT > /dev/null 2>&1; then
|
||||
echo -e "${YELLOW}⚠️ Порт $API_GATEWAY_PORT уже занят, освобождаем...${RESET}"
|
||||
lsof -ti:$API_GATEWAY_PORT | xargs kill -9
|
||||
sleep 1
|
||||
fi
|
||||
|
||||
# Запускаем API Gateway в текущем терминале (не в фоне)
|
||||
echo -e "${GREEN}✅ Запуск API Gateway...${RESET}"
|
||||
cd services/api_gateway || { echo -e "${RED}Не удалось перейти в директорию API Gateway${RESET}"; exit 1; }
|
||||
python -m uvicorn main:app --host 0.0.0.0 --port $API_GATEWAY_PORT --reload
|
||||
Reference in New Issue
Block a user