# 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 # rsync + client SSH : synchronisation des tuiles depuis la machine de # traitement (LIDAR_SYNC_CMD). La clé se monte dans /home/lidar/.ssh. RUN apt-get update && apt-get install -y --no-install-recommends \ rsync \ 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/ 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 ENV LIDAR_INPUT_DIR=/data/input \ LIDAR_OUTPUT_DIR=/data/output \ LIDAR_PORT=8973 USER lidar EXPOSE 8973 CMD ["python3", "-m", "uvicorn", "lidar_pipeline.webapp:app", "--host", "0.0.0.0", "--port", "8973"]