Files
lidar_rendu/Dockerfile.webapp
Antoine Jacquin ac182da55e Sert l'interface (app.js/app.css) depuis l'image, plus depuis le volume
- 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.
2026-09-17 00:42:12 +02:00

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"]