L'interface webapp ne peut plus rester silencieusement périmée

La webapp légère bâchait app.js/app.css dans l'image au build : après une
évolution de l'interface, le Pi servait l'ancienne carte sans aucun signal
(tuiles invisibles, vieux fichiers). Désormais l'interface embarque sa
version (hash CSS+JS) que le serveur de données publie via /api/tiles : en
cas de divergence, bandeau « interface périmée » dans la carte + log d'alerte
côté webapp. Les assets sont servis en revalidation (jamais immutable) et
une page ouverte depuis plus de 15 min se recharge seule au retour au premier
plan — l'ancienne interface n'est plus jamais affichée après un déploiement.
This commit is contained in:
Antoine Jacquin
2026-09-21 23:43:19 +02:00
parent 7c10ae3e18
commit 64eaad751c
5 changed files with 237 additions and 19 deletions

View File

@ -302,6 +302,22 @@ Avec `run.sh --serve-webapp`, l'image est reconstruite automatiquement à
chaque lancement ; il suffit de relancer la commande. Le cache de tuiles
(`output/`) n'est pas affecté par les mises à jour d'image.
### Interface de la carte : version embarquée
Les CSS/JS de l'interface sont **bâchés dans l'image** au build
(`Dockerfile.webapp`) : une évolution de l'interface (`lidar_pipeline/index.py`)
ne s'applique sur le Pi qu'après rebuild de l'image. Le décalage est détecté
automatiquement plutôt que de rester silencieux (tuiles invisibles) :
- l'interface embarque sa version (`ui_version` = hash CSS+JS source) et
compare à celle du serveur de données (`/api/tiles` → `ui_version`,
publiée dans `index_tiles.json` par le worker) : en cas de divergence,
un **bandeau rouge « Interface périmée »** s'affiche en haut de la carte ;
- la webapp consigne un avertissement une fois par paire de versions :
`Interface webapp périmée (webapp X, serveur Y) — reconstruire l'image`.
Réparation : `git pull` + rebuild de l'image (ci-dessus).
## Dépannage
- **État d'un rebuild** : `curl http://<ip-pi>:8973/api/sync` → `running`,
@ -324,6 +340,10 @@ chaque lancement ; il suffit de relancer la commande. Le cache de tuiles
`"running": false`, ou `./serve-webapp.sh status`) puis recharger la
page ; le bouton ↻ de la carte enchaîne sync + vignettes
automatiquement.
- **Bandeau « Interface périmée » en haut de la carte** (ou tuiles invisibles
sans explication) : l'image webapp est plus ancienne que l'interface du
worker (assets bâchés au build). Réparer : `git pull` +
`docker compose -f docker-compose.webapp.yml up -d --build` sur le Pi.
- **Port 8973 déjà pris** : `WEBAPP_PORT=9000 ./serve-webapp.sh` (ou la
variable dans `webapp.env`), `--serve-webapp 9000` avec `run.sh`, ou
changer le mapping `ports:` en compose (le conteneur écoute toujours sur