All checks were successful
continuous-integration/drone/push Build is passing
106 lines
3.7 KiB
Bash
Executable File
106 lines
3.7 KiB
Bash
Executable File
#!/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}"
|
||
|
||
# Используем Python из виртуального окружения
|
||
PYTHON_BIN="${PWD}/venv/bin/python"
|
||
|
||
# Функция для проверки доступности порта
|
||
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_BIN 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_BIN -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_BIN -m uvicorn services.api_gateway.main:app --host 0.0.0.0 --port 8000 |