All checks were successful
continuous-integration/drone/push Build is passing
139 lines
6.0 KiB
Bash
Executable File
139 lines
6.0 KiB
Bash
Executable File
#!/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 |