homeassistant/templates/compose.yml.j2
2026-10-12 23:44:19 +02:00

153 lines
4.7 KiB
Django/Jinja

version: '3'
services:
homeassistant:
image: homeassistant/home-assistant:{{ homeassistant.version }}
volumes:
# We do not yes manage configs with ansible
- ./config/homeassistant:/config
- /etc/localtime:/etc/localtime:ro
restart: unless-stopped
environment:
TZ: Europe/Berlin
network_mode: "host"
# networks:
# local_network:
# ipv4_address: ${SUBNET}.2
depends_on:
- zigbee2mqtt
- mariadb
- mosquitto
extra_hosts:
- "zwave:${SUBNET}.3"
- "zigbee2mqtt:${SUBNET}.6"
- "mariadb:${SUBNET}.4"
- "mosquitto:${SUBNET}.5"
# ports:
# - 8123:8123
# - 1400:1400
# - 1401:1401
{% if homeassistant.mqtt.zigbee2mqtt.zigbee_adapter_id %}
zigbee2mqtt:
# 8080
image: ghcr.io/koenkk/zigbee2mqtt:{{ homeassistant.mqtt.zigbee2mqtt.version }}
restart: unless-stopped
volumes:
- ./data/zigbee2mqtt:/app/data
- /run/udev:/run/udev:ro
environment:
- TZ=Europe/Berlin
networks:
local_network:
ipv4_address: ${SUBNET}.6
exposed:
devices:
# Make sure this matched your adapter location
- /dev/serial/by-id/{{ homeassistant.mqtt.zigbee2mqtt.zigbee_adapter_id }}:/dev/ttyUSB0
labels:
traefik.enable: true
traefik.http.routers.homeassistant-mqtt.entrypoints: https
traefik.http.routers.homeassistant-mqtt.rule: Host(`{{ homeassistant.mqtt.zigbee2mqtt.domain }}`)
traefik.http.services.homeassistant-mqtt.loadbalancer.server.port: 8080
traefik.http.routers.homeassistant-mqtt.tls: "true"
traefik.http.routers.homeassistant-mqtt.tls.certresolver: hetzner
traefik.http.routers.homeassistant-mqtt.middlewares: local-only@file
{% endif %}
{% if homeassistant.matter.matter_adapter_id %}
matter:
image: ghcr.io/matter-js/matterjs-server:stable
volumes:
- ./data/matter:/data
networks:
local_network:
ipv4_address: ${SUBNET}.7
exposed:
labels:
traefik.enable: true
traefik.http.routers.homeassistant-matter.entrypoints: https
traefik.http.routers.homeassistant-matter.rule: Host(`{{ homeassistant.matter.domain }}`)
traefik.http.services.homeassistant-matter.loadbalancer.server.port: 5580
traefik.http.routers.homeassistant-matter.tls: "true"
traefik.http.routers.homeassistant-matter.tls.certresolver: hetzner
traefik.http.routers.homeassistant-matter.middlewares: local-only@file
openthread:
image: openthread/border-router:latest
networks:
local_network:
ipv4_address: ${SUBNET}.8
exposed:
environment:
- TZ=Europe/Berlin
- OT_RCP_DEVICE=/dev/ttyUSB0
- OT_LOG_LEVEL=7
- OT_THREAD_IF=wpan0
- OT_INFRA_IF=br0
- OT_REST_LISTEN_ADDR=0.0.0.0
- OT_REST_LISTEN_PORT=9212
volumes:
- ./data/openthread:/data
devices:
# Make sure this matched your adapter location
- /dev/serial/by-id/{{ homeassistant.matter.matter_adapter_id }}:/dev/ttyUSB0
- /dev/net/tun:/dev/net/tun
cap_add:
- NET_ADMIN
labels:
traefik.enable: true
traefik.http.routers.homeassistant-openthread.entrypoints: https
traefik.http.routers.homeassistant-openthread.rule: Host(`{{ homeassistant.matter.openthread_domain }}`)
traefik.http.services.homeassistant-openthread.loadbalancer.server.port: 9212
traefik.http.routers.homeassistant-openthread.tls: "true"
traefik.http.routers.homeassistant-openthread.tls.certresolver: hetzner
traefik.http.routers.homeassistant-openthread.middlewares: local-only@file
restart: always
{% endif %}
mosquitto:
image: eclipse-mosquitto:{{ homeassistant.mqtt.mosquitto.version }}
restart: unless-stopped
user: "1883:1883"
volumes:
- ./config/mosquitto:/mosquitto/config:ro
- ./data/mosquitto:/mosquitto/data
- ./data/mosquitto/log:/mosquitto/log
environment:
- TZ=Europe/Berlin
networks:
local_network:
ipv4_address: ${SUBNET}.5
mariadb:
image: mariadb:10.11.2
volumes:
- ./data/mariadb:/var/lib/mysql
- ./config/mariadb:/etc/mysql/conf.d
- /etc/localtime:/etc/localtime:ro
restart: unless-stopped
environment:
MARIADB_ROOT_PASSWORD: {{ homeassistant.mariadb.password }}
MARIADB_MYSQL_LOCALHOST_USER: "yes"
MARIADB_MYSQL_LOCALHOST_GRANTS: "yes"
MARIADB_AUTO_UPGRADE: "yes"
MARIADB_DISABLE_UPGRADE_BACKUP: "yes"
TZ: Europe/Berlin
networks:
local_network:
ipv4_address: ${SUBNET}.4
networks:
local_network:
ipam:
driver: default
config:
- subnet: ${SUBNET}.0/24
exposed:
name: traefik_exposed
external: true