51 lines
1.9 KiB
Docker
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"]
|