Home » Home Assistant в Docker Compose: Сеть, Хранилище, Резервные копии

Home Assistant в Docker Compose: Сеть, Хранилище, Резервные копии

от virtualizationhowto
0 Комментарии 476 просмотров 7 мин на чтение
Если вы хотели начать работать с Home Assistant, это растущая экосистема, которая увлекательна и интересна. И если у вас уже есть домашняя лаборатория (как у большинства читателей здесь), у вас, скорее всего, уже есть инфраструктура для запуска контейнера Home Assistant в Docker. Используя Docker Compose, вы можете легко развернуть необходимые ресурсы HA. Однако здесь мы рассмотрим ключевые проектные решения, которые нужно принять. Они включают выбор сети, хранилища, резервного копирования, а также полный рабочий пример моего файла docker-compose.yml. Давайте начнём!

Почему Docker и Docker Compose для Home Assistant?

Контейнеризация Home Assistant, возможно, не была вариантом, о котором вы задумывались. В конце концов, можно легко купить готовые решения, такие как Home Assistant Green, Yellow или Blue, или даже использовать Raspberry Pi. Однако запуск в контейнере — отличный вариант, особенно если у вас уже есть Docker-хост или виртуальная среда (например, Proxmox), так как у вас уже есть необходимое оборудование.

Мобильное устройство, подключённое к Home Assistant
Мобильное устройство, подключённое к Home Assistant

Кроме того, у Docker Compose есть и другие преимущества. Код конфигурации можно хранить в Git и легко воссоздавать при необходимости. Также это помогает избежать проблем с зависимостями Python и другими сложностями на физическом хосте, который может использоваться для других задач.

Я уже использую Docker Compose для всех своих сервисов. Это также позволяет легко добавлять sidecar-контейнеры, такие как MQTT-брокеры или дашборды.

Проектные решения

При запуске Home Assistant в Docker с использованием Docker Compose необходимо принять несколько ключевых решений, особенно касающихся сети. Давайте сначала обсудим это.

Сеть

При развёртывании Home Assistant я должен был решить, как контейнер будет подключён к моей сети. Docker предлагает три основных режима:

  • Сеть host – Режим host предоставляет Home Assistant прямой доступ ко всем сетевым интерфейсам хоста. Это упрощает обнаружение устройств и интеграцию с такими протоколами, как mDNS или UPnP. Здесь вы жертвуете изоляцией ради лучшей обнаруживаемости устройств в Home Assistant.
  • Сеть bridge – Режим bridge по умолчанию изолирует контейнер за виртуальным интерфейсом. В этой конфигурации необходимо пробросить каждый порт, который нужен Home Assistant, например, 8123 для веб-интерфейса. Режим bridge обеспечивает изоляцию, но может усложнить интеграции, зависящие от широковещательного трафика. Это можно решить с помощью sidecar-контейнеров, перенаправляющих mDNS и т. д.
  • Сеть macvlan – Также можно использовать сеть macvlan в Docker. Macvlan создаёт виртуальный интерфейс, который делает контейнер физическим устройством в вашей сети. Home Assistant получает собственный IP в сегменте сети, поэтому, как и в режиме host, обнаружение работает «из коробки», а изоляция от хоста сохраняется. Недостаток в том, что некоторые хосты не могут взаимодействовать с macvlan-устройствами на том же физическом адаптере. Кроме того, эта конфигурация определённо добавляет сложности.

Хранилище

Home Assistant хранит конфигурацию YAML, базу данных SQLite (по умолчанию) и долгосрочную историю в постоянном хранилище Docker. Я предпочитаю следующие варианты:

  • Bind mounts – Привязка директорий хоста, например, /srv/homeassistant/config, даёт прямой доступ к файлам для редактирования на хосте. Это просто, а резервное копирование может быть таким же лёгким, как копирование папки (подробнее об этом позже). Недостаток — возможные сложности с правами и проблемы с производительностью, если монтирование происходит по сети.
  • Именованные тома (Named volumes) – Тома, управляемые Docker (например, /var/lib/docker/volumes/…), могут обеспечить немного лучшую производительность и автоматическую очистку. Однако доступ к данным требует взаимодействия через контейнер, например: docker run —rm -v volume:/data busybox.

На практике я чаще использую bind mounts. Они очень просты в настройке, и если ваше хранилище достаточно быстрое, проблем с производительностью не будет.

Резервные копии

Резервное копирование очень важно для данных постоянных томов. Прелесть контейнеров в том, что вы можете пересоздать контейнер Home Assistant, если у вас есть резервная копия данных. В своей лабораторной среде я использую комбинацию следующих инструментов:

  • Veeam Backup and Replication – Я использую агент для Linux для резервного копирования локальных файлов и образов виртуальных машин, на которых работает мой Docker-хост. Также есть бесплатная Community Edition.
  • Duplicati – Это самоуправляемое решение для резервного копирования томов, которое позволяет сохранять данные контейнеров в отдельном хранилище.

