Ещё один вариант бэкапов в облако для 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>