fix(traefik): sostituisci stripprefix con replacepathregex per evitare doppio root_path
Bug: la dashboard NiceGUI mostrava "Your browser does not support ES modules" perche' le asset URL nell'HTML erano doppio-prefissate: /strategy_crypto_gui/strategy_crypto_gui/_nicegui/... Root cause: il middleware traefik.stripprefix aggiunge automaticamente X-Forwarded-Prefix header. uvicorn/Starlette legge il header e setta root_path automaticamente, raddoppiando con quello passato esplicitamente a ui.run(root_path="/strategy_crypto_gui"). Fix: traefik.replacepathregex strippa il prefix senza propagare il header. uvicorn vede solo il root_path da ui.run -> asset prefissati una sola volta. - replacepathregex.regex=^/strategy_crypto_gui(/.*|$) - replacepathregex.replacement=$1 Verifica end-to-end: - page: HTTP 200, asset prefix singolo - /strategy_crypto_gui/_nicegui/3.12.0/static/socket.io.min.js: 200 - / (root): 404 (atteso) NB: dopo cambio label, necessario `docker restart traefik-traefik-1` per forzare refresh discovery (problema noto Traefik con label durante recreate container nello stesso ciclo). Annotare per future modifiche middleware. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
+12
-7
@@ -36,7 +36,11 @@ x-swarm-env: &swarm-env
|
||||
# DB separati per dominio:
|
||||
GA_DB_PATH: /app/state/runs.db
|
||||
STRATEGY_CRYPTO_DB_PATH: /app/state/strategy_crypto.db
|
||||
# Subpath sotto cui la dashboard NiceGUI e' esposta da Traefik
|
||||
# Subpath sotto cui la dashboard NiceGUI e' esposta da Traefik.
|
||||
# IMPORTANT: NON usare StripPrefix middleware con questo. NiceGUI/Starlette
|
||||
# gestisce internamente il root_path su request path che ARRIVANO con prefix.
|
||||
# StripPrefix causa doppio prefix negli asset URL (NiceGUI prefixa + uvicorn
|
||||
# rilegge X-Forwarded-Prefix e prefixa di nuovo).
|
||||
DASHBOARD_ROOT_PATH: /strategy_crypto_gui
|
||||
|
||||
services:
|
||||
@@ -109,10 +113,11 @@ services:
|
||||
- traefik.http.routers.strategy-crypto-gui.entrypoints=websecure
|
||||
- traefik.http.routers.strategy-crypto-gui.tls.certresolver=mytlschallenge
|
||||
- "traefik.http.services.strategy-crypto-gui.loadbalancer.server.port=${SWARM_DASHBOARD_PORT:-8080}"
|
||||
# StripPrefix: rimuove /strategy_crypto_gui prima di girare al container.
|
||||
# NiceGUI ha root_path=/strategy_crypto_gui per generare link assoluti corretti
|
||||
# (lato browser), ma le route FastAPI interne restano "/", "/paper", ecc. —
|
||||
# quindi il prefix esterno DEVE essere stripped dal proxy.
|
||||
- "traefik.http.middlewares.strategy-crypto-stripprefix.stripprefix.prefixes=/strategy_crypto_gui"
|
||||
- "traefik.http.routers.strategy-crypto-gui.middlewares=strategy-crypto-stripprefix"
|
||||
# replacepathregex (NON stripprefix): strippa il prefix dalla request senza
|
||||
# aggiungere X-Forwarded-Prefix header. uvicorn vede solo root_path da
|
||||
# ui.run(root_path=...), quindi gli asset URL vengono prefissati una sola
|
||||
# volta (no doppio prefix come succederebbe con stripprefix).
|
||||
- "traefik.http.middlewares.strategy-crypto-replace.replacepathregex.regex=^/strategy_crypto_gui(/.*|$$)"
|
||||
- "traefik.http.middlewares.strategy-crypto-replace.replacepathregex.replacement=$$1"
|
||||
- "traefik.http.routers.strategy-crypto-gui.middlewares=strategy-crypto-replace"
|
||||
- com.centurylinklabs.watchtower.enable=true
|
||||
|
||||
Reference in New Issue
Block a user