Home Assistant Core делаем бэкапы в облако с помощью rclone с web интерфейсом

Ещё один вариант бэкапов в облако для Home Assistant.

для установки я подготовил скрипты (2 варианта: с web интерфейсом rclone и без), заходим в консоль, создаем файл inst и вставляем туда следующее содержимое:

1. вариант в web интерфейсом rclone

#!/bin/bash

USER="hass" # пользователь базы данных
PASS2="orangepipc"; # пароль пользователя базы данных
PATH_HASS_CONF="/home/hass/.homeassistant" # путь к конфигурации Home Assistant
PATH_BACKUP="/home/hass/backup" # путь к каталогу бэкапов

mkdir -p $PATH_HASS_CONF/bashscript
mkdir -p $PATH_BACKUP

# установка rclone

curl https://rclone.org/install.sh | sudo bash

# настройка rclone
# определяем айпи адрес машины

IPADDR=$(hostname -I | cut -f1 -d' ')

# делаем сервис запуска rclone web

sudo tee /etc/systemd/system/rclone-web.service << EOF
[Unit]
Description=rclone-web
After=network.target

[Service]
Type=simple
User=hass

WorkingDirectory=$PATH_HASS_CONF

ExecStart=rclone rcd --rc-web-gui --rc-user=$USER --rc-pass=$PASS2 --rc-serve --rc-addr=$IPADDR:5572 --rc-web-gui-no-open-browser
Restart=always

[Install]
WantedBy=multi-user.target
EOF
sudo systemctl --system daemon-reload
sudo systemctl enable rclone-web.service
sudo systemctl start rclone-web.service

# скрипт создания бэкапов и копирования в облако

tee $PATH_HASS_CONF/bashscript/backup_cloud << EOF
#!/bin/bash
sed -e '/^#/ d;/^\$/d;s/\$/"/g;s/:[^:\/\/]/="/g;s/ *=/=/g' ../secrets.yaml > secrets.sh
source secrets.sh
DATETIME="\$(date +%Y%m%d_%H%M%S)"
DATABASES=`mysql --user=\$mysql_login --password=\$mysql_password -e "SHOW DATABASES;" | tr -d "| " | grep -v Database`
# создаем папку если её нет
mkdir -p \$pach_backup
for db in \$DATABASES; do
    if [[ "\$db" != "information_schema" ]] && [[ "\$db" != _* ]] && [[ "\$db" != "mysql" ]] && [[ "\$db" != "performance_schema" ]] ; then
        mysqldump --force --opt --user=\$mysql_login --password=\$mysql_password --databases \$db > \$pach_backup/\$name_file.\$db.sql
        #gzip \$pach_backup/\$name_file.\$db.sql
        cd \$pach_backup && tar -czf \$name_file.$db.sql.tar.gz \$name_file.\$db.sql
        rm \$pach_backup/\$name_file.\$db.sql
    fi
done
cd \$pach_config && tar -czf \$pach_backup/\$name_file.config.tar.gz *
# Копируем в облако
if [ \$dest ]; then rclone copy \$pach_backup \$dest ; fi
if [ \$dest2 ]; then rclone copy \$pach_backup \$dest2 ; fi
if [ \$dest3 ]; then rclone copy \$pach_backup \$dest3 ; fi
if [ \$dest4 ]; then rclone copy \$pach_backup \$dest4 ; fi
# Удаляем в облаке старые бэкапы
if [ \$dest ]; then rclone --min-age $day_dest delete $dest ; fi
if [ \$dest2 ]; then rclone --min-age $day_dest delete \$dest2 ; fi
if [ \$dest3 ]; then rclone --min-age $day_dest delete \$dest3 ; fi
if [ \$dest4 ]; then rclone --min-age $day_dest delete \$dest4 ; fi
# Удаляем локальные копии, старше 8 дней
find \$pach_backup -mtime +\$day_local -delete
EOF

#делаем файл исполняемыми

chmod +x $PATH_HASS_CONF/bashscript/backup_cloud

# добавляем конфиг в secrets.yaml

