Завершена настройка домена для дева, теста и прода. Соединение через ssh-туннель
This commit is contained in:
@@ -1,11 +1,14 @@
|
||||
#!/usr/bin/env pwsh
|
||||
# ╔═══════════════════════════════════════════════════════════════════════════╗
|
||||
# ║ Единый лаунчер dev / test. Что запускать — решает APP_ENV из корневого .env ║
|
||||
# ║ Единый лаунчер dev / test. APP_ENV из корневого .env решает, что запускать. ║
|
||||
# ╚═══════════════════════════════════════════════════════════════════════════╝
|
||||
# development → uvicorn --reload (бэк) + vite (фронт), нативно, в двух окнах
|
||||
# test → docker compose прод-клон (порт 8080)
|
||||
# production → лаунчером НЕ запускается (прод обособлен: docker compose up -d на Pi)
|
||||
#
|
||||
# LOCAL_PUBLIC=vps дополнительно поднимает SSH-туннель на VPS, и dev/test становится
|
||||
# виден снаружи на https://forbidden-stars.ru (нужен настроенный VPS, см. deploy/vps).
|
||||
#
|
||||
# Запуск: .\run.ps1
|
||||
# Если ругается на политику: Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
|
||||
$ErrorActionPreference = "Stop"
|
||||
@@ -17,12 +20,38 @@ if (-not (Test-Path $envFile)) {
|
||||
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() }
|
||||
# Достаём значение ключа из .env (последнее присвоение побеждает; комментарии игнор).
|
||||
function Get-EnvVal([string]$name, [string]$default) {
|
||||
$val = $default
|
||||
foreach ($line in Get-Content $envFile) {
|
||||
if ($line -match "^\s*$name\s*=\s*([^#\s]+)") { $val = $matches[1].Trim() }
|
||||
}
|
||||
return $val
|
||||
}
|
||||
|
||||
$appEnv = (Get-EnvVal "APP_ENV" "development").ToLower()
|
||||
$localPublic = (Get-EnvVal "LOCAL_PUBLIC" "local").ToLower()
|
||||
$vpsHost = Get-EnvVal "VPS_TUNNEL_HOST" ""
|
||||
$vpsUser = Get-EnvVal "VPS_TUNNEL_USER" "tunnel"
|
||||
$vpsPort = Get-EnvVal "VPS_TUNNEL_PORT" "9001"
|
||||
|
||||
Write-Host "APP_ENV = $appEnv LOCAL_PUBLIC = $localPublic" -ForegroundColor Cyan
|
||||
|
||||
# Поднимает SSH reverse-tunnel: VPS:$vpsPort → localhost:$localPort (в отдельном окне).
|
||||
function Start-VpsTunnel([int]$localPort) {
|
||||
if (-not $vpsHost) {
|
||||
Write-Host "LOCAL_PUBLIC=vps, но VPS_TUNNEL_HOST не задан в .env — туннель пропущен." -ForegroundColor Red
|
||||
return
|
||||
}
|
||||
Write-Host "SSH-туннель: forbidden-stars.ru (VPS:$vpsPort) → localhost:$localPort …" -ForegroundColor Green
|
||||
$ssh = "ssh -N -R ${vpsPort}:localhost:${localPort} " +
|
||||
"-o ServerAliveInterval=30 -o ServerAliveCountMax=3 -o ExitOnForwardFailure=yes " +
|
||||
"${vpsUser}@${vpsHost}"
|
||||
Start-Process powershell -ArgumentList @(
|
||||
"-NoExit", "-Command",
|
||||
"Write-Host 'SSH-туннель на forbidden-stars.ru. Закрой окно, чтобы остановить.' -ForegroundColor Cyan; $ssh"
|
||||
)
|
||||
}
|
||||
Write-Host "APP_ENV = $appEnv" -ForegroundColor Cyan
|
||||
|
||||
switch ($appEnv) {
|
||||
"development" {
|
||||
@@ -50,6 +79,10 @@ switch ($appEnv) {
|
||||
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
|
||||
if ($localPublic -eq "vps") {
|
||||
Start-VpsTunnel 5173
|
||||
Write-Host " Публично: https://forbidden-stars.ru" -ForegroundColor Green
|
||||
}
|
||||
}
|
||||
"test" {
|
||||
$compose = Join-Path $root "docker-compose.test.yml"
|
||||
@@ -60,6 +93,10 @@ switch ($appEnv) {
|
||||
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"
|
||||
if ($localPublic -eq "vps") {
|
||||
Start-VpsTunnel 8080
|
||||
Write-Host " Публично: https://forbidden-stars.ru" -ForegroundColor Green
|
||||
}
|
||||
}
|
||||
"production" {
|
||||
Write-Host "production лаунчером не запускается — прод обособлен." -ForegroundColor Yellow
|
||||
|
||||
Reference in New Issue
Block a user