diff --git a/backend/main.py b/backend/main.py index 8b259f7..15136bb 100644 --- a/backend/main.py +++ b/backend/main.py @@ -279,9 +279,26 @@ app.mount("/icons", StaticFiles(directory=f"{STATIC_DIR}/icons"), name="icons") app.mount("/img", StaticFiles(directory=f"{STATIC_DIR}/img"), name="img") # User-generierte Medien (Fotos aus Tagebuch, Giftköder-Alarm, etc.) -MEDIA_DIR = os.getenv("MEDIA_DIR", "/data/media") +MEDIA_DIR = os.getenv("MEDIA_DIR", "/data/media") +PROD_MEDIA_DIR = os.getenv("PROD_MEDIA_DIR", "") # Staging-only: Fallback auf Prod-Media os.makedirs(MEDIA_DIR, exist_ok=True) -app.mount("/media", StaticFiles(directory=MEDIA_DIR), name="media") + +if PROD_MEDIA_DIR: + # Staging: erst eigenes media-Verzeichnis, dann Prod-Fallback + from pathlib import Path as _Path + from starlette.responses import FileResponse as _FileResponse + + @app.get("/media/{path:path}") + async def serve_media(path: str): + p = _Path(MEDIA_DIR) / path + if p.is_file(): + return _FileResponse(str(p)) + pp = _Path(PROD_MEDIA_DIR) / path + if pp.is_file(): + return _FileResponse(str(pp)) + raise HTTPException(404, "Media not found") +else: + app.mount("/media", StaticFiles(directory=MEDIA_DIR), name="media") @app.get("/robots.txt") async def robots(): diff --git a/docker-compose.staging.yml b/docker-compose.staging.yml index 3e14d48..610c0e2 100644 --- a/docker-compose.staging.yml +++ b/docker-compose.staging.yml @@ -7,12 +7,13 @@ services: - "3012:8000" volumes: - ./data:/data - - /volume1/docker/banyaro/data/media:/data/media:ro + - /volume1/docker/banyaro/data/media:/prod-media:ro env_file: - .env environment: - DB_PATH=/data/banyaro.db - MEDIA_DIR=/data/media + - PROD_MEDIA_DIR=/prod-media - STAGING=true - VAPID_PUBLIC_KEY=BMKbFAmpsqJ-eFef_4XJcYpuxPWqBNAoy9buMNnMSa6ijcPzltboHi_YccPKJrUD0isBez-vJIzAgjnLTWkzcC0 - VAPID_PRIVATE_KEY=8PWa9vvwMqtqsJEJGcwmiLhR0_Yl7duVX3wmWiKS878