echo "mysql_login: $USER" | tee -a $PATH_HASS_CONF/secrets.yaml
echo "mysql_password: $PASS2" | tee -a $PATH_HASS_CONF/secrets.yaml
echo "pach_backup: $PATH_BACKUP" | tee -a $PATH_HASS_CONF/secrets.yaml
echo "pach_config: $PATH_HASS_CONF" | tee -a $PATH_HASS_CONF/secrets.yaml
echo "# количество дней хранения бэкапов локально" | tee -a $PATH_HASS_CONF/secrets.yaml
echo "day_local: 30" | tee -a $PATH_HASS_CONF/secrets.yaml
echo "#  количество дней хренения бэкапов в облаке d - дней, M - месяцев" | tee -a $PATH_HASS_CONF/secrets.yaml
echo "day_dest: 30d" | tee -a $PATH_HASS_CONF/secrets.yaml
echo "# перфикс имени файла бэкапа" | tee -a $PATH_HASS_CONF/secrets.yaml
echo "name_file: \$(date +%Y%m%d_%H%M%S)" | tee -a $PATH_HASS_CONF/secrets.yaml
echo "# облако и папка в облаке" | tee -a $PATH_HASS_CONF/secrets.yaml
echo "dest: cloud-mail-ru:/hass-backup" | tee -a $PATH_HASS_CONF/secrets.yaml
echo "dest2: onedrive:/hass-backup" | tee -a $PATH_HASS_CONF/secrets.yaml
echo "dest3: yandex:/hass-backup" | tee -a $PATH_HASS_CONF/secrets.yaml
echo "dest4: " | tee -a $PATH_HASS_CONF/secrets.yaml

2. вариант без web интерфейса rclone

#!/bin/bash

USER="hass" # пользователь базы данных
PASS2="orangepipc"; # пароль пользователя базы данных
PATH_HASS_CONF="/home/hass/.homeassistant" # путь к конфигурации Home Assistant
PATH_BACKUP="/home/hass/backup" # путь к каталогу бэкапов

mkdir -p $PATH_HASS_CONF/bashscript
mkdir -p $PATH_BACKUP

# установка rclone

curl https://rclone.org/install.sh | sudo bash

# скрипт создания бэкапов и копирования в облако

tee $PATH_HASS_CONF/bashscript/backup_cloud << EOF
#!/bin/bash
sed -e '/^#/ d;/^\$/d;s/\$/"/g;s/:[^:\/\/]/="/g;s/ *=/=/g' ../secrets.yaml > secrets.sh
source secrets.sh
DATETIME="\$(date +%Y%m%d_%H%M%S)"
DATABASES=`mysql --user=\$mysql_login --password=\$mysql_password -e "SHOW DATABASES;" | tr -d "| " | grep -v Database`
# создаем папку если её нет
mkdir -p \$pach_backup
for db in \$DATABASES; do
    if [[ "\$db" != "information_schema" ]] && [[ "\$db" != _* ]] && [[ "\$db" != "mysql" ]] && [[ "\$db" != "performance_schema" ]] ; then
        mysqldump --force --opt --user=\$mysql_login --password=\$mysql_password --databases \$db > \$pach_backup/\$name_file.\$db.sql
        #gzip \$pach_backup/\$name_file.\$db.sql
        cd \$pach_backup && tar -czf \$name_file.$db.sql.tar.gz \$name_file.\$db.sql
        rm \$pach_backup/\$name_file.\$db.sql
    fi
done
cd \$pach_config && tar -czf \$pach_backup/\$name_file.config.tar.gz *
# Копируем в облако
if [ \$dest ]; then rclone copy \$pach_backup \$dest ; fi
if [ \$dest2 ]; then rclone copy \$pach_backup \$dest2 ; fi
if [ \$dest3 ]; then rclone copy \$pach_backup \$dest3 ; fi
if [ \$dest4 ]; then rclone copy \$pach_backup \$dest4 ; fi
# Удаляем в облаке старые бэкапы
if [ \$dest ]; then rclone --min-age $day_dest delete $dest ; fi
if [ \$dest2 ]; then rclone --min-age $day_dest delete \$dest2 ; fi
if [ \$dest3 ]; then rclone --min-age $day_dest delete \$dest3 ; fi
if [ \$dest4 ]; then rclone --min-age $day_dest delete \$dest4 ; fi
# Удаляем локальные копии, старше 8 дней
find \$pach_backup -mtime +\$day_local -delete
EOF

#делаем файл исполняемыми

chmod +x $PATH_HASS_CONF/bashscript/backup_cloud

# добавляем конфиг в secrets.yaml

