Files
homeAutomation/docker-compose.yml
2026-08-19 18:53:16 +02:00

179 lines
6.0 KiB
YAML

services:
mosquitto:
restart: unless-stopped
image: eclipse-mosquitto
ports:
- 1883:1883
volumes:
- ${REPO_DIR}/configurations/mosquitto/config:/mosquitto/config:rw
- mosquitto-data:/mosquitto
traefik:
restart: unless-stopped
image: traefik:v3.6.24
labels:
- traefik.http.routers.dashboard.rule=Host(`traefik.pladijs`)
- traefik.http.services.dashboard.loadbalancer.server.port=8080
volumes:
- ${REPO_DIR}/configurations/traefik/traefik.yml:/etc/traefik/traefik.yml:ro
- traefik-data:/var/lib/certificates
- /var/run/docker.sock:/var/run/docker.sock
extra_hosts:
- host.docker.internal:host-gateway
ports:
- 80:80
- 443:443
whoami:
restart: unless-stopped
image: traefik/whoami
labels:
- traefik.http.routers.whoami.rule=Host(`whoami.pladijs`)
- traefik.http.services.whoami.loadbalancer.server.port=2001
command:
- --port=2001
homeassistant:
build:
context: .
dockerfile: ./dockerfiles/home-assistant.Dockerfile
network_mode: host
labels:
- traefik.http.routers.homeassistant.rule=Host(`homeassistant.pladijs`)
- traefik.http.services.homeassistant.loadbalancer.server.url=http://host.docker.internal:8123
volumes:
- homeassistant-data:/config
- /run/dbus:/run/dbus:ro
cap_add:
- NET_ADMIN
- NET_RAW
restart: unless-stopped
env_file:
- environment-variables/local.env
- environment-variables/production.env
syncthing:
image: syncthing/syncthing
labels:
- traefik.http.routers.syncthing.rule=Host(`syncthing.pladijs`)
- traefik.http.services.syncthing.loadbalancer.server.port=8384
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/London
volumes:
- syncthing-data:/var/syncthing
node-exporter:
image: prom/node-exporter:latest
container_name: node-exporter
restart: unless-stopped
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- '--path.procfs=/host/proc'
- '--path.rootfs=/rootfs'
- '--path.sysfs=/host/sys'
- '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)'
labels:
- traefik.http.routers.node-exporter.rule=Host(`node-exporter.pladijs`)
- traefik.http.services.node-exporter.loadbalancer.server.port=9100
prometheus:
image: prom/prometheus:latest
container_name: prometheus
restart: unless-stopped
labels:
- traefik.http.routers.prometheus.rule=Host(`prometheus.pladijs`)
- traefik.http.services.prometheus.loadbalancer.server.port=9090
volumes:
- ${REPO_DIR}/configurations/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro
- prometheus-data:/prometheus:rw
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--web.console.libraries=/etc/prometheus/console_libraries'
- '--web.console.templates=/etc/prometheus/consoles'
- '--web.enable-lifecycle'
grafana:
restart: unless-stopped
image: grafana/grafana:latest
volumes:
- grafana-data:/var/lib/grafana
env_file:
- environment-variables/local.env
- environment-variables/production.env
labels:
- traefik.http.routers.grafana.rule=Host(`grafana.pladijs`)
- traefik.http.services.grafana.loadbalancer.server.port=3000
influxdb:
container_name: influxdb
labels:
- traefik.http.routers.influxdb.rule=Host(`influxdb.pladijs`)
- traefik.http.services.influxdb.loadbalancer.server.port=8086
image: influxdb
restart: unless-stopped
environment:
- TZ=Europe/Brussels
- DOCKER_INFLUXDB_INIT_MODE=setup
env_file:
- environment-variables/local.env
- environment-variables/production.env
volumes:
- ${STORAGE_DIR}/influxdb/data:/var/lib/influxdb2
- influxdb-data:/etc/influxdb2
ulimits:
nofile:
soft: 32768
hard: 32768
otel-collector:
container_name: otel-collector
image: otel/opentelemetry-collector-contrib:0.111.0
restart: unless-stopped
volumes:
- ${REPO_DIR}/configurations/otel/collector-config.yaml:/etc/otelcol-contrib/config.yaml
# Only enable if external services present
# ports:
# - 4317:4317 # OTLP gRPC receiver
energy-management:
build:
context: ./energy-management
labels:
- traefik.http.routers.energy-management.rule=Host(`energy-management.pladijs`)
- traefik.http.services.energy-management.loadbalancer.server.port=3000
env_file:
- .env
environment:
DB_PATH: /app/data/energy.db
# InfluxDB 2.x
INFLUX_URL: http://influxdb.pladijs
INFLUX_TOKEN: f9YTt1XmjUwtYuM1JXKyHaXU3D1NH3aRxf3jcP2cEyD0IfPmM-_Im35VpIAPct7oWKjk261rX5uzrQ4ue4tJFw==
INFLUX_ORG: homeassistant
INFLUX_BUCKET: homeassistant
# Measurement/field that holds live power draw for the whole house
INFLUX_FIELD: value
# Unit of INFLUX_FIELD as stored in Influx: W or kW
INFLUX_FIELD_UNIT: W
INFLUX_DOMAIN: sensor
INFLUX_ENTITY_ID: p1_meter_power
# Home Assistant
HA_URL: http://homeassistant.pladijs
HA_TOKEN: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiIxZjlhYzBjYjlkZDE0YWEzYWFhMzVjMzU2Y2VkM2U5MCIsImlhdCI6MTc4NzA4MjEyNywiZXhwIjoyMTAyNDQyMTI3fQ.W6MF78ZPiXF-__GmlFK2D-3vwYGEI3eEgouxw007D64
# Capacity tariff target: keep every 15-minute block's average under this many kW
TARGET_KW: 4
# Optional
PORT: 3000
CONTROL_LOOP_INTERVAL_MS: 10000
volumes:
- energy-management-data:/app/data
restart: unless-stopped
volumes:
prometheus-data:
influxdb-data:
grafana-data:
homeassistant-data:
mosquitto-data:
traefik-data:
syncthing-data:
energy-management-data: