79 lines
3.4 KiB
Bash
79 lines
3.4 KiB
Bash
#!/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 <db> -h <host> -p <port> -U <user>
|
||
# Сохраняем пароль в переменной окружения 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
|