Бэкап на Yandex Disk

07-04-2022

Установка Yandex.Disk. Переходим по адресу и выбираем подходящую версию.

wget http://repo.yandex.ru/yandex-disk/yandex-disk_latest_amd64.deb
sudo dpkg -i yandex-disk_latest_amd64.deb

Запускаем настройки:

yandex-disk setup
Использовать прокси-сервер? [y/N]: N
Авторизация
Если у вас ещё нет аккаунта на Яндексе, его можно завести по ссылке https://passport.yandex.ru/passport?mode=register

Откройте страницу 'https://ya.ru/device' и введите код ‘qweasdzxc’ в течение 300 секунд. Убедитесь, что вы авторизованы в браузере с нужным аккаунтом

Открываем адрес:

Yandex

 

Yandex

 

Yandex

 

Yandex

 

Токен сохранен в /home/drhellp/.config/yandex-disk/passwd
Настройка Яндекс.Диска
Введите путь к папке Яндекс.Диска (Оставьте пустым для использования папки '/home/drhellp/Yandex.Disk'):
Запускать Яндекс.Диск при входе в систему? [Y/n]: Y
Запуск демона...Готово

Для запуска демона после перезагрузки пропишем сервис в systemd. Создаем файл:

sudo nano /usr/lib/systemd/system/yandex-disk.service

Добавляем:

[Unit]
Description=Yandex Disk console client
Requires=network.target

[Service]
Type=forking
User=drhellp
Group=drhellp
ExecStart=/usr/bin/yandex-disk start -c /home/drhellp/.config/yandex-disk/config.cfg
RestartSec=60
Restart=always
[Install]
WantedBy=multi-user.target

Перезапускаем systemd:

systemctl --system daemon-reload

Запускаем службу yandex-disk.service:

systemctl start yandex-disk.service

Проверяем запуск службы командой:

systemctl status yandex-disk.service

Проверяем статус диска:

yandex-disk status
Статус ядра синхронизации: ожидание команды
Путь к папке Яндекс.Диска: '/home/drhellp/Yandex.Disk'
	Всего: 10 GB
	Занято: 0 B
	Свободно: 10 GB
	Максимальный размер файла: 51 GB
	Размер корзины: 0 B

Добавляем службу yandex-disk.service в автозагрузку:

systemctl enable yandex-disk.service

Создаем папку scripts:

mkdir scripts

Создаем в ней скрипты:

  • backup-day.sh - для ежедневного бэкапа
  • backup-week.sh - еженедельного бэкапа
  • backup-month.sh - ежемесячного бэкапа

На Yandex.Disk создаем следующую структуру каталогов:

  • Yandex.Disk/backups/sites/drhellp/day - храним 7 архивов сайта за последние 7 дней
  • Yandex.Disk/backups/sites/drhellp/week - хранятся 4 бэкапа за последние 4 недели
  • Yandex.Disk/backups/sites/drhellp/month - храним все резервные копии сайта за все время

backup-day.sh:

#!/bin/bash
# Задаем переменные
# Текущая дата в формате 2020-12-01_04-10
date_time=`date +"%Y-%m-%d_%H-%M"`
# Куда размещаем backup
bk_dir='/home/drhellp/Yandex.Disk/backups/sites/drhellp/day'
# Директория для архива
inf_dir='/var/www/html/'
# Название непосредственно директории с файлами
dir_to_bk='drhellp'
# Пользователь базы данных
user='user'
# Пароль пользователя
password='pass'
# Имя базы для бэкапа
bd_name='base'

# Создание архива исходников
/usr/bin/tar -czvf $bk_dir/www_$date_time.tar.gz -C $inf_dir $dir_to_bk
# Выгружаем базу данных
/usr/bin/mysqldump --opt -v --databases $bd_name -u$user -p$password | /usr/bin/gzip -c > $bk_dir/mysql_$date_time.sql.gz
# Удаляем архивы старше 7-ми дней
/usr/bin/find $bk_dir -type f -mtime +7 -exec rm {} \;

backup-week.sh:

#!/bin/bash
# Задаем переменные
# Текущая дата в формате 2020-12-01_04-10
date_time=`date +"%Y-%m-%d_%H-%M"`
# Куда размещаем backup
bk_dir='/media/yandex/backups/sites/drhellp/week'
# Директория для архива
inf_dir='/var/www/html/'
# Название непосредственно директории с файлами
dir_to_bk='drhellp'
# Пользователь базы данных
user='user'
# Пароль пользователя
password='pass'
# Имя базы для бэкапа
bd_name='base'

# Создание архива исходников
/usr/bin/tar -czvf $bk_dir/www_$date_time.tar.gz -C $inf_dir $dir_to_bk
# Выгружаем базу данных
/usr/bin/mysqldump --opt -v --databases $bd_name -u$user -p$password | /usr/bin/gzip -c > $bk_dir/mysql_$date_time.sql.gz
# Удаляем архивы старше 30-ти дней
/usr/bin/find $bk_dir -type f -mtime +30 -exec rm {} \;

backup-month.sh:

#!/bin/bash
# Задаем переменные
# Текущая дата в формате 2020-12-01_04-10
date_time=`date +"%Y-%m-%d_%H-%M"`
# Куда размещаем backup
bk_dir='/home/drhellp/Yandex.Disk/backups/sites/drhellp/month'
# Директория для архива
inf_dir='/var/www/html/'
# Название непосредственно директории с файлами
dir_to_bk='drhellp'
# Пользователь базы данных
user='user'
# Пароль пользователя
password='pass'
# Имя базы для бэкапа
bd_name='base'

# Создание архива исходников
/usr/bin/tar -czvf $bk_dir/www_$date_time.tar.gz -C $inf_dir $dir_to_bk
# Выгружаем базу данных
/usr/bin/mysqldump --opt -v --databases $bd_name -u$user -p$password | /usr/bin/gzip -c > $bk_dir/mysql_$date_time.sql.gz\;

Добавляем запуск этих файлов в cron:

sudo nano /etc/crontab
# site backup to yandex.disk
# ежедневно в 2:20
20 2 * * * root /home/drhellp/scripts/backup-day.sh >/dev/null 2>&1
# еженедельно в 3:20 в воскресенье
20 3 * * 0 root /home/drhellp/scripts/backup-week.sh >/dev/null 2>&1
# ежемесячно в 4:20 1-го числа месяца
20 4 1 * * root /home/drhellp/scripts/backup-month.sh >/dev/null 2>&1

К сожалению удаляемые файлы попадают в корзину из которой их можно удалить только через вэб-интерфейс Yandex.Disk. Не забываем чистить корзину.

Источники: