#!/usr/bin/env bash # init.sh - Инициализация проекта OzonGuard на Ubuntu Linux # --------------------------------------------------------- # 1️⃣ Проверка наличия Python if ! command -v python3 >/dev/null 2>&1; then echo "Error: Python3 не найден в PATH. Установите Python 3.9+ и повторите." >&2 exit 1 fi # 2️⃣ Создание виртуального окружения VENV_DIR="venv" if [ ! -d "$VENV_DIR" ]; then python3 -m venv "$VENV_DIR" echo "Виртуальное окружение создано в $VENV_DIR" else echo "Виртуальное окружение уже существует" fi # 3️⃣ Активация venv # shellcheck source=/dev/null source "$VENV_DIR/bin/activate" if [ $? -ne 0 ]; then echo "Error: Не удалось активировать виртуальное окружение" >&2 exit 1 fi echo "Виртуальное окружение активировано" # 4️⃣ Установка зависимостей backend REQ_FILE="backend/requirements.txt" if [ -f "$REQ_FILE" ]; then pip install -r "$REQ_FILE" echo "Зависимости backend установлены" else echo "Warning: requirements.txt не найден, пропускаем установку backend зависимостей" fi # 5️⃣ Инициализация базы данных (если установлен psql) if command -v psql >/dev/null 2>&1; then INIT_SQL="db/init.sql" if [ -f "$INIT_SQL" ]; then ENV_FILE="backend/.env" if [ -f "$ENV_FILE" ]; then # Читаем DATABASE_URL из .env DB_URL=$(grep '^DATABASE_URL=' "$ENV_FILE" | cut -d'=' -f2-) if [ -n "$DB_URL" ]; then # Преобразуем URL вида postgresql://user:pass@host:port/db # Используем pgsql параметр -d -h -p -U # Сохраняем пароль в переменной окружения PGPASSWORD URI=$(python3 -c "import sys, urllib.parse as u; print(u.urlparse('$DB_URL')._replace(scheme=''))." ) # Extract components using awk (fallback if python not available) USER=$(echo "$DB_URL" | sed -E 's|postgresql://([^:]+):([^@]+)@.*|\1|') PASS=$(echo "$DB_URL" | sed -E 's|postgresql://([^:]+):([^@]+)@.*|\2|') HOST=$(echo "$DB_URL" | sed -E 's|postgresql://[^@]+@([^:/]+).*|\1|') PORT=$(echo "$DB_URL" | sed -E 's|postgresql://[^@]+@[^:]+:([0-9]+).*|\1|') DBNAME=$(echo "$DB_URL" | sed -E 's|.*/([^?]+).*|\1|') export PGPASSWORD="$PASS" echo "Инициализируем базу данных..." psql -h "$HOST" -p "${PORT:-5432}" -U "$USER" -d "$DBNAME" -f "$INIT_SQL" echo "База данных инициализирована" unset PGPASSWORD else echo "Warning: DATABASE_URL не найден в .env, пропускаем инициализацию БД" fi else echo "Warning: .env файл не найден, пропускаем инициализацию БД" fi else echo "Warning: init.sql не найден, пропускаем инициализацию БД" fi else echo "Warning: psql не найден в PATH. Запустите 'psql -f db/init.sql' вручную, используя параметры из .env." fi # 6️⃣ Запуск Flask сервера echo "Запуск Flask сервера..." python3 backend/app.py