Установка Home Assistant Supervised на Debian: Supervisor и Add-ons без HAOS

Инструкция по установке Home Assistant Supervised на Debian. Настройка Supervisor и Add-ons, особенности и ограничения метода, который будет поддерживаться только до конца 2025 года.

Установка Home Assistant Supervised на Debian: Supervisor и Add-ons без HAOS

Вступление

Метод Home Assistant Supervised позволяет развернуть Home Assistant вместе с Supervisor и Add-ons, но поверх стандартной ОС (в нашем случае — Debian 12). Это удобно, если хочется использовать привычный Linux, но при этом иметь все возможности HAOS.

Все варианты установки Home Assistant рассмотрены в обзорной статье. В этой статье мы разбираем установку без HAOS: получим виртуальную машину с Debian, установим Docker (чтобы запускать контейнеры Home Assistant и Supervisor), поставим OS Agent (для связи Supervisor с ОС) и установим Supervised. В конце подключимся к веб‑интерфейсу Home Assistant.

Создание виртуальной машины

В этом примере используется Яндекс Облако (Yandex Cloud) — все команды и настройки далее будут рассчитаны именно на него.

Виртуальную машину можно создать двумя способами — через веб-консоль (GUI) или через yc CLI. Использование yc актуально только если вы планируете управлять инфраструктурой через консоль. В остальных случаях достаточно GUI.

Создание SSH ключа

SSH-ключ нужен для подключения к виртуальной машине. Если у вас он уже есть (например, ~/.ssh/id_ed25519.pub), можете использовать существующий. Если нет — создайте новый командой:

ssh-keygen -t ed25519 -C "yc"

После создания публичный ключ будет в ~/.ssh/id_ed25519.pub. RSA ключ тоже подойдет.

Установка и настройка yc (CLI)

Этот шаг нужен только если вы планируете управлять инфраструктурой через консоль. Если работаете через веб-интерфейс Yandex Cloud, этот раздел можно пропустить.

Установка yc:

curl -sSL https://storage.yandexcloud.net/yandexcloud-yc/install.sh | bash

После установки добавьте yc в PATH. Проверить корректность можно командой:

yc --version

Инициализация профиля и авторизация:

yc init
yc config list

Вариант 1: через yc CLI

Подставьте свою зону и путь к ключу; логин укажем "debian"

yc compute instance create   --name ha-supervised-debian   --zone ru-central1-a   --platform standard-v3   --cores 2   --memory 4G   --create-boot-disk image-folder-id=standard-images,image-family=debian-12,size=20   --network-interface subnet-name=default,nat-ip-version=ipv4   --ssh-key "debian:$(cat ~/.ssh/id_ed25519.pub)"

После создания попробуйте подключиться по SSH, чтобы убедиться, что всё работает

Вариант 2: через GUI

  1. Перейдите в консоль Yandex Cloud → Compute Cloud → Создать ВМ
  2. Образ: Debian 12 (Bookworm)
  3. Ресурсы: 2 vCPU, 4 ГБ RAM, диск 20+ ГБ
  4. Сеть: включите публичный IPv4 (NAT)
  5. SSH: добавьте содержимое вашего публичного ключа (~/.ssh/id_ed25519.pub) и укажите имя пользователя, с которым будете подключаться
  6. Создайте ВМ и дождитесь появления публичного IP
  7. Проверьте результат: подключитесь по SSH

Подготовка системы

Обновите систему и установите необходимые пакеты:

sudo apt update
sudo apt upgrade -y
sudo apt install -y apparmor bluez cifs-utils curl dbus jq lsb-release network-manager nfs-common systemd-journal-remote systemd-resolved udisks2 wget

Эти пакеты обеспечивают работу AppArmor, NetworkManager, системных сервисов и интеграций, которые использует Supervisor. Подробно о вариантах настройки сети в Debian 12 см. Приложение: "Настройка сети в Debian 12".

После установки может пропасть доступ в Интернет. Это связано с тем, что systemd-resolved не знает о вашей текущей настройке DNS, а сеть управляется через ifupdown (файл /etc/network/interfaces). Чтобы полностью перейти на управление сетью через NetworkManager, выполните:

sudo systemctl restart systemd-resolved.service && \
sudo systemctl disable --now networking.service && \
sudo mv /etc/network/interfaces /etc/network/interfaces.disabled && \
sudo systemctl restart NetworkManager

В некоторых случаях может потребоваться перезапуск машины. После этого восстановление сети можно проверить командой:

ping google.com

Включите сервисы:

sudo systemctl enable --now systemd-timesyncd systemd-resolved NetworkManager apparmor

Установка Docker

Supervisor и Home Assistant в режиме Supervised работают в контейнерах. Docker — это среда исполнения контейнеров, которая оркестрирует сервисы Supervisor, Home Assistant и вспомогательные компоненты (DNS, аудио, multicast и т. п.). Без Docker метод Supervised невозможен.

Установка Docker:

curl -fsSL https://get.docker.com | sh
sudo systemctl enable --now docker
docker ps

При желании добавьте текущего пользователя в группу docker, чтобы не писать sudo (требует повторного входа в систему:

sudo usermod -aG docker $USER

Установка OS Agent

OS Agent — это компонент, который обеспечивает связь Supervisor с операционной системой через D-Bus: доступ к информации о хосте, времени, сети, обновлениям и интеграциям на уровне ОС. С ним корректно работают панели Supervisor и часть функций Add-ons.

Установка (пример для версии 1.7.2):

wget https://github.com/home-assistant/os-agent/releases/download/1.7.2/os-agent_1.7.2_linux_x86_64.deb
sudo dpkg -i os-agent_1.7.2_linux_x86_64.deb

Проверка (в выводе должна быть строка с Version, например: "1.7.2"):

busctl introspect --system io.hass.os /io/hass/os

Можно ли пропустить установку OS Agent? Технически установка supervised‑installer возможна и без него, но часть возможностей Supervisor будет недоступна, пока вы не установите OS Agent. Если установите позже, Supervisor подхватит его автоматически после перезапуска.

Установка supervised-installer

Пакет supervised-installer готовит систему и разворачивает сам Supervisor, подтягивает нужные контейнеры Home Assistant и настраивает директории/службы. Именно он превращает вашу систему в полноценный Home Assistant Supervised.

Установка (пример для версии 3.1.0):

wget https://github.com/home-assistant/supervised-installer/releases/download/3.1.0/homeassistant-supervised.deb
sudo dpkg -i homeassistant-supervised.deb || sudo apt -f install -y

Проверьте, что контейнеры запустились:

docker ps

Обычно вы увидите сервисы:

  • homeassistant
  • hassio_supervisor
  • hassio_dns
  • hassio_audio
  • hassio_multicast
  • hassio_cli

Откройте веб‑интерфейс:

http://<PUBLIC_IP>:8123

Первый запуск может занять 5–10 минут: в это время Docker скачивает образы и инициализирует систему.

Первоначальная настройка Home Assistant

После установки HAOS вы получите полностью рабочую систему, но для удобства и расширения функциональности стоит добавить несколько полезных инструментов:

  • Настройте резервное копирование — чтобы при необходимости можно было быстро восстановить систему
  • Добавьте SSH & Web Terminal — для доступа к консоли
  • Установите File Editor — для редактирования конфигурации через веб-интерфейс
  • Установите Glances — мониторинг ресурсов системы
  • Добавьте Ping — проверка доступности устройств в сети
  • Установите HACS — расширяемое хранилище интеграций и тем

Заключение

Теперь у вас работает Home Assistant с Supervisor и Add-ons поверх Debian. Если вы делаете установку «в долгую», рекомендуем также присмотреться к Home Assistant OS: это официальный метод, который проще поддерживать.

Приложение: Настройка сети в Debian 12

Для сетевого стека в Debian 12 доступны как NetworkManager, так и systemd-networkd (а также устаревший ifupdown). Если при установке было выбрано десктоп-окружение, то сеть по умолчанию поднимается через NetworkManager. Если система устанавливалась без окружения рабочего стола, то чаще предлагается использовать systemd-networkd, но администратор может выбрать NetworkManager вручную. В Yandex Cloud используется установка без рабочего стола, поэтому для работы Home Assistant Supervised нужно перевести сеть на NetworkManager.

Когда выбрать systemd-networkd

  • Для серверов и встраиваемых систем, где сеть настраивается статически
  • Когда нужны мосты, бондинг, VLAN и другая расширенная конфигурация
  • Для случаев, когда важны минимальные зависимости и «лёгкость» системы
  • Управление: файлы /etc/systemd/network/*.network, утилита networkctl

Когда выбрать NetworkManager

  • Для настольных систем и ноутбуков, где сеть часто меняется
  • Когда требуется Wi-Fi или VPN из коробки
  • Если нужен удобный интерфейс (CLI nmcli или графический апплет)
  • Управление: конфиги в /etc/NetworkManager/, команды nmcli, nmtui

Как определить, что используется

Проверить активные сервисы:

systemctl is-active NetworkManager
systemctl is-active systemd-networkd

Попробовать:

nmcli device status

Если интерфейсы видны, значит сеть ведёт NetworkManager

Пример Ansible playbook

Скрипт ниже переводит хост под управление NetworkManager. Если система уже управляется NetworkManager, изменений не будет. Во время переключения выполняется остановка сервиса ifupdown (systemctl disable --now networking.service), что может оборвать SSH. Чтобы корректно пережить возможный разрыв, переключение запускается в отцеплённом режиме через systemd-run: отдельный transient‑юнит завершит все шаги (включая перенос /etc/network/interfaces и перезапуск NetworkManager) даже при кратковременном обрыве связи. По завершении выполняется проверка доступности сети — блок ожидания (Wait for internet connectivity) отправляет ping; при необходимости адрес 1.1.1.1 можно заменить на ваш проверочный хост.

---

- name: Setup NetworkManager on server
  hosts: haos_servers
  become: true
  become_user: root
  gather_facts: true
  tasks:
    - name: Update package cache
      ansible.builtin.apt:
        update_cache: true
    - name: Upgrade all packages
      ansible.builtin.apt:
        upgrade: true
    - name: Install NetworkManager components
      ansible.builtin.apt:
        name:
          - network-manager
          - systemd-resolved
        state: present
    - name: Ensure services start on boot
      ansible.builtin.systemd:
        name: "{{ item }}"
        enabled: true
        state: started
      loop:
        - systemd-resolved
        - NetworkManager
    - name: Switch to NetworkManager (detached, survives SSH drop)
      ansible.builtin.shell: |
        UNIT="nm-switch-$(date +%s)"
        systemd-run --unit "$UNIT" --collect /bin/bash -lc '
          set -euo pipefail
          systemctl restart systemd-resolved
          systemctl disable --now networking.service || true
          if [ -f /etc/network/interfaces ]; then
            mv /etc/network/interfaces /etc/network/interfaces.disabled
          fi
          systemctl restart NetworkManager
        '
      changed_when: true
    - name: Wait for internet connectivity
      ansible.builtin.command: ping -c 1 -W 5 1.1.1.1
      register: ping_test
      changed_when: false
      retries: 12
      delay: 5
      until: ping_test.rc == 0

Запуск:

ansible-playbook -v --diff --inventory inventory/production playbooks/setup_network_manager.yml