Files
chat/start_all_services.sh
Andrey K. Choi 3050e084fa
All checks were successful
continuous-integration/drone/push Build is passing
main functions commit
2025-10-19 19:50:00 +09:00

106 lines
3.7 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
# Скрипт для запуска микросервисной архитектуры 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