Files
EVOLV/docker-compose.yml

96 lines
2.8 KiB
YAML
Raw Normal View History

########################################
# 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
# Persistent Node-RED user dir: flows/projects/sessions survive
# container recreation. Without this, `docker compose down && up`
# wipes the active flow and the entrypoint reseeds demo-flow.json.
- nodered_data:/data
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
nodered_data:
driver: local
influxdb_data:
driver: local
grafana_data:
driver: local