echo "mysql_login: $USER" | tee -a $PATH_HASS_CONF/secrets.yaml
echo "mysql_password: $PASS2" | tee -a $PATH_HASS_CONF/secrets.yaml
echo "pach_backup: $PATH_BACKUP" | tee -a $PATH_HASS_CONF/secrets.yaml
echo "pach_config: $PATH_HASS_CONF" | tee -a $PATH_HASS_CONF/secrets.yaml
echo "# количество дней хранения бэкапов локально" | tee -a $PATH_HASS_CONF/secrets.yaml
echo "day_local: 30" | tee -a $PATH_HASS_CONF/secrets.yaml
echo "#  количество дней хренения бэкапов в облаке d - дней, M - месяцев" | tee -a $PATH_HASS_CONF/secrets.yaml
echo "day_dest: 30d" | tee -a $PATH_HASS_CONF/secrets.yaml
echo "# перфикс имени файла бэкапа" | tee -a $PATH_HASS_CONF/secrets.yaml
echo "name_file: \$(date +%Y%m%d_%H%M%S)" | tee -a $PATH_HASS_CONF/secrets.yaml
echo "# облако и папка в облаке" | tee -a $PATH_HASS_CONF/secrets.yaml
echo "dest: cloud-mail-ru:/hass-backup" | tee -a $PATH_HASS_CONF/secrets.yaml
echo "dest2: onedrive:/hass-backup" | tee -a $PATH_HASS_CONF/secrets.yaml
echo "dest3: yandex:/hass-backup" | tee -a $PATH_HASS_CONF/secrets.yaml
echo "dest4: " | tee -a $PATH_HASS_CONF/secrets.yaml

делаем его исполняемым

 

chmod +x inst

 

заменяем имя пользователя и пароль на свои, а так же пути.

выполняем этот файл не под суперпользователем, если Вы вошли под root то выполните команду

 

sudo -u ИМЯ_ПОЛЬЗОВАТЕЛЯ ./inst

 

дожидаемся завершения.

Если Вы установили с вэб интерфейсом, то зайти можно по адресу HomeAssistant c портом 5572

http://IP_AДРЕС:5572

через вэб интерфейс у меня получилось из mail.ru, google диск, OneDrive и Yandex настроить только mail.ru поскольку требуется только адрес почты и пароль к почте, остальные учетные записи я настраивал на локальной машине, то есть установил на локальную машину rclone и сделал учетные записи, как делать имеется инструкция на официальном сайте rclone, при создании необходимо чтобы была возможность запуска браузера, поскольку на удаленной машине нет возможности запустить браузер ,то делаем конфиг на локальной машине и копируем его на удаленную в домашний каталог пользователя/.config/rclone/rclone.conf
Для того чтобы вэб интерфейс был доступен из панели Home Assistant в файл configuration.yaml добавляем:

panel_iframe:
# панель rclone
  rclone:
    title: RClone
    icon: mdi:cloud-sync-outline
    url: http://192.168.5.188:5572
    require_admin: true

После чего все настройки делаются в файле secret.yaml, скрипт сам возьмет из этого файла параметры.
скрипт позволяет копировать в 4 облачных хранилища, если необходимо больше, то надо немного модернизировать скрипт.
в secret.yaml в параметры dest, dest2, dest3, dest4 настраиваются имена облачных хранилищ из конфигурации, ненужные строки можно удалить, если удалить все то будет создаваться только локальный бэкап.
Делаем конфигурации для rclone для своих облаков.
запускаем под пользователем crontab


crontab -e

и пишем туда запуск скрипта каждую неделю (или как Вам нравиться)

@weekly /home/hass/.homeassistant/bashscript/backup_cloud

так же возможно запустить через Home Assistant добавив в configuration.yaml

shell_command:
backup_db: /home/hass/.homeassistant/bashscript/backup_cloud

для количество бэкапов используем сенсоры:

  - platform: command_line
    name: backup_mail_ru
    command: "rclone lsl cloud-mail-ru:/hass-backup |wc -l"
    unit_of_measurement: ""
  - platform: command_line
    name: backup_yandex
    command: "rclone lsl onedrive:/hass-backup |wc -l"
    unit_of_measurement: ""
  - platform: command_line
    name: backup_onedrive
    command: "rclone lsl yandex:/hass-backup |wc -l"
    unit_of_measurement: ""</pre>
Home Assistant Core делаем бэкапы в облако с помощью rclone с web интерфейсом

Навигация по записям