docker-ha/docker-compose.yaml

186 lines
4.2 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:2.0
restart: always
networks:
default:
web:
volumes:
- /etc/timezone:/etc/timezone
# - ./influx:/var/lib/influxdb
- ./influx2:/var/lib/influxdb2
# environment:
# Only needed if upgrading from influx 1
# DOCKER_INFLUXDB_INIT_MODE: upgrade
# Only needed for initial setup
# DOCKER_INFLUXDB_INIT_USERNAME: hass
# DOCKER_INFLUXDB_INIT_PASSWORD: hasspassword
# DOCKER_INFLUXDB_INIT_ORG: hass
# DOCKER_INFLUXDB_INIT_BUCKET: hass
labels:
traefik.enable: true
traefik.docker.network: web
traefik.http.routers.influx.rule: HOST(`influx.${HASS_ROOT}`)
traefik.http.routers.influx.middlewares: auth@file
traefik.http.routers.influx.tls.certResolver: le
# Devices
z2m:
image: koenkk/zigbee2mqtt:latest
restart: unless-stopped
networks:
web:
default:
devices:
- /dev/zzh:/dev/ttyUSB0
volumes:
- ./z2m:/app/data
- /etc/timezone:/etc/timezone
environment:
TZ: Europe/Stockholm
labels:
traefik.enable: true
traefik.docker.network: web
traefik.http.services.z2m.loadbalancer.server.port: 8080
traefik.http.routers.z2m.rule: HOST(`z2m.${HASS_ROOT}`)
traefik.http.routers.z2m.middlewares: auth@file
traefik.http.routers.z2m.tls.certResolver: le
# 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"]
labels:
autoheal: "true"