Fix: Staging-Media — PROD_MEDIA_DIR Fallback statt überlappende Docker-Volumes
This commit is contained in:
parent
00109a0929
commit
5a412c425c
2 changed files with 21 additions and 3 deletions
|
|
@ -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")
|
app.mount("/img", StaticFiles(directory=f"{STATIC_DIR}/img"), name="img")
|
||||||
|
|
||||||
# User-generierte Medien (Fotos aus Tagebuch, Giftköder-Alarm, etc.)
|
# 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)
|
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")
|
@app.get("/robots.txt")
|
||||||
async def robots():
|
async def robots():
|
||||||
|
|
|
||||||
|
|
@ -7,12 +7,13 @@ services:
|
||||||
- "3012:8000"
|
- "3012:8000"
|
||||||
volumes:
|
volumes:
|
||||||
- ./data:/data
|
- ./data:/data
|
||||||
- /volume1/docker/banyaro/data/media:/data/media:ro
|
- /volume1/docker/banyaro/data/media:/prod-media:ro
|
||||||
env_file:
|
env_file:
|
||||||
- .env
|
- .env
|
||||||
environment:
|
environment:
|
||||||
- DB_PATH=/data/banyaro.db
|
- DB_PATH=/data/banyaro.db
|
||||||
- MEDIA_DIR=/data/media
|
- MEDIA_DIR=/data/media
|
||||||
|
- PROD_MEDIA_DIR=/prod-media
|
||||||
- STAGING=true
|
- STAGING=true
|
||||||
- VAPID_PUBLIC_KEY=BMKbFAmpsqJ-eFef_4XJcYpuxPWqBNAoy9buMNnMSa6ijcPzltboHi_YccPKJrUD0isBez-vJIzAgjnLTWkzcC0
|
- VAPID_PUBLIC_KEY=BMKbFAmpsqJ-eFef_4XJcYpuxPWqBNAoy9buMNnMSa6ijcPzltboHi_YccPKJrUD0isBez-vJIzAgjnLTWkzcC0
|
||||||
- VAPID_PRIVATE_KEY=8PWa9vvwMqtqsJEJGcwmiLhR0_Yl7duVX3wmWiKS878
|
- VAPID_PRIVATE_KEY=8PWa9vvwMqtqsJEJGcwmiLhR0_Yl7duVX3wmWiKS878
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue