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