Установка Home Assistant в Docker: гибкость без Supervisor

Инструкция по установке Home Assistant в Docker (Container). Гибкий способ для опытных пользователей: интеграция в существующую инфраструктуру, но без Supervisor и Add-ons.

Установка Home Assistant в Docker: гибкость без Supervisor

Вступление

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 — это просто и даёт хороший запас по производительности.