По умолчанию Home Assistant записывает и хранит историю в базе данных SQLite (/config/home-assistant_v2.db) в течение 10 дней, фиксируя изменения. каждые 5 секунд и автоматически очищать каждую ночь, чтобы размер файла не увеличивался бесконечно.

Эти настройки нормальны, когда вы только начинаете работать с высокой доступностью, но когда вы начинаете углубляться и добавлять кучу устройств, интеграций и дополнений, то по ряду причин требуется настройка записанного.

Некоторые данные вы хотите хранить бесконечно. Вы хотите вернуться к нему через год и исследовать. Другие данные вам не нужно записывать вообще. Кого волнует, какая загрузка ЦП вашего Pi была 3 месяца назад?

Преимущества и недостатки самостоятельного хостинга MariaDB

Отделение базы данных от Home Assistant и ее самостоятельное размещение в VE имеет несколько возможных преимуществ и недостатков, о которых вам необходимо знать. Если вы думаете о каких-либо других, кроме перечисленных, не стесняйтесь делиться ими в комментариях.

Преимущества:

  • Значительно уменьшен размер резервных копий в Home Assistant
  • Если вы используете какую-либо стратегию облачного резервного копирования (Google Диск, One Drive и т. д.), разделение базы данных значительно уменьшит размер файла, поскольку он не будет включен в резервную копию.
  • Если вы используете надстройку MariaDB с Home Assistant, база данных по умолчанию включается в резервную копию.
  • Стратегия создания отдельных резервных копий и моментальных снимков для MariaDB LXC
  • Вы можете создать отдельную стратегию резервного копирования или моментального снимка в Proxmox для контейнера MariaDB LXC. Это дает вам больше гибкости для сохранения и перемещения по вашей базе данных.
  • Независим от Home Assistant
  • Если вы записываете важные данные с помощью Home Assistant, на базу данных не будут влиять обновления Home Assistant, критические изменения и другие сбои.
  • Устранение неполадок
  • Выявление потенциальных проблем упрощается, когда база данных отделена от Home Assistant.
  • Вы можете использовать такие инструменты, как Администратор, для просмотра базы данных.

Недостатки

  • Техническое обслуживание и обновления вручную
  • Каждый контейнер и виртуальную машину теперь необходимо обновлять вручную и отдельно. Существуют инструменты для автоматизации процесса (Webmin), однако вам все равно нужно знать о критических изменениях, как и в HA.
  • Сбой MariaDB LXC
  • Если база данных выйдет из строя, Home Assistant выдаст кучу ошибок, которые вам нужно будет диагностировать.
  • MariaDB LXC не запускалась до Home Assistant
  • Если база данных недоступна при запуске Home Assistant, вы получите ошибки регистратора, истории и журнала. Чтобы обойти эту проблему, мы можем установить приоритет порядка загрузки и задержку запуска.

Установка MariaDB LXC на Proxmox

Для целей этого руководства я собираюсь развернуть MariaDB в качестве контейнера LXC в Proxmox, используя вспомогательный скрипт tteck. Это самый простой способ установки MariaDB на Proxmox и последующей настройки экземпляра.

  • Откройте веб-интерфейс Proxmox.
  • Выберите свой узел в меню слева и нажмите Shell в среднем столбце.
  • Вставьте следующую команду и нажмите Enter:
#Install Script for MariaDB LXC on Proxmox
bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/mariadb.sh)"

Вы получите запрос подтверждения, говорящий вам, что «Это установит новый MariaDB LXC». Нажмите Enter, чтобы продолжить. Программа установки снова предложит вам выбрать параметры установки:

Если вы выберете По умолчанию, MariaDB LXC будет установлена ​​со следующими настройками: 1 ГБ ОЗУ — 4 ГБ для хранения — 1 виртуальный ЦП. Если вы выберете Advanced, у вас будет возможность настроить следующие параметры:

Настройки по умолчанию подходят для стандартного контейнера базы данных MariaDB, поэтому я предлагаю оставить их как есть. Если вам нужно что-то подправить, не стесняйтесь делать это. В зависимости от ваших потребностей вы можете увеличить размер выделенного диска для LXC.

В процессе установки скрипт предложит вам установить Adminer, полнофункциональное средство управления базой данных. Если вы хотите просмотреть базу данных, вы можете ввести Y и получить доступ к администратору позже по адресу IP_Address/adminer/.

После завершения процесса установки в оболочке появится сообщение Завершено успешно!, и вы сможете продолжить настройку MariaDB и Home Assistant.

Настройка контейнера MariaDB LXC

Прежде чем вы сможете подключить Home Assistant к MariaDB, необходимо изменить определенные настройки. Для начала необходимо включить прослушивание удаленных подключений, которое по умолчанию отключено. Кроме того, необходимо создать пользователя с соответствующими разрешениями, которого мы будем использовать в Home Assistant для доступа к MariaDB. И, наконец, мы можем создать специальную базу данных для Home Assistant.

Включение удаленных подключений

Чтобы включить удаленные подключения к MariaDB, нам нужно отредактировать файл .cnf по умолчанию. В Proxmox выберите контейнер MariaDB в левом меню, нажмите Консоль в средней колонке и выполните следующую команду:

#Edit MariaDB LXC defaults file
nano /etc/mysql/my.cnf

Это приведет вас к текстовому редактору nano с открытым файлом my.cnf.
Раскомментируйте строку port=3036 (удалите #), как на изображении ниже:

Сохраните файл, нажав CTRL+O, после чего появится запрос на подтверждение. Нажмите Ввод, и появится сообщение «Написано XX строк». Выйдите из редактора, нажав CTRL+X. Вернувшись в консоль, выполните вторую команду, которая откроет другой файл .cnf:

#Edit MariaDB LXC server file
nano /etc/mysql/mariadb.conf.d/50-server.cnf

В этом файле закомментируйте строку bind-address = 127.0.0.1, чтобы она была удалена из файла cnf. Это должно выглядеть как на изображении ниже:

Сохраните файл, снова нажав CTRL+O, подтвердив с помощью Enter и выйдя с помощью CTRL+X.

Защита базы данных MariaDB

Следующим шагом в подготовке контейнера MariaDB LXC для Home Assistant является блокировка удаленного входа в систему root, удаление тестовой таблицы и удаление неиспользуемых пользователей базы данных. Мы можем сделать это с помощью встроенного скрипта безопасности MariaDB, выполнив его в консоли с помощью следующей команды:

#Run MariaDB Security Script
mariadb-secure-installation
YAML

Скрипт задаст вам пару вопросов, на которые вам нужно будет ответить Y/N. Он также даст вам объяснение того, что делает каждая настройка, и порекомендует, что вы должны ответить. Защитите MariaDB, ответив на такие вопросы:

  • Введите текущий пароль для root (введите, если нет): введите
  • Переключиться на аутентификацию unix_socket [Y/n]: y
  • Изменить пароль root? [Да/нет] нет
  • Удалить анонимных пользователей? [Да/нет] да
  • Запретить удаленный вход в систему root? [Да/нет] да
  • Удалить тестовую базу данных и доступ к ней? [Да/нет] да
  • Обновить таблицы привилегий сейчас? [Да/нет] да

Вы получите подтверждение «Ваша установка MariaDB теперь должна быть защищена!».

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

Следующим шагом является создание пользователя специально для Home Assistant, который будет иметь все привилегии пользователя root, но с аутентификацией по паролю. В консоли MariaDB выполните следующую команду:

#Create a new user
/usr/bin/mariadb

Подсказка в консоли изменится на MariaDB [(none)]›
Создайте нового локального администратора с нужными именем пользователя и паролем с помощью следующей команды:

#Change username and password
CREATE USER 'smarthomescene'@'localhost' IDENTIFIED BY 'password';

Предоставьте права root локальному администратору с помощью следующей команды:

#Change username and password
GRANT ALL ON *.* TO 'smarthomescene'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

Выполните следующую команду, чтобы предоставить привилегии root вашему имени пользователя, который может подключаться из вашей локальной сети в пределах заданной подсети. В моем случае это 192.168.0.XXX для всей подсети. Вместо этого вы можете ввести свой адрес HA, чтобы разрешить доступ ТОЛЬКО к HA:

#Change username, password and subnet mask
GRANT ALL ON *.* TO 'smarthomescene'@'192.168.0.%' IDENTIFIED BY 'password' WITH GRANT OPTION;

Сбросьте привилегии, чтобы убедиться, что они применяются для текущего сеанса, с помощью следующей команды:

FLUSH PRIVILEGES;

Наконец, выйдите из консоли MariaDB, набрав exit. Ваше окно должно выглядеть примерно так, если вы все сделали правильно:

Создание базы данных

Последним шагом перед подключением Home Assistant к MariaDB является вход в систему и создание фактической базы данных. В Консоли MariaDB выполните следующую команду, заменив мое имя пользователя на ваше:

/usr/bin/mariadb -u smarthomescene -p

Введите свой пароль и нажмите Enter. Приглашение изменится на MariaDB [(none)]›, вставьте следующую команду, чтобы создать базу данных:

#Change to whatever name you want
CREATE DATABASE homeassistant;

Наконец, перезапустите контейнер LXC, выбрав Reboot в раскрывающемся меню в правом верхнем углу. После восстановления вы можете проверить состояние базы данных с помощью следующей команды, в которой должно быть написано активно (работает):

#Check MariaDB Status
systemctl status mariadb

Если вы все сделали правильно, вы готовы настроить Home Assistant и передать данные в новую базу данных.

Подключение Home Assistant к MariaDB

Последним шагом для подключения вашего экземпляра Home Assistant к вашей новой базе данных является фактическое подключение двух. Не смущайтесь, вам не нужно устанавливать надстройку MariaDB в Home Assistant. Откройте файл HA configuration.yaml с помощью редактора файлов или кода Visual Studio и добавьте следующее:

#Basic database configuration
recorder:
  db_url: mysql://smarthomescene:[email protected]:3306/homeassistant?charset=utf8mb4

Измените имя пользователя, пароль и базу данных, чтобы они соответствовали вашим, а также IP-адрес. Если вы установили статический IP-адрес во время установки, введите его здесь вместе с портом. Если вы оставили автоматическую настройку DHCP, вам нужно будет узнать IP-адрес MariaDB на вашем маршрутизаторе. Сохраните файл и перезапустите Home Assistant.

Наконец, перезапустите контейнер LXC, выбрав Reboot в раскрывающемся меню в правом верхнем углу. После восстановления вы можете проверить состояние базы данных с помощью следующей команды, в которой должно быть написано активно (работает):

#Check MariaDB Status
systemctl status mariadb
YAML

Если вы все сделали правильно, вы готовы настроить Home Assistant и передать данные в новую базу данных.

Подключение Home Assistant к MariaDB

Последним шагом для подключения вашего экземпляра Home Assistant к вашей новой базе данных является фактическое подключение двух. Не смущайтесь, вам не нужно устанавливать надстройку MariaDB в Home Assistant. Откройте файл HA configuration.yaml с помощью редактора файлов или кода Visual Studio и добавьте следующее:

#Basic database configuration
recorder:
  db_url: mysql://smarthomescene:[email protected]:3306/homeassistant?charset=utf8mb4

Измените имя пользователя, пароль и базу данных, чтобы они соответствовали вашим, а также IP-адрес. Если вы установили статический IP-адрес во время установки, введите его здесь вместе с портом. Если вы оставили автоматическую настройку DHCP, вам нужно будет узнать IP-адрес MariaDB на вашем маршрутизаторе. Сохраните файл и перезапустите Home Assistant.

  • Выберите контейнер MariaDB слева
  • Нажмите Параметры в среднем столбце.
  • Дважды щелкните Порядок запуска/остановки.
  • Установите порядок запуска/выключения: 1
  • Установите задержку запуска: 240.

Этот параметр, по сути, сообщает Proxmox, что MariaDB LXC необходимо запустить перед любыми другими виртуальными машинами или контейнерами. Он также устанавливает задержку в 240 секунд для запуска последующих контейнеров. LXC без параметра порядка запуска/отключения всегда будут запускаться после тех, для которых этот параметр задан.

Таким образом, вы гарантируете, что Home Assistant всегда может подключиться к базе данных, которая будет запущена и запущена при запуске HA.

Настройка статических IP-адресов

Если вы еще этого не сделали, рекомендуется назначить статические IP-адреса серверам и службам (таким как Proxmox VE с отдельными контейнерами и виртуальными машинами), работающим в вашей локальной сети.

Известно, что маршрутизаторы циклируют аренду DHCP после перезагрузки или отключения питания, поэтому любая сделанная вами конфигурация, включающая IP-адрес (например, конфигурация MariaDB), сделает службу недоступной, поскольку ее больше нет на начальный IP-адрес.

Чтобы избежать этой проблемы, всегда устанавливайте статический IP-адрес в настройках DHCP вашего маршрутизатора для MariaDB. Если вы не знаете, как это сделать, вы можете найти инструкции по модели вашего маршрутизатора в Google.