Home Assistant в Docker запускается одним файлом docker-compose.yml: образ ghcr.io/home-assistant/home-assistant:stable, сетевой режим host и том для конфигурации. Это вариант Container: он удобен, если у вас уже есть сервер или NAS с Docker, но в нём нет магазина add-on’ов и встроенных резервных копий Supervisor. Ниже — установка, обновление, бэкапы и подводные камни.
1Когда выбирать Docker, а когда HAOS
Docker-вариант (Container) подходит, если вы привыкли управлять сервисами через compose и хотите держать Home Assistant рядом с другими контейнерами. Недостаток один, но существенный: add-on’ы недоступны. Mosquitto, Zigbee2MQTT, ESPHome и Node-RED придётся запускать отдельными контейнерами и подключать вручную.
| Возможность | Docker (Container) | HAOS |
|---|---|---|
| Add-on’ы и магазин | Нет | Есть |
| Резервные копии из интерфейса | Нет (копируете папку config) | Есть |
| Обновление ОС и ядра | Самостоятельно | Из интерфейса |
| Гибкость и совместное размещение сервисов | Высокая | Ограниченная |
| HACS | Устанавливается вручную | Устанавливается через add-on или скрипт |
2Подготовка сервера
- Установите Docker Engine и плагин Docker Compose на Linux-сервер (Debian или Ubuntu) по официальной инструкции.
- Создайте каталог проекта, например
/opt/homeassistant, и подкаталогconfig. - Убедитесь, что порт 8123 свободен.
- Если используете USB-стик Zigbee или Z-Wave, определите его постоянное имя в
/dev/serial/by-id/.
3docker-compose для Home Assistant
Минимальный рабочий файл выглядит так. Режим network_mode: host обязателен для автообнаружения устройств по mDNS и SSDP, поэтому не заменяйте его пробросом портов.
services:
homeassistant:
container_name: homeassistant
image: ghcr.io/home-assistant/home-assistant:stable
volumes:
- /opt/homeassistant/config:/config
- /etc/localtime:/etc/localtime:ro
- /run/dbus:/run/dbus:ro
restart: unless-stopped
privileged: true
network_mode: host
environment:
- TZ=Europe/Moscow
Запустите: docker compose up -d. Через минуту откройте http://IP-сервера:8123 и пройдите первичную настройку. Если нужен доступ к Zigbee-стику, добавьте в сервис раздел devices с нужным путём, например /dev/serial/by-id/usb-...:/dev/ttyUSB0. Для Bluetooth потребуется смонтировать D-Bus, как в примере.
Вместе с Home Assistant обычно поднимают брокер MQTT. Пример добавления Mosquitto в тот же файл:
mosquitto:
image: eclipse-mosquitto:2
container_name: mosquitto
restart: unless-stopped
ports:
- "1883:1883"
volumes:
- /opt/mosquitto/config:/mosquitto/config
- /opt/mosquitto/data:/mosquitto/data
Для Mosquitto 2 нужно создать файл mosquitto.conf с настройками слушателя и пользователей, иначе анонимные подключения будут отклонены.
Нет времени разбираться? Мы можем настроить Home Assistant под ключ на вашем сервере вместе с MQTT и Zigbee.
4Как обновлять Home Assistant в Docker
Обновление выполняется сменой образа. Перед ним обязательно сохраните копию каталога конфигурации. Порядок действий такой.
- Остановите контейнер:
docker compose stop homeassistant. - Сделайте архив каталога
config, напримерtar czf ha-config-$(date +%F).tar.gz config. - Выполните
docker compose pullи затемdocker compose up -d. - Проверьте журнал:
docker logs -f homeassistant, а затем раздел «Исправления» в интерфейсе.
Не используйте тег latest бездумно. Для стабильности фиксируйте конкретную версию, например 2026.10.2, и обновляйтесь осознанно, прочитав список изменений.
5Резервные копии без Supervisor
В Container нет кнопки «создать бэкап» для всей системы, поэтому резервной копией является каталог config. В нём лежат конфигурация, база данных, пользователи и файлы интеграций. Настройте регулярное копирование этого каталога скриптом cron на другой диск или на NAS. Если нужен снимок в рабочем состоянии, для базы SQLite лучше кратковременно остановить контейнер, чтобы файл не был повреждён.
| Что копировать | Где лежит |
|---|---|
| Конфигурация YAML | config/*.yaml |
| База истории | config/home-assistant_v2.db |
| Настройки интеграций и пользователи | config/.storage/ |
| Пользовательские компоненты (HACS) | config/custom_components/ |
6Типичные проблемы
- Устройства не обнаруживаются. Проверьте
network_mode: hostи что сервер находится в той же подсети, что и устройства. - Нет доступа к Zigbee-стику. Добавьте раздел
devicesи права на устройство; пользуйтесь путями by-id, они не меняются после перезагрузки. - Права на файлы. Если каталог создан под другим пользователем, контейнер не сможет писать. Проверьте владельца.
- Нет HACS. Его придётся установить вручную скриптом в каталог
custom_components.
7Zigbee2MQTT рядом в том же compose
Типичная связка для Docker-установки — Home Assistant, Mosquitto и Zigbee2MQTT. Контейнер Zigbee2MQTT получает доступ к USB-координатору и подключается к брокеру по внутренним адресам. Ниже пример сервиса; путь к стику замените на свой из каталога /dev/serial/by-id/.
zigbee2mqtt:
image: koenkk/zigbee2mqtt:latest
container_name: zigbee2mqtt
restart: unless-stopped
ports:
- "8080:8080"
volumes:
- /opt/zigbee2mqtt/data:/app/data
- /run/udev:/run/udev:ro
devices:
- /dev/serial/by-id/usb-координатор:/dev/ttyACM0
environment:
- TZ=Europe/Moscow
В файле configuration.yaml Zigbee2MQTT укажите адрес брокера и порт стика, затем в Home Assistant добавьте интеграцию MQTT. Устройства появятся автоматически благодаря MQTT Discovery. Подробности настройки смотрите в нашей статье про Zigbee2MQTT.
8Мониторинг, автозапуск и ограничения ресурсов
Параметр restart: unless-stopped гарантирует, что контейнер поднимется после перезагрузки сервера. Чтобы заметить проблему до того, как перестанут работать автоматизации, полезно следить за состоянием контейнеров. Утилиты вроде Portainer или Dozzle показывают журналы и состояние в браузере, а их потребление ресурсов минимально.
Если на одном сервере живёт много сервисов, ограничьте аппетиты каждого. В compose можно задать лимиты памяти, чтобы одна ошибка не остановила весь сервер. Для базы истории стоит заранее настроить интеграцию Recorder: уменьшите срок хранения (параметр purge_keep_days) и исключите шумные сущности, например датчики с частыми обновлениями. Так база останется небольшой, а резервные копии — быстрыми.
9Безопасность контейнера
Режим host и привилегии дают контейнеру широкие права, поэтому уделите внимание защите. Обновляйте образ регулярно, не публикуйте порт 8123 напрямую, используйте сложные пароли и включите двухфакторную аутентификацию для учётных записей. Для внешнего доступа удобнее VPN на роутере (в России часто используют WireGuard или функции Keenetic) либо обратный прокси с сертификатом. Хранить секреты — токены, пароли — лучше в файле secrets.yaml и не выкладывать конфигурацию в публичные репозитории.
10Проверка после запуска
Когда контейнер поднялся, убедитесь, что всё в порядке. Откройте журнал командой docker logs homeassistant и проверьте, что в нём нет повторяющихся ошибок о недоступных устройствах или правах на файлы. Перезагрузите сервер целиком и убедитесь, что контейнеры стартуют сами и интерфейс открывается без вашего вмешательства. Проверьте, что часовой пояс контейнера совпадает с вашим: от этого зависят автоматизации по времени и восходу солнца.
Наконец, потренируйтесь восстанавливаться. Скопируйте каталог конфигурации в тестовую папку и поднимите второй экземпляр на другом порту: если он запускается с вашими настройками, резервная копия рабочая. Без такой проверки копия остаётся лишь предположением.
Если нужна более сложная логика, например включение света по присутствию или уведомления при протечке, не обязательно сразу писать YAML руками: можно заказать автоматизацию на заказ и получить готовый проверенный сценарий, который затем легко поддерживать самостоятельно.
Ещё один совет: храните файл compose под контролем версий (например, в приватном репозитории git), но без секретов. Тогда любую перестройку сервера можно выполнить за минуты.
11Частые вопросы
Можно ли использовать Docker на Windows?
Технически да, через Docker Desktop, но режим host там работает иначе, и автообнаружение устройств часто ломается. Для Windows надёжнее виртуальная машина с HAOS.
Можно ли перейти с Docker на HAOS?
Да. Конфигурация YAML и интеграции переносятся, но add-on’ы придётся поставить заново, а некоторые пути изменятся.
Нужен ли privileged?
Для доступа к USB, Bluetooth и некоторым интеграциям он удобен. Если они не нужны, можно ограничиться явным списком устройств в разделе devices и отказаться от привилегированного режима.
Как добавить HTTPS?
Проще поставить перед Home Assistant обратный прокси (Caddy, Nginx, Traefik) и указать его в http: use_x_forwarded_for и trusted_proxies. Напрямую открывать порт 8123 в интернет не стоит.
12Итог
Docker — хороший выбор, когда у вас уже есть контейнерная инфраструктура и вы готовы вручную управлять MQTT, Zigbee и бэкапами. Для остальных проще HAOS. После запуска автоматизации можно собрать в конструкторе автоматизаций.



