This commit is contained in:
103
start_all_services.sh
Executable file
103
start_all_services.sh
Executable file
@@ -0,0 +1,103 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user