Files
lidar_rendu/Dockerfile.maps
2026-09-27 10:50:03 +02:00

51 lines
1.9 KiB
Docker

# Carte LiDAR à tuiles XYZ (image « lidar-maps ») — cf. docs/MAPS.md.
#
# Sert la pyramide de tuiles Web Mercator (schéma OpenStreetMap) rendue à la
# demande depuis les dalles du pipeline, plus l'interface de consultation.
# Aucun PDAL, aucun GDAL, aucun GPU : Pillow + pyproj suffisent (ARM64 inclus).
#
# docker compose -f docker-compose.maps.yml up -d --build
FROM python:3.12-slim
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Europe/Paris
# Pillow >= 11.3 : encodage/décodage AVIF natif (dalles et sous-tuiles du
# pipeline) ; pyproj : reprojection Lambert 93 → Web Mercator sans GDAL.
RUN pip3 install --no-cache-dir \
fastapi \
uvicorn \
"pillow>=11.3" \
pyproj
WORKDIR /app
# Seuls tiles.py, mapserve.py, mapui.py et index.py (registres de couches) sont
# importés ; les modules de traitement sont copiés mais jamais chargés.
COPY lidar_pipeline/ ./lidar_pipeline/
# CSS/JS de l'interface bâchés dans l'image : le code de la carte suit l'image,
# pas le cache de tuiles (régénéré à chaque build).
RUN python3 -c "import sys; sys.path.insert(0, '/app'); \
from lidar_pipeline.mapui import write_map_assets, ASSETS_DIRNAME; \
write_map_assets('/app/lidar_pipeline/' + ASSETS_DIRNAME)"
RUN groupadd -g 1000 lidar && \
useradd -u 1000 -g lidar -m -s /bin/bash lidar && \
mkdir -p /data/output && \
chown -R lidar:lidar /data
# Seuil mmap FIXE (1 Mo) : les grands tampons d'image (décodage des dalles,
# ~25 Mo) sont rendus au système dès leur libération. Avec le seuil
# dynamique de glibc, ils restaient dans le tas après la première libération
# et la mémoire du conteneur ne redescendait jamais (OOM sur le Pi).
ENV LIDAR_OUTPUT_DIR=/data/output \
LIDAR_PORT=8975 \
PYTHONPATH=/app \
MALLOC_MMAP_THRESHOLD_=1048576
USER lidar
EXPOSE 8975
CMD ["python3", "-m", "uvicorn", "lidar_pipeline.mapserve:app", "--host", "0.0.0.0", "--port", "8975"]