Установка Home Assistant в Docker: гибкость без Supervisor
Инструкция по установке Home Assistant в Docker (Container). Гибкий способ для опытных пользователей: интеграция в существующую инфраструктуру, но без Supervisor и Add-ons.
Вступление
Home Assistant Container — это запуск Home Assistant в Docker. Фактически это «чистый» Home Assistant Core, упакованный в официальный контейнерный образ. Метод даёт гибкость, но в отличие от Home Assistant OS и Supervised — не содержит Supervisor и Add-ons.
Все варианты установки Home Assistant см. в обзорной статье.
Требования к оборудованию
- Linux-сервер с установленными Docker и docker-compose.
- Минимум: 2 CPU, 2 ГБ RAM, 20–32 ГБ диска.
Быстрый старт с SQLite
Создаём каталог homeassistant и переходим в него. Создаем файл docker-compose.yml с содержимым:
version: '3'
services:
homeassistant:
container_name: homeassistant
image: ghcr.io/home-assistant/home-assistant:stable
volumes:
- ./config:/config
ports:
- "8123:8123"
restart: always
После этого запустите docker compose:
docker-compose up -d
После старта откройте в браузере: http://127.0.0.1:8123. Первый запуск может занять несколько минут (загрузка образа и инициализация). По умолчанию данные будут сохраняться в SQLite внутри каталога config.
Вариант с MariaDB
Если хотите хранить историю и события в внешней БД (для производительности и масштабируемости), добавьте в docker-compose.yml сервис mariadb и свяжите его с Home Assistant. Пример:
version: "3.8"
services:
mariadb:
image: mariadb:10.11
container_name: mariadb
restart: always
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: homeassistant
MYSQL_USER: ha_user
MYSQL_PASSWORD: secret
volumes:
- ./db:/var/lib/mysql
homeassistant:
image: ghcr.io/home-assistant/home-assistant:stable
container_name: homeassistant
depends_on:
- mariadb
volumes:
- ./config:/config
ports:
- "8123:8123"
restart: always
После запускав каталоге config появятся файлы конфигурации, пропишите подключение к БД в config/configuration.yaml (раздел recorder):
recorder:
db_url: mysql://ha_user:secret@mariadb/homeassistant?charset=utf8mb4
Перезапустите контейнер:
docker-compose down && docker-compose up -d
После перезапуска контейнеров в логах Home Assistant могут кратковременно появляться ошибки recorder или database connection. Это нормально: контейнер MariaDB может запуститься чуть позже, чем Home Assistant, и первое подключение не всегда успешно. HA автоматически повторяет попытку и подключится к базе, когда она будет готова.
Вариант PostgreSQL
Аналогично можно использовать PostgreSQL:
version: "3.8"
services:
postgres:
image: postgres:16
container_name: postgres
restart: always
environment:
POSTGRES_DB: homeassistant
POSTGRES_USER: ha_user
POSTGRES_PASSWORD: secret
volumes:
- ./pgdata:/var/lib/postgresql/data
homeassistant:
image: ghcr.io/home-assistant/home-assistant:stable
container_name: homeassistant
depends_on:
- postgres
volumes:
- ./config:/config
ports:
- "8123:8123"
restart: always
В файле config/configuration.yaml укажите подключение к базе (раздел recorder):
recorder:
db_url: postgresql://ha_user:secret@postgres/homeassistant
Перезапустите контейнер:
docker-compose down && docker-compose up -d
После перезапуска контейнеров в логах Home Assistant могут кратковременно появляться ошибки recorder или database connection.
Это нормально: контейнер PostgreSQL может запуститься чуть позже, чем Home Assistant, и первое подключение не всегда успешно. HA автоматически повторяет попытку и подключится к базе, когда она будет готова.
Просмотр базы данных
Для удобного просмотра содержимого базы данных можно использовать Adminer. Это лёгкий web-интерфейс, который поддерживает разные СУБД: MySQL/MariaDB, PostgreSQL, SQLite. Чтобы добавить Adminer, расширьте ваш docker-compose.yml:
adminer:
image: adminer:latest
container_name: adminer
restart: unless-stopped
environment:
# set "postgres" if you use PostgreSQL
ADMINER_DEFAULT_SERVER: mariadb
ports:
- "8080:8080"
depends_on:
# or: - postgres
- mariadb
После запуска стек будет доступен по адресу: http://127.0.0.1:8080. Зайдите в Adminer и выберите нужный тип базы данных (MySQL или PostgreSQL), укажите:
- Server: имя сервиса из docker-compose.yml (mariadb или postgres),
- Username / Password: те, что заданы в docker-compose.yml,
- Database: homeassistant.
В результате вы сможете просматривать таблицы Home Assistant (events, states, statistics_runs и т. д.), проверять структуру и содержимое.
Заключение
Home Assistant Container подходит для пользователей, которые уже работают с Docker и хотят встроить Home Assistant в существующий сервер.
Это мощный, но менее «удобный» способ по сравнению с Home Assistant OS. Начните с SQLite, а при росте нагрузки переходите на MariaDB или PostgreSQL — это просто и даёт хороший запас по производительности.