first commit
This commit is contained in:
+49
@@ -0,0 +1,49 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user