Как управлять устройствами Zigbee

С Home Assistant есть несколько способов организации связи с устройствами Zigbee. Можно позволить Home Assistant общаться напрямую с устройствами через USB-адаптер или использовать sidecar-контейнеры. Давайте разберём оба варианта.

Контейнер Home Assistant с USB-адаптером Zigbee

Первый вариант — подключить USB-адаптер Zigbee напрямую к контейнеру Home Assistant и использовать встроенную интеграцию ZHA. В этой конфигурации контейнер Home Assistant обращается напрямую к /dev/ttyACM0 (или другому устройству, соответствующему вашему адаптеру).

Вы можете приобрести адаптер по этой ссылке (партнёрская ссылка Amazon): https://geni.us/zigbeeusbdongle1

USB-адаптер Zigbee
USB-адаптер Zigbee

Сопряжение новых ламп, датчиков и выключателей происходит через страницу «Интеграции». Достаточно нажать «Настроить» в разделе ZHA и позволить системе обнаружить устройства. Обновления прошивки для многих популярных адаптеров можно применять прямо из этого интерфейса.

Выбор производителя
Выбор производителя
Выбор типа радио
Выбор типа радио

В этой конфигурации не нужны дополнительные контейнеры или брокеры, всё работает внутри процесса Home Assistant. Этот подход наиболее удобен, если вы планируете управлять устройствами Zigbee только через Home Assistant и не нуждаетесь в MQTT для других задач.

Home Assistant без USB-адаптера и sidecar-контейнеры

Если вы хотите изолировать трафик Zigbee или использовать его для нескольких сервисов, можно отказаться от прямого подключения USB и вместо этого запустить sidecar-контейнеры рядом с Home Assistant. Обычно это выглядит так:

Контейнер Zigbee2MQTT

Контейнер MQTT-брокера (Mosquitto)

Как работают sidecar-контейнеры? Zigbee2MQTT слушает USB-адаптер, преобразует сообщения устройств в JSON и публикует их в MQTT-брокер. Home Assistant получает эти сообщения через интеграцию MQTT.

Зачем нужна эта дополнительная сложность? Преимущество в поддержке большего количества устройств. Новые или нестандартные устройства Zigbee часто сначала появляются в Zigbee2MQTT. Кроме того, вы можете подключить Node-RED, пользовательские скрипты или дашборды напрямую к тем же MQTT-топикам. Вы жертвуете простотой ради гибкости и дополнительных возможностей.

Обзор sidecar-контейнеров Zigbee и MQTT
Обзор sidecar-контейнеров Zigbee и MQTT

Выбирайте прямое подключение USB, если вам важна простота. Используйте sidecar-контейнеры, если вам нужна максимальная гибкость и доступ к сети Zigbee из нескольких сервисов.

Создание файла Docker Compose

Ниже приведён аннотированный пример моего файла docker-compose.yml. Вы можете адаптировать теги образов, пути к томам и имена сетей под свою среду. В примере показаны:

  • MQTT-брокер (eclipse-mosquitto)
  • Zigbee2MQTT или deCONZ для устройств Zigbee
  • InfluxDB и Grafana для долгосрочного хранения метрик и дашбордов

Если вам не нужны sidecar-контейнеры и вы используете USB-адаптер, просто удалите их из конфигурации.

Добавление SSL-сертификатов

Вы можете легко добавить SSL-сертификаты в конфигурацию контейнера Home Assistant. Я рекомендую два решения:

Обновление без простоя

Для обновления Home Assistant я загружаю последний образ и перезапускаю контейнер с помощью команд Docker Compose:

Заключение

Надеюсь, эта статья о проектировании Home Assistant в Docker Compose поможет тем, кто хочет развернуть Home Assistant в своей сети. Это мощное решение, которое объединяет умные устройства в настраиваемой и безопасной среде. Использование Docker — мой предпочтительный способ запуска Home Assistant, так как у меня уже есть домашняя лаборатория с Docker. Понимая ключевые концепции (хранилище, сеть, резервное копирование), вы сможете создать надёжную систему. Напишите в комментариях, как у вас настроен Home Assistant. Используете ли вы контейнеры?

Источник на английском языке

Даже просто подбор, перевод и оформление статей требуют времени. А самостоятельный обзор устройств требует еще и финансовых вложений. Если Вы хотите больше обзоров, Вы можете помочь автору.

Вам может понравиться

Оставить комментарий