- Les assets de l'interface étaient écrits dans le volume (output/assets) et servis d'ici : sur la webapp légère, un app.js périmé restait servi même après rebuild de l'image. - app.js/app.css (+ Leaflet vendorisé) sont désormais bâchés dans l'image au build (Dockerfile.webapp) et servis depuis l'image ; le volume ne porte que les données (index.html, vignettes, tuiles). - _write_ui_assets() génère les assets dans un dossier cible ; repli de régénération au démarrage si non bâchés (dev). build_index continue d'écrire output/assets/ pour le mode serveur statique.
59 lines
2.2 KiB
JSON
59 lines
2.2 KiB
JSON
# Webapp légère (carte interactive + vignettes) — Raspberry Pi / ARM64.
|
|
#
|
|
# Sert la carte, régénère index/vignettes/sous-tuiles localement et délègue
|
|
# la génération de tuiles (PDAL/GPU) à la machine de traitement via
|
|
# LIDAR_GENERATION_URL — cf. docs/DEPLOY_WEBAPP.md.
|
|
#
|
|
# Build sur la machine cible (multi-plateforme natif) :
|
|
# docker build -f Dockerfile.webapp -t lidar-webapp .
|
|
FROM python:3.12-slim
|
|
|
|
ENV DEBIAN_FRONTEND=noninteractive
|
|
ENV TZ=Europe/Paris
|
|
|
|
# Client SSH : inspection/accès à la machine de traitement si besoin. La
|
|
# clé se monte dans /home/lidar/.ssh. Les tuiles étant servies à la demande
|
|
# (plus de rsync dans l'image), seul le client SSH est conservé.
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
openssh-client \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
WORKDIR /app
|
|
|
|
# Dépendances de la seule interface : FastAPI/uvicorn (serveur), Pillow
|
|
# (vignettes + sous-tuiles AVIF — natif depuis la 11.3, wheels ARM64
|
|
# incluses), pyproj (géoréférencement léger, sans GDAL).
|
|
RUN pip3 install --no-cache-dir \
|
|
fastapi \
|
|
uvicorn \
|
|
"pillow>=11.3" \
|
|
pyproj
|
|
|
|
# Code : webapp.py + index.py seulement utilisés — les modules de traitement
|
|
# (dtm, visualizations...) sont copiés mais jamais importés par la webapp.
|
|
COPY lidar_pipeline/ ./lidar_pipeline/
|
|
COPY webapp-entrypoint.sh /webapp-entrypoint.sh
|
|
|
|
# CSS/JS de l'interface (app.js/app.css + Leaflet) bâchés dans l'image : la
|
|
# webapp les sert depuis /app/lidar_pipeline/webapp_assets, plus depuis le
|
|
# volume — le code de l'interface suit l'image, régénéré à chaque build.
|
|
RUN python3 -c "import sys; sys.path.insert(0, '/app'); from lidar_pipeline.index import _write_ui_assets; _write_ui_assets('/app/lidar_pipeline/webapp_assets')"
|
|
|
|
RUN groupadd -g 1000 lidar && \
|
|
useradd -u 1000 -g lidar -m -s /bin/bash lidar && \
|
|
mkdir -p /data/output /data/input && \
|
|
chown -R lidar:lidar /data && \
|
|
chmod +x /webapp-entrypoint.sh
|
|
|
|
ENV LIDAR_INPUT_DIR=/data/input \
|
|
LIDAR_OUTPUT_DIR=/data/output \
|
|
LIDAR_PORT=8973
|
|
|
|
USER lidar
|
|
|
|
EXPOSE 8973
|
|
|
|
# Sert en HTTP, ou en HTTPS si LIDAR_SSL_CERTFILE + LIDAR_SSL_KEYFILE sont
|
|
# définis (requis pour la géolocalisation GPS depuis un téléphone).
|
|
CMD ["/webapp-entrypoint.sh"]
|