La carte à tuiles XYZ devient la seule interface : l'API de génération (preview, generate, status, stop, file, cell), le job unique + file persistante, la délégation LIDAR_GENERATION_URL et les garde-fous (token, LIDAR_REGEN_CIDR) passent de webapp.py à mapserve.py ; l'interface gagne les boutons + Zone / ⤒ Compléter / régénération à la dalle, les options de run et la progression cadre par cadre. mapserve sert aussi l'inventaire /api/tiles et les dalles en statique versionné : le worker image complète remplace la webapp sur le 8973 du générateur, le Pi n'exécute plus que lidar-maps. index.py se réduit aux registres partagés + vignettes/sous-tuiles/inventaire (l'UI HTML/JS et les mosaïques d'overview partent avec export.py et les compose/scripts de la webapp).
84 lines
3.0 KiB
YAML
84 lines
3.0 KiB
YAML
# Lancement du pipeline LiDAR — TOUJOURS via docker compose :
|
|
# docker compose up -d --build serve # TOUJOURS --build : le code est baké dans
|
|
# # l'image, sans --build l'ANCIEN code tourne
|
|
# # (carte + tuiles XYZ + API sur http://localhost:8973)
|
|
# docker compose logs -f serve # journal du serveur
|
|
# docker compose down # arrêt
|
|
# Traitement ponctuel (sans serveur) — --build pour la même raison :
|
|
# docker compose run --rm --build process [-r 0.2 | --force | --file ...]
|
|
# Jupyter (opt-in) :
|
|
# docker compose --profile interactive up -d jupyter
|
|
|
|
services:
|
|
# Carte + tuiles XYZ + API de génération (mode ./run.sh --serve)
|
|
serve:
|
|
build: .
|
|
image: lidar-lidar
|
|
container_name: lidar-serve
|
|
init: true
|
|
user: "1000:1000"
|
|
gpus: all
|
|
ports:
|
|
- "8973:8973"
|
|
volumes:
|
|
# input/ en écriture : l'API y télécharge les dalles IGN manquantes
|
|
- ./input:/data/input
|
|
- ./output:/data/output
|
|
environment:
|
|
- TZ=Europe/Paris
|
|
- LIDAR_INPUT_DIR=/data/input
|
|
- LIDAR_OUTPUT_DIR=/data/output
|
|
- LIDAR_PORT=8973
|
|
# Les générations lancées depuis la carte utilisent le GPU
|
|
- LIDAR_GPU=1
|
|
- LIDAR_WORKERS=10
|
|
# Machine de traitement pour une carte distante (Raspberry Pi) :
|
|
# décommenter et définir la même valeur en LIDAR_REMOTE_TOKEN là-bas
|
|
# (protège /api/generate, /api/preview, /api/stop).
|
|
# - LIDAR_API_TOKEN=change-moi
|
|
# Réseaux autorisés à lancer les générations depuis la carte (défaut :
|
|
# localhost + plages privées RFC1918 ; liste de CIDR séparés par
|
|
# virgules, vide = tout autoriser).
|
|
# - LIDAR_REGEN_CIDR=192.168.1.0/24
|
|
command: python3 -m uvicorn lidar_pipeline.mapserve:app --host 0.0.0.0 --port 8973
|
|
restart: unless-stopped
|
|
|
|
# Traitement ponctuel des dalles input/ (une passe puis arrêt)
|
|
process:
|
|
build: .
|
|
image: lidar-lidar
|
|
container_name: lidar-process
|
|
init: true
|
|
user: "1000:1000"
|
|
gpus: all
|
|
volumes:
|
|
- ./input:/data/input
|
|
- ./output:/data/output
|
|
environment:
|
|
- TZ=Europe/Paris
|
|
command: ["python3", "-m", "lidar_pipeline", "/data/input", "-o", "/data/output", "-r", "0.2", "-g", "all"]
|
|
profiles:
|
|
- process
|
|
|
|
# Exploration interactive (opt-in : --profile interactive)
|
|
jupyter:
|
|
build: .
|
|
image: lidar-lidar
|
|
container_name: lidar-jupyter
|
|
init: true
|
|
user: "1000:1000"
|
|
ports:
|
|
- "8888:8888"
|
|
volumes:
|
|
- ./input:/data/input:ro # exploration seule : pas d'écriture dans input/
|
|
- ./output:/data/output
|
|
- ./notebooks:/workspace
|
|
# Pas de token vide : Jupyter en génère un et l'affiche (URL de login)
|
|
# dans `docker compose logs jupyter` — le port 8888 reste protégé.
|
|
command: >
|
|
bash -c "pip install --user jupyter && \
|
|
python3 -m notebook --ip=0.0.0.0 --port=8888 --no-browser \
|
|
--notebook-dir=/workspace"
|
|
profiles:
|
|
- interactive
|