#!/usr/bin/env pwsh # ╔═══════════════════════════════════════════════════════════════════════════╗ # ║ Единый лаунчер dev / test. Что запускать — решает APP_ENV из корневого .env ║ # ╚═══════════════════════════════════════════════════════════════════════════╝ # development → uvicorn --reload (бэк) + vite (фронт), нативно, в двух окнах # test → docker compose прод-клон (порт 8080) # production → лаунчером НЕ запускается (прод обособлен: docker compose up -d на Pi) # # Запуск: .\run.ps1 # Если ругается на политику: Set-ExecutionPolicy -Scope CurrentUser RemoteSigned $ErrorActionPreference = "Stop" $root = $PSScriptRoot $envFile = Join-Path $root ".env" if (-not (Test-Path $envFile)) { Write-Host "Нет .env в корне. Скопируйте: Copy-Item .env.example .env" -ForegroundColor Red exit 1 } # Читаем APP_ENV из .env (последнее присвоение побеждает). $appEnv = "development" foreach ($line in Get-Content $envFile) { if ($line -match '^\s*APP_ENV\s*=\s*([^#\s]+)') { $appEnv = $matches[1].Trim().ToLower() } } Write-Host "APP_ENV = $appEnv" -ForegroundColor Cyan switch ($appEnv) { "development" { $backend = Join-Path $root "backend" $frontend = Join-Path $root "frontend" $py = Join-Path $backend ".venv\Scripts\python.exe" if (-not (Test-Path $py)) { Write-Host "Нет venv: $py" -ForegroundColor Red Write-Host "Сначала: cd backend; python -m venv .venv; .\.venv\Scripts\Activate.ps1; pip install -e `".[dev]`"" -ForegroundColor Yellow exit 1 } if (-not (Test-Path (Join-Path $frontend "node_modules"))) { Write-Host "Нет node_modules. Сначала: cd frontend; npm install" -ForegroundColor Red exit 1 } Write-Host "Запуск бэка (uvicorn --reload) и фронта (vite) в отдельных окнах…" -ForegroundColor Green Start-Process powershell -ArgumentList @( "-NoExit", "-Command", "Set-Location '$backend'; & '$py' -m uvicorn app.main:app --reload" ) Start-Process powershell -ArgumentList @( "-NoExit", "-Command", "Set-Location '$frontend'; npm run dev" ) Write-Host "" Write-Host " Бэк: http://127.0.0.1:8000 (Swagger: /api/docs)" -ForegroundColor Green Write-Host " Фронт: http://127.0.0.1:5173" -ForegroundColor Green } "test" { $compose = Join-Path $root "docker-compose.test.yml" Write-Host "Сборка и запуск прод-клона в Docker (порт 8080)…" -ForegroundColor Green docker compose -f $compose up --build -d if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } Write-Host "" Write-Host " Открыть: http://localhost:8080 (Swagger: /api/docs)" -ForegroundColor Green Write-Host " Логи: docker compose -f docker-compose.test.yml logs -f" Write-Host " Стоп: docker compose -f docker-compose.test.yml down -v" } "production" { Write-Host "production лаунчером не запускается — прод обособлен." -ForegroundColor Yellow Write-Host "Деплой на Pi (из ветки main): docker compose up -d --build" exit 1 } default { Write-Host "Неизвестный APP_ENV='$appEnv'. Допустимо: development | test | production." -ForegroundColor Red exit 1 } }