Files
chat/run_gateway_with_dependencies.sh
Andrew K. Choi 91c7e04474
All checks were successful
continuous-integration/drone/push Build is passing
API refactor
2025-10-07 16:25:52 +09:00

139 lines
6.0 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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