version: "3.9" services: sensing-server: build: context: .. dockerfile: docker/Dockerfile.rust image: ruvnet/wifi-densepose:latest ports: - "3000:3000" # REST API - "3001:3001" # WebSocket - "5005:5005/udp" # ESP32 UDP environment: - RUST_LOG=info # CSI_SOURCE controls the data source for the sensing server. # Options: auto (default) — probe for ESP32 UDP then fall back to simulation # esp32 — receive real CSI frames from an ESP32 on UDP port 5005 # wifi — use host Wi-Fi RSSI/scan data (Windows netsh) # simulated — generate synthetic CSI data (no hardware required) - CSI_SOURCE=${CSI_SOURCE:-auto} # command is passed as arguments to ENTRYPOINT (/bin/sh -c), so $CSI_SOURCE is expanded by the shell. command: ["/app/sensing-server --source ${CSI_SOURCE:-auto} --tick-ms 100 --ui-path /app/ui --http-port 3000 --ws-port 3001"] python-sensing: build: context: .. dockerfile: docker/Dockerfile.python image: ruvnet/wifi-densepose:python ports: - "8765:8765" # WebSocket - "8080:8080" # UI environment: - PYTHONUNBUFFERED=1