Завершена настройка домена для дева, теста и прода. Соединение через ssh-туннель

This commit is contained in:
2026-06-16 19:15:54 +03:00
parent 56b5d09a4d
commit b04fbb2e17
14 changed files with 356 additions and 26 deletions
+12 -1
View File
@@ -27,6 +27,11 @@ class Settings(BaseSettings):
app_env: str = "development"
log_level: str = "INFO"
# Публикация локального окружения (dev/test) наружу через VPS-туннель.
# Читает ЛАУНЧЕР (run.ps1/run.sh): local — только localhost; vps — плюс SSH-туннель
# на forbidden-stars.ru. Влияет на cookie_secure (vps ⇒ снаружи HTTPS ⇒ Secure-cookie).
local_public: str = "local"
# Часовой пояс приложения (фиксированное смещение, по умолчанию МСК +3).
# Хранение всегда в UTC; смещение применяется к «дате игры» и отображению.
app_tz_offset_hours: int = 3
@@ -45,7 +50,7 @@ class Settings(BaseSettings):
jwt_algorithm: str = "HS256"
jwt_user_ttl_minutes: int = 60 * 24 * 7
jwt_admin_ttl_minutes: int = 60 * 8
cookie_secure: bool = False
# cookie_secure НЕ задаётся вручную — выводится из окружения (см. property ниже).
cookie_domain: str | None = None
# Аутентификация. Методы входа определяются окружением (dev: telegram+stub,
@@ -92,6 +97,12 @@ class Settings(BaseSettings):
def upload_dir(self) -> str:
return self.dev_upload_dir if self.is_development else self.prod_upload_dir
@property
def cookie_secure(self) -> bool:
"""Secure-cookie нужен везде, где снаружи HTTPS (домен). Исключение —
нативный dev на localhost по HTTP (development + local_public=local)."""
return not (self.is_development and self.local_public.lower() == "local")
@property
def cookie_domain_value(self) -> str | None:
return self.cookie_domain or None
+3 -1
View File
@@ -77,7 +77,9 @@ def create_app() -> FastAPI:
lifespan=_lifespan,
)
if settings.cors_origins_list:
# CORS нужен только в dev (vite на :5173 и API на :8000 — разные origin).
# В test/prod (и dev через VPS-туннель) всё single-origin → CORS не подключаем.
if settings.is_development and settings.cors_origins_list:
app.add_middleware(
CORSMiddleware,
allow_origins=settings.cors_origins_list,
+4 -1
View File
@@ -8,4 +8,7 @@ echo "[entrypoint] Бутстрап справочников и админист
python -m app.bootstrap
echo "[entrypoint] Запуск сервера…"
exec uvicorn app.main:app --host 0.0.0.0 --port 8000 --workers 1
# --proxy-headers + доверие к X-Forwarded-* от реверс-прокси (Caddy на VPS):
# чтобы приложение знало, что снаружи запрос пришёл по HTTPS.
exec uvicorn app.main:app --host 0.0.0.0 --port 8000 --workers 1 \
--proxy-headers --forwarded-allow-ips="*"