53 lines
3.1 KiB
Bash
53 lines
3.1 KiB
Bash
#!/usr/bin/env bash
|
|
# ╔═══════════════════════════════════════════════════════════════════════════╗
|
|
# ║ Единый лаунчер dev / test. Что запускать — решает APP_ENV из корневого .env ║
|
|
# ╚═══════════════════════════════════════════════════════════════════════════╝
|
|
# development → uvicorn --reload (бэк) + vite (фронт), нативно (Ctrl+C останавливает оба)
|
|
# test → docker compose прод-клон (порт 8080)
|
|
# production → лаунчером НЕ запускается (прод обособлен: docker compose up -d на Pi)
|
|
#
|
|
# Запуск: ./run.sh (при необходимости: chmod +x run.sh)
|
|
set -euo pipefail
|
|
root="$(cd "$(dirname "$0")" && pwd)"
|
|
|
|
envf="$root/.env"
|
|
[ -f "$envf" ] || { echo "Нет .env в корне. Скопируйте: cp .env.example .env"; exit 1; }
|
|
|
|
# APP_ENV из .env (последнее присвоение, без комментариев/пробелов).
|
|
app_env="$(grep -E '^[[:space:]]*APP_ENV[[:space:]]*=' "$envf" | tail -n1 \
|
|
| sed -E 's/^[^=]*=[[:space:]]*//; s/[[:space:]#].*$//' | tr 'A-Z' 'a-z')"
|
|
app_env="${app_env:-development}"
|
|
echo "APP_ENV = $app_env"
|
|
|
|
case "$app_env" in
|
|
development)
|
|
py="$root/backend/.venv/bin/python"
|
|
[ -x "$py" ] || py="$root/backend/.venv/Scripts/python.exe" # Git Bash на Windows
|
|
[ -x "$py" ] || { echo "Нет venv. Сначала: cd backend && python -m venv .venv && pip install -e '.[dev]'"; exit 1; }
|
|
[ -d "$root/frontend/node_modules" ] || { echo "Нет node_modules. Сначала: cd frontend && npm install"; exit 1; }
|
|
echo "Запуск бэка (uvicorn --reload) и фронта (vite)… Ctrl+C — остановить оба."
|
|
( cd "$root/backend" && exec "$py" -m uvicorn app.main:app --reload ) &
|
|
back=$!
|
|
trap 'kill "$back" 2>/dev/null || true' EXIT INT TERM
|
|
echo " Бэк: http://127.0.0.1:8000 (Swagger: /api/docs)"
|
|
echo " Фронт: http://127.0.0.1:5173"
|
|
( cd "$root/frontend" && npm run dev )
|
|
;;
|
|
test)
|
|
echo "Сборка и запуск прод-клона в Docker (порт 8080)…"
|
|
docker compose -f "$root/docker-compose.test.yml" up --build -d
|
|
echo " Открыть: http://localhost:8080 (Swagger: /api/docs)"
|
|
echo " Логи: docker compose -f docker-compose.test.yml logs -f"
|
|
echo " Стоп: docker compose -f docker-compose.test.yml down -v"
|
|
;;
|
|
production)
|
|
echo "production лаунчером не запускается — прод обособлен."
|
|
echo "Деплой на Pi (из ветки main): docker compose up -d --build"
|
|
exit 1
|
|
;;
|
|
*)
|
|
echo "Неизвестный APP_ENV='$app_env'. Допустимо: development | test | production."
|
|
exit 1
|
|
;;
|
|
esac
|