# Simulation LOCALE du mode deux machines (cf. docs/DEPLOY_WEBAPP.md). # # Fait tourner sur une même machine les deux rôles normalement répartis sur # deux machines, dans des conteneurs/images indépendants : # - worker : machine de traitement (image complète, GPU) — API de # génération sur le port hôte 8974 ; # - webapp : interface légère (image Dockerfile.webapp, sans PDAL/GPU) — # carte sur le port hôte 8973, avec son PROPRE cache de tuiles # (./output-webapp) alimenté par rsync depuis ./output du # worker (monté en lecture seule dans la webapp), comme le # Raspberry Pi le fait par SSH vers la machine de traitement. # # Intérêt en local : mettre à jour le code de l'interface (rebuild webapp) # sans toucher au worker ni aux générations en cours, et réciproquement. # # docker compose -f docker-compose.local-2m.yml up -d --build # docker compose -f docker-compose.local-2m.yml logs -f webapp worker # docker compose -f docker-compose.local-2m.yml down # Retour au mode tout-en-un : docker compose up -d --build serve services: worker: build: . image: lidar-lidar container_name: lidar-worker init: true user: "1000:1000" gpus: all # retirer cette ligne sur une machine sans GPU ports: - "8974:8973" # API joignable en direct (debug) et par la webapp 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_GPU=1 - LIDAR_WORKERS=2 command: python3 -m uvicorn lidar_pipeline.webapp:app --host 0.0.0.0 --port 8973 restart: unless-stopped webapp: build: context: . dockerfile: Dockerfile.webapp image: lidar-webapp container_name: lidar-webapp init: true user: "1000:1000" ports: - "8973:8973" volumes: # Cache local propre à la webapp (équivalent du disque du Raspberry # Pi) — PAS le ./output du worker : la séparation rendu/interface # doit être réelle, les tuiles arrivent par le rsync ci-dessous. - ./output-webapp:/data/output # Sortie du worker, en lecture seule : source du rsync local qui # remplace le "rsync par SSH vers la machine de traitement". - ./output:/data/remote:ro environment: - TZ=Europe/Paris - LIDAR_OUTPUT_DIR=/data/output # Backend de génération = worker du même réseau compose (DNS docker) - LIDAR_GENERATION_URL=http://lidar-worker:8973 # Rapatriement des tuiles : mêmes exclusions que la prod (les # vignettes/sous-tuiles sont régénérées localement par /api/sync) - LIDAR_SYNC_CMD=rsync -a --delete --exclude=*.tif --exclude=.generation* --exclude=index_thumbs --exclude=index_subtiles /data/remote/ /data/output/ # Cache auto-entretenu : resynchronisation + vignettes toutes les # 2 min (plus réactif que la prod pour tester en local) - LIDAR_AUTO_SYNC_SECONDS=120 restart: unless-stopped