Установка Home Assistant Core: максимум контроля, минимум удобства

Инструкция по установке Home Assistant Core напрямую через Python. Минимальный и гибкий вариант для разработчиков, без Supervisor и Add-ons.

Установка Home Assistant Core: максимум контроля, минимум удобства

Вступление

Home Assistant Core — это «чистое ядро» системы, написанное на Python. Оно запускается напрямую в операционной системе без Docker и без Supervisor. Такой метод установки даёт полный контроль: вы видите каждый шаг, понимаете, как устроена система, и можете максимально её кастомизировать. Но есть и обратная сторона: нет Supervisor и Add-ons, обновления и резервные копии делаются вручную. Этот вариант подойдёт разработчикам и энтузиастам Linux.

Все варианты установки Home Assistant рассмотрены в обзорной статье. В этой статье разбираем установку Core.

Требования к оборудованию

  • Ubuntu 22.04 или новее
  • Python 3.11 или новее
  • 2 CPU, 2–4 ГБ RAM, 20+ ГБ диска

Установка зависимостей

Сначала поставим необходимые пакеты для сборки Python-зависимостей и работы Home Assistant:

sudo apt update
sudo apt upgrade -y
sudo apt install -y python3 python3-venv python3-pip libffi-dev libssl-dev autoconf build-essential libopenjp2-7 libtiff6 libturbojpeg0-dev     tzdata zlib1g-dev libjpeg-dev liblapack3 liblapack-dev

Создание пользователя для Home Assistant

Лучше выделить отдельного пользователя — это повышает безопасность:

sudo useradd -rm homeassistant
sudo passwd homeassistant
sudo mkdir -p /srv/homeassistant
sudo chown homeassistant:homeassistant /srv/homeassistant

Создание виртуального окружения

Home Assistant устанавливается в виртуальное окружение Python, чтобы не мешать системным пакетам:

sudo -u homeassistant -s
cd /srv/homeassistant
python3 -m venv .
source bin/activate

Установка Home Assistant Core

Теперь установим Home Assistant напрямую через pip:

pip install --upgrade pip wheel
pip install homeassistant

Запуск осуществляется командой: hass. После первого запуска интерфейс будет доступен на: http://<IP_сервера>:8123. При первом входе откроется мастер начальной настройки — он предложит создать учётную запись администратора, указать название дома, регион и другие параметры.

Автозапуск через systemd

Чтобы Home Assistant запускался автоматически после перезагрузки, создаём сервис home-assistant от имени root:

sudo tee /etc/systemd/system/home-assistant.service >/dev/null <<'EOF'
[Unit]
Description=Home Assistant Core
After=network.target

[Service]
Type=simple
User=homeassistant
ExecStart=/srv/homeassistant/bin/hass -c "/home/homeassistant/.homeassistant"
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

Активируем и запускаем:

sudo systemctl daemon-reload
sudo systemctl enable home-assistant
sudo systemctl start home-assistant
sudo systemctl status home-assistant --no-pager

Выпуск SSL-сертификата Let’s Encrypt

Чтобы открыть Home Assistant из Интернета по HTTPS, нужен сертификат. Самый простой способ — использовать Let’s Encrypt. Let’s Encrypt поддерживает два основных способа подтверждения домена (валидации):
web — проверка через временный файл на вашем сервере, доступный по HTTP; dns — проверка через добавление специальной TXT-записи в DNS-зону домена. В этой статье мы используем вариант web, так как он проще и подходит для большинства случаев с публичным сервером.

Если вы используете фаервол (например, UFW), убедитесь, что порты 80 и 443 открыты. Установим Certbot и Apache:

sudo apt install -y certbot apache2
sudo a2enmod rewrite
sudo systemctl restart apache2

Создадим каталог для ACME-проверки:

sudo mkdir -p /var/www/html/.well-known/acme-challenge

Теперь создадим конфигурацию виртуального хоста для получения временного файла в процессе валидации домена. Файл /etc/apache2/sites-available/homeassistant.conf:

<VirtualHost *:80>
    ServerName hass.iot7m.ru
    ServerAdmin admin@iot7m.ru
    ServerSignature EMail

    DocumentRoot "/var/www/html"

    RewriteEngine on
    # ACME http-01 challenge
    RewriteCond %{REQUEST_URI} ^/\.well-known/acme-challenge(.*)$
    RewriteRule ^/.well-known/acme-challenge(.*)$ /var/www/html/.well-known/acme-challenge/$1 [QSA,L]

    # Redirect to HTTPS
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://hass.iot7m.ru$1 [R=301,L]
</VirtualHost>

Активируем сайт и перезапускаем Apache:

sudo a2ensite homeassistant.conf
sudo systemctl reload apache2

Во всех приведённых ниже примерах используется домен hass.iot7m.ru — замените его на свой. Выпустим сертификат для вашего домена:

sudo certbot certonly --webroot -w /var/www/html -d hass.iot7m.ru --agree-tos -m admin@iot7m.ru --non-interactive

Проверим, что сертификаты появились:

sudo ls -l /etc/letsencrypt/live/hass.iot7m.ru/

Пример успешного вывода при получении сертификатов:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Requesting a certificate for hass.iot7m.ru

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/hass.iot7m.ru/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/hass.iot7m.ru/privkey.pem

Конфигурация виртуального хоста Apache

Теперь настроим Apache как обратный прокси: он примет запросы по HTTPS и передаст их в Home Assistant.

Укажем Home Assistant доверять прокси. Конфигурация находится в домашней директории в папке .homeassistant. В configuration.yaml добавьте:

http:
  use_x_forwarded_for: true
  trusted_proxies:
    - 127.0.0.1

Перезапустите сервис:

sudo systemctl restart home-assistant

Установим Apache и нужные модули:

sudo a2enmod ssl headers proxy proxy_http proxy_wstunnel rewrite deflate
sudo systemctl restart apache2

Создадим конфигурацию виртуального хоста. По сравнению с предыдущей добавлены настройки виртуального хоста на порту 443. Файл /etc/apache2/sites-available/homeassistant.conf:

<VirtualHost *:80>
    ServerName hass.iot7m.ru
    ServerAdmin admin@iot7m.ru
    ServerSignature EMail

    DocumentRoot "/var/www/html"

    RewriteEngine on
    # ACME http-01 challenge
    RewriteCond %{REQUEST_URI} ^/\.well-known/acme-challenge(.*)$
    RewriteRule ^/.well-known/acme-challenge(.*)$ /var/www/html/.well-known/acme-challenge/$1 [QSA,L]

    # Redirect to HTTPS
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://hass.iot7m.ru$1 [R=301,L]
</VirtualHost>

<VirtualHost *:443>
    ServerName hass.iot7m.ru
    ServerAdmin admin@iot7m.ru
    ServerSignature EMail

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/hass.iot7m.ru/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/hass.iot7m.ru/privkey.pem

    DocumentRoot "/var/www/html"

    ProxyAddHeaders on
    ProxyPreserveHost on
    RequestHeader set X-Forwarded-SSL expr=%{HTTPS}
    RequestHeader set X-Forwarded-Proto expr=%{REQUEST_SCHEME}

    # WebSocket for Home Assistant
    ProxyPass /api/websocket ws://127.0.0.1:8123/api/websocket
    ProxyPassReverse /api/websocket ws://127.0.0.1:8123/api/websocket

    # App traffic
    ProxyPass / http://127.0.0.1:8123/
    ProxyPassReverse / http://127.0.0.1:8123/
</VirtualHost>

Перезапускаем Apache:

sudo systemctl reload apache2

Теперь Home Assistant доступен по адресу: https://hass.iot7m.ru.

Обновления Home Assistant Core

Обновления выполняются вручную. Переходим в виртуальное окружение и обновляем:

source /srv/homeassistant/bin/activate
pip install --upgrade homeassistant
sudo systemctl restart home-assistant

Заключение

Home Assistant Core — отличный выбор, если вам нужен полный контроль. Мы настроили установку, сделали автозапуск через systemd и спрятали интерфейс за Apache с HTTPS.

Такой вариант идеально подойдёт энтузиастам и разработчикам, которые хотят полного контроля над системой. Если же важнее удобство и «всё из коробки» — лучше выбрать Home Assistant OS.