196 lines
6.5 KiB
YAML
196 lines
6.5 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
|
|
smappee-api:
|
|
build: ./smappee-api
|
|
env_file:
|
|
- .env.smappee
|
|
labels:
|
|
- traefik.http.routers.smappee.rule=Host(`smappee.pladijs`)
|
|
- traefik.http.services.smappee.loadbalancer.server.port=8080
|
|
restart: unless-stopped
|
|
energy-management:
|
|
build:
|
|
context: ./energy-management
|
|
labels:
|
|
- traefik.http.routers.energymanagement.rule=Host(`energymanagement.pladijs`)
|
|
- traefik.http.services.energymanagement.loadbalancer.server.port=3000
|
|
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
|
|
SOLAR_INFLUX_MEASUREMENT: power
|
|
SOLAR_INFLUX_DOMAIN: sensor
|
|
SOLAR_INFLUX_ENTITY_ID: sb4_0_1av_41_812_pv_power
|
|
SOLAR_INFLUX_FIELD: value
|
|
SOLAR_INFLUX_FIELD_UNIT: W
|
|
SOLAR_PRODUCTION_THRESHOLD_W: 400
|
|
|
|
volumes:
|
|
- energy-management-data:/app/data
|
|
- /run/dbus:/run/dbus:ro
|
|
cap_add:
|
|
- NET_ADMIN
|
|
- NET_RAW
|
|
restart: unless-stopped
|
|
|
|
volumes:
|
|
prometheus-data:
|
|
influxdb-data:
|
|
grafana-data:
|
|
homeassistant-data:
|
|
mosquitto-data:
|
|
traefik-data:
|
|
syncthing-data:
|
|
energy-management-data:
|