docker-ha/docker-compose.yaml

179 lines
3.9 KiB
YAML

version: "3.5"
networks:
web:
external: true
iot:
external: true
lan:
external: true
volumes:
hass:
driver: local
driver_opts:
o: bind
type: none
device: /data/files/hass
video:
driver: local
driver_opts:
o: bind
type: none
device: /data/video
music:
driver: local
driver_opts:
o: bind
type: none
device: /data/music
services:
hass:
container_name: hass
build: ./hass
image: thomasloven/home-assistant
restart: always
networks:
default:
web:
iot:
lan:
volumes:
- hass:/config
- video:/media/video
- music:/media/music
- /etc/localtime:/etc/localtime:ro
environment:
WAITDB_HOST: db
WAITDB_USER: hass
WAITDB_PASS: hass
depends_on:
- db
labels:
traefik.enable: true
traefik.docker.network: web
traefik.http.routers.hass.rule: HOST(`${HASS_ROOT}`)
traefik.http.routers.hass.tls.certResolver: le
db:
image: mariadb:10.4.12
restart: always
volumes:
- ./db:/var/lib/mysql
- /etc/timezone:/etc/timezone
environment:
MYSQL_INITDB_SKIP_TZINFO: "true"
MYSQL_DATABASE: hass
MYSQL_USER: hass
MYSQL_PASSWORD: hass
MYSQL_ROOT_PASSWORD: hass
dbadmin:
image: phpmyadmin
networks:
default:
web:
environment:
PMA_ARBITRARY: 1
labels:
traefik.enable: true
traefik.docker.network: web
traefik.http.routers.dbadmin.rule: HOST(`db.${HASS_ROOT}`)
traefik.http.routers.dbadmin.middlewares: auth@file
traefik.http.routers.dbadmin.tls.certResolver: le
mqtt:
image: eclipse-mosquitto:1.6
restart: always
networks:
default:
iot:
ipv4_address: ${MQTT_IP}
volumes:
- ./mqtt/data:/mosquitto/data
- ./mqtt/log:/mosquitto/log
#- ./mqtt/config:/mosquitto/config
grafana:
image: grafana/grafana
restart: always
volumes:
- ./grafana:/var/lib/grafana
- /etc/timezone:/etc/timezone
networks:
web:
default:
user: "0"
labels:
traefik.enable: true
traefik.docker.network: web
traefik.http.routers.grafana.rule: HOST(`grafana.${HASS_ROOT}`)
traefik.http.routers.grafana.middlewares: auth@file
traefik.http.routers.grafana.tls.certResolver: le
influx:
image: influxdb:1.8
restart: always
volumes:
- ./influx:/var/lib/influxdb
- /etc/timezone:/etc/timezone
# Only needed during initial setup
# environment:
# INFLUXDB_DB: hass
# INFLUXDB_USER: hass
# INFLUXDB_USER_PASSWORD: hass
# Devices
deconz:
image: marthoc/deconz:amd64-2.05.77
restart: always
devices:
- /dev/conbee:/dev/ttyUSB0
volumes:
- ./deconz:/root/.local/share/dresden-elektronik/deCONZ
- ./deconz-otau:/root/otau
- /etc/timezone:/etc/timezone
networks:
web:
default:
environment:
DECONZ_VNC_MODE: 1
DECONZ_VNC_PASSWORD: secret
DEBUG_OTAU: 1
DECONZ_WEB_PORT: 8081
ports:
- 8081:8081
labels:
traefik.enable: true
traefik.docker.network: web
traefik.http.services.deconz.loadbalancer.server.port: 8081
traefik.http.routers.deconz.rule: HOST(`deconz.${HASS_ROOT}`)
traefik.http.routers.deconz.middlewares: auth@file
traefik.http.routers.deconz.tls.certResolver: le
healthcheck:
test: curl http://localhost:5900 || exit 1
# mysensors:
# rflink:
plejd:
image: thomasloven/plejd2mqtt
restart: always
environment:
PLEJD_SITE:
PLEJD_USERNAME:
PLEJD_PASSWORD:
MQTT_BROKER: mqtt://mqtt
volumes:
- /var/run/dbus:/var/run/dbus
mobile:
image: pajikos/sms-gammu-gateway
restart: always
devices:
- /dev/gsmmodem:/dev/mobile
healthcheck:
test: ["CMD", "wget", "-O", "-", "localhost:5000/signal"]