Skip to content
> 0x2d.dev
Назад

MariaDB в Docker в качестве основной базы данных Home Assistant


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

Контейнер с MariaDB

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

version: '3.0'

services:
  portainer:         # часть 2
    [...]
  homeassistant:     # часть 3
    [...]
  hass-configurator: # часть 4
    [...]

  mariadb:
    container_name: mariadb
    image: mariadb:latest
    restart: unless-stopped
    environment:
      - TZ=Europe/Moscow
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
      - MYSQL_DATABASE=${MYSQL_HA_DATABASE}
      - MYSQL_USER=${MYSQL_HA_USER}
      - MYSQL_PASSWORD=${MYSQL_HA_PASSWORD}
    ports:
      - "3306:3306"
    volumes:
      - ./mariadb:/var/lib/mysql

Так же создаем папку для mariadb

mkdir mariadb

Переменные окружения

Возможно вы заметили, что в docker-compose.yaml появились записи подобного типа ${MYSQL_ROOT_PASSWORD}. Они хранят конфиденциальные данные в отдельном файле. Это особенно полезно, когда мы хотим создать резервную копию и/или распространить нашу конфигурацию Docker в системе контроля версий (VCS), такой как GitHub/Gitlab.

Чтобы указать значение для этих переменных среды, создайте файл .env в том же каталоге, что и файл docker-compose.yaml.

sudo nano .env

# Так же настроим права на запись, чтобы не приходилось каждый раз писать sudo
sudo chown root:docker .env
sudo chmod g+w .env

.env файл будет выглядеть так, обязательно поменяйте пароли

MYSQL_ROOT_PASSWORD=mariadbrootpassword
MYSQL_HA_DATABASE=ha_db
MYSQL_HA_USER=homeassistant
MYSQL_HA_PASSWORD=mariadbhapassword

Зависимости контейнеров

Если перезагрузим нашу систему Docker, мы также хотим, чтобы контейнер Home Assistant перед запуском ждал, пока контейнер MariaDB запустится. Это необходимо, чтобы данные из HA не потерялись.

Поэтому добавьте следующее в запись конфигурации в контейнере homeassistant

[...]
  homeassistant:
    [...]
    depends_on:
      - mariadb

После всего перезапускам Docker

docker compose up -d

Docker compose up

Конфигурация Home Assistant

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

Секреты

Открываем файл secrets.yaml с помощью File Editor и добавляем новую переменную. Не забудьте поменять ip адрес, а также если вы меняли пароли, то замените их.

mariadb: "mysql://homeassistant:mariadbhapassword@<ip>:3306/ha_db?charset=utf8mb4"

Настройка секретов в Home Assistant

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

Далее переходим к configuration.yaml. В него вставляем новую запись, в которой будет происходить соединение с базой данных.

recorder:
  db_url: !secret mariadb
  purge_keep_days: 30

Переключение базы даных Home Assistant

Перезапуск

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

Проверка конфигурации Home Assistant

Управление базой из Home Assistant

Если вам необходим доступ напрямую в базу данных, то можно установить любой web клиент. Самым простым решением будет Adminer.

Для этого добавляем новый контейнер в docker-compose.yaml

adminer:
  container_name: adminer
  image: adminer
  restart: unless-stopped
  environment:
    - ADMINER_DEFAULT_SERVER=mariadb
    - ADMINER_PLUGINS=frames
  ports:
    - "8077:8080/tcp"
  depends_on:
    - mariadb

Ну и конечно вывести его в интерфейс Home Assistant, файл configuration.yaml

panel_iframe:
  [...]
  
  adminer:
    title: Adminer
    icon: mdi:database
    url: "http://<ip>:8077"
    require_admin: true

Home Assistant Adminer вход Home Assistant Adminer интерфейс

Итоговая структура проекта

home-assistant
├── .env
├── docker-compose.yaml
├── fileeditor
├── homeassistant
├── mariadb
│   └── ...
└── portainer

Предыдущая запись
Установка Mosquitto MQTT в Docker
Следующая запись
Установка и настройка File Editor в Docker-контейнере