Files
remna/app/main.py
T
2026-07-25 00:37:09 +03:00

50 lines
1.3 KiB
Python

from __future__ import annotations
from contextlib import asynccontextmanager
from pathlib import Path
import asyncio
import logging
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
from starlette.middleware.sessions import SessionMiddleware
from uvicorn.middleware.proxy_headers import ProxyHeadersMiddleware
from config import get_settings
from database import init_db
from routers import admin, guest, pages
from traffic_worker import traffic_grant_worker
logging.basicConfig(level=logging.INFO)
@asynccontextmanager
async def lifespan(_: FastAPI):
Path(get_settings().database_path).parent.mkdir(parents=True, exist_ok=True)
await init_db()
stop_event = asyncio.Event()
worker = asyncio.create_task(traffic_grant_worker(stop_event))
yield
stop_event.set()
await worker
app = FastAPI(title="Remna Site", lifespan=lifespan)
settings = get_settings()
# Dokploy/Traefik: корректный https и Host
app.add_middleware(ProxyHeadersMiddleware, trusted_hosts="*")
app.add_middleware(
SessionMiddleware,
secret_key=settings.secret_key,
max_age=settings.session_max_age,
same_site="lax",
https_only=False,
)
app.mount("/static", StaticFiles(directory="static"), name="static")
app.include_router(pages.router)
app.include_router(admin.router)
app.include_router(guest.router)