From 6dcfaffb7c1074829fed6335462d81b5d7b3f836 Mon Sep 17 00:00:00 2001 From: kianiadee Date: Sat, 23 May 2026 01:35:13 +0300 Subject: [PATCH] Gateway: serve web/ at root via StaticFiles; redirect / to /index-live.html --- Dockerfile | 3 ++- app/main.py | 13 ++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 46b3e89..0ba2caa 100644 --- a/Dockerfile +++ b/Dockerfile @@ -38,9 +38,10 @@ COPY --from=builder /opt/venv /opt/venv WORKDIR /srv/app COPY app/ ./app/ +COPY web/ /srv/web/ COPY scripts/entrypoint.sh /usr/local/bin/entrypoint.sh RUN chmod +x /usr/local/bin/entrypoint.sh \ - && chown -R app:app /srv/app + && chown -R app:app /srv/app /srv/web USER app diff --git a/app/main.py b/app/main.py index 448f138..6bcb433 100644 --- a/app/main.py +++ b/app/main.py @@ -1,8 +1,10 @@ from collections.abc import AsyncIterator from contextlib import asynccontextmanager +from pathlib import Path from fastapi import FastAPI, Request -from fastapi.responses import JSONResponse +from fastapi.responses import JSONResponse, RedirectResponse +from fastapi.staticfiles import StaticFiles from slowapi.errors import RateLimitExceeded from slowapi.middleware import SlowAPIMiddleware @@ -15,6 +17,8 @@ from app.routers.auth import router as auth_router from app.routers.push import router as push_router from app.routers.views import router as views_router +WEB_DIR = Path("/srv/web") + @asynccontextmanager async def lifespan(_: FastAPI) -> AsyncIterator[None]: @@ -49,4 +53,11 @@ def create_app(role: str) -> FastAPI: app.include_router(push_router) app.include_router(views_router) + @app.get("/", include_in_schema=False) + async def _root() -> RedirectResponse: + return RedirectResponse(url="/index-live.html", status_code=307) + + if WEB_DIR.is_dir(): + app.mount("/", StaticFiles(directory=str(WEB_DIR), html=True), name="web") + return app