######################################## # EVOLV — Docker Compose Dev Stack ######################################## services: nodered: build: context: . dockerfile: Dockerfile container_name: evolv-nodered restart: unless-stopped ports: - "1880:1880" volumes: # Bind mount: host edits are instantly visible in container - .:/data/evolv:cached # Named volume: overlay node_modules so host doesn't need native deps - evolv_node_modules:/data/evolv/node_modules environment: - TZ=Europe/Amsterdam - LOCATION_ID=docker-dev - NODE_ENV=development - INFLUXDB_URL=http://influxdb:8086 - INFLUXDB_TOKEN=evolv-dev-token - INFLUXDB_ORG=evolv - INFLUXDB_BUCKET=telemetry depends_on: influxdb: condition: service_healthy healthcheck: test: ["CMD", "curl", "-sf", "http://localhost:1880/nodes"] interval: 15s timeout: 5s start_period: 30s retries: 3 # --------------------------------------------------------- # InfluxDB — time-series telemetry backend # --------------------------------------------------------- influxdb: image: influxdb:2.7 container_name: evolv-influxdb restart: unless-stopped ports: - "8086:8086" volumes: - influxdb_data:/var/lib/influxdb2 environment: - DOCKER_INFLUXDB_INIT_MODE=setup - DOCKER_INFLUXDB_INIT_USERNAME=evolv - DOCKER_INFLUXDB_INIT_PASSWORD=evolv-dev-pw - DOCKER_INFLUXDB_INIT_ORG=evolv - DOCKER_INFLUXDB_INIT_BUCKET=telemetry - DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=evolv-dev-token healthcheck: test: ["CMD", "curl", "-sf", "http://localhost:8086/health"] interval: 10s timeout: 5s start_period: 15s retries: 3 # --------------------------------------------------------- # Grafana — dashboard visualization # --------------------------------------------------------- grafana: image: grafana/grafana:latest container_name: evolv-grafana restart: unless-stopped ports: - "3000:3000" volumes: - grafana_data:/var/lib/grafana - ./docker/grafana/provisioning:/etc/grafana/provisioning environment: - GF_SECURITY_ADMIN_USER=admin - GF_SECURITY_ADMIN_PASSWORD=evolv - GF_AUTH_ANONYMOUS_ENABLED=true - GF_AUTH_ANONYMOUS_ORG_ROLE=Viewer depends_on: influxdb: condition: service_healthy volumes: evolv_node_modules: driver: local influxdb_data: driver: local grafana_data: driver: local