По умолчанию 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.