Создание резервных копий VPS на Яндекс Диск

Полезные инструменты | proDream | 27 Март 2024 | Просмотров: 257

В этом посте мы разберёмся как можно создавать резервные копии данных с VPS, используя в качестве хранилища Яндекс Диск.


Бэкапы – больная тема. Разработчики скажут "какие бэкапы? У меня есть git!" и будут правы. Частично. Git, безусловно, позволяет откатиться на прошлую, "рабочую", версию. Но что будет, если откажет накопитель с проектом, который был размещен локально? Или случатся проблемы с сервером, где, помимо файлов проекта, лежит ещё и БД?

Где бэкапы? Где резервные копии? Их нет... Давайте исправим это.

Почему я задумался о бэкапах? Всё просто. У меня на сервере сейчас много всего:

Потерять это будет крайне обидно.

Мой VPS приобретён у Timeweb. У них хорошие сервера и поддержка, но я не застрахован от внештатных ситуаций. Они, конечно, предоставляют услугу по созданию резервных копий, но она стоит 180 рублей в месяц при одном бэкапе в день/неделю/месяц. Если нужно хранить 7 копий на всю неделю, это 1260 рублей в месяц, что уже "кусается". Делать же всего одну копию вчерашнего дня или раз в неделю – не так уж эффективно.

С другой стороны, у меня есть подписка на "Яндекс 360", предоставляющая 1ТБ за 2290 рублей в год. Почему бы не воспользоваться этим хранилищем?

В итоге формируется следующая задача: необходимо организовать резервное копирование данных на сервере и отправку их на Яндекс Диск.

В качестве программы для создания резервных копий мы будем использовать Restic.
Документация доступна по ссылке: https://restic.readthedocs.io/en/stable/

Яндекс Диск подключим, как удалённое хранилище при помощи rclone.
Документация доступна по ссылке: https://rclone.org/

Конфигурация используемого VPS:
CPU: 2 x 3.3ГГц
RAM: 4 Гб
NVMe: 30 Гб
OS: Debian 12

Все действия производятся в терминале подключенном к VPS по SSH.

 

Установка и настройка rclone.

Начнём мы с подключения Яндекс Диска в качестве доступного в системе раздела.

Для установки rclone, выполним в терминале команду:

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

 

В результате должно быть сообщение как на скриншоте:

 

После установки нам необходимо установить подключение к Яндекс Диску, создав новое удалённое подключение в rclone.

Настройка выполняется в интерактивном режиме. Для начала настройки необходимо выполнить команду:

rclone config

 

Первое сообщение оповещает о том, что у нас нет файла настроек и будет создан новый. Далее предлагается три варианта действий:

  • n - Новое подключение
  • s - Установить пароль
  • q - Выйти из настроек.

Нам необходим первый вариант. Нажимаем клавишу n и отправляем.

Следующим действием нас просят указать имя подключения. Вписываем.

 

Далее отобразится большой список поддерживаемых сервисов, в котором необходимо найти нужный нам Yandex Disk и ввести его номер или краткое название, указанное в скобках. В моём случае это номер 52 и имя (yandex).

 

Далее будет три вопроса о вводе client_id, client_secret и расширенные настройки. Первые два оставляем пустыми, а в третьем выбираем n.

 

Затем нас попросят выбрать, открыть браузер для авторизации на сайте или нет. Поскольку мы подключились по SSH к VPS, никакого браузера у нас нет, выбираем n.

 

И тут возникает сложность. Нам необходимо авторизоваться в Яндекс, а для этого необходимо запустить rclone на локальной машине, где есть возможность открыть браузер.
Скачиваем бинарный файл для своей системы на сайте: https://rclone.org/downloads/
Пользователи Linux могут воспользоваться командой описанной выше.
Локальная машина у меня на Windows, поэтому все действия буду выполнять на ней.

Не разрываем соединение с VPS сервером! Все действия проводим во втором открытом окне терминала!

Скачиваем и распаковываем архив с программой: https://downloads.rclone.org/v1.66.0/rclone-v1.66.0-windows-amd64.zip

 

Открываем в этой директории терминал.

 

Копируем команду, указанную в сообщении на VPS, заменив в начале rclone на .\rclone.exe. Выполняем.

 

В браузере откроется страница с авторизацией в Яндекс. Вводим логин и пароль. Затем разрешаем доступ к Диску.

 

После того, как увидели надпись Success!, возвращаемся в терминал и видим несколько строк с токеном. Копируем его и вставляем в терминал VPS.

 

Нас попросят подтвердить, что всё верно. Печатаем и отправляем y.

 

На этом добавление подключения закончено.

 

Не отходя от rclone, создадим директорию для хранения бэкапов на диске, выполнив команду:

rclone mkdir yandex_disk:vps_backup

 

Где yandex_disk - имя подключения, а vps_backup - имя директории.

 

Установка и настройка Restic.

После того, как мы подключили rclone, можно устанавливать Restic.

Для установки выполним команду:

apt-get install restic

 

Далее инициализируем созданное подключение, выполнив команду:

restic -r rclone:yandex_disk:vps_backup init

 

Нас сразу попросят ввести пароль от репозитория, так называются хранилища в Restic. Вводим.
Сохраните пароль! Без него не будет доступа к репозиторию!

Для создания бэкапа используем команду:

restic -r rclone:yandex_disk:vps_backup backup /root

 

Где /root - директория, которая будет сохранена в резервной копии.

Начнётся процесс создания резервной копии. В моём случае на 7 Гб данных из 38 тысяч файлов, заняло чуть меньше 9-ти минут. Дольше всего добавлялись файлы git-сервера. Следующие бэкапы будут производиться быстрее, поскольку тут система похожа с git - создаётся изначальный индекс репозитория, а затем добавляются или удаляются файлы как "коммиты", называемые "снимками".

Всё предельно просто.

 

Автоматический запуск создания резервной копии.

Автоматизировать создание бэкапов нам поможет cron, но сперва мы напишем простейший скрипт для вызова команды Restic.

Создадим новый файл backup_script.sh, вызвав команду:

touch backup_script.sh

 

Затем откроем его в nano и пропишем следующее содержимое:

#!/bin/bash

export RESTIC_PASSWORD="password"

restic -r rclone:yandex_disk:vps_backup backup /root

 

В первой строке прописываем так называемый "шебанг". Это строка начинающаяся с #! и указывающая путь к интерпретатору или программе, в которой следует выполнить описанный в файле код.
В третьей строке мы передаём пароль от репозитория в переменные окружения.
В пятой строке вызываем команду создания бэкапа.

Нажимаем CTRL+S для сохранения и CTRL+X ля выхода.

Далее файлу необходимо дать права на исполнение. Выполним команду:

chmod +x backup_script.sh

 

Затем запустим crontab для редактирования, выполнив команду:

crontab -e

 

И впишем туда следующую строку:

30 0 * * * /root/backup_script.sh

 

Стока выше определяет, что скрипт указанный по пути будет запускаться каждый день в 00:30.

Проверить работу и посмотреть список снимков можно командой:

restic -r rclone:yandex_disk:vps_backup snapshots

 

Восстановление резервной копии.

Резервную копию сделали, а как восстанавливать? Всё достаточно просто.

Для того, чтобы восстановить снимок, достаточно выполнить две команды.

Первая команда описана выше, сперва необходимо выбрать идентификатор снимка для восстановления:

restic -r rclone:yandex_disk:vps_backup snapshots

 

Вторая команда непосредственно восстанавливает снимок:

restic -r rclone:yandex_disk:vps_backup restore <ID> --target /root

 

Вместо <ID> вписываем идентификатор снимка.

 

Заключение.

Мы подключили к VPS Яндекс Диск и настроили автоматическое создание резервных копий. 
Тема была интересна, и я надеюсь, что бэкапы так и останутся невосстановленными.


Добавить комментарий:

Войдите чтобы добавить комментарий.

Комментарии пользователей:

Arduinum628 | 11 мая 2024 г. 19:02 |

Если у вас Debian или система похожая на Ubuntu и вам не хочется копировать весь жёсткий диск, а лишь ваш код например, то можете использовать команды ниже. ssh name_user_vps@host "zip -r code_vps_bacup.zip /home/name_user_vps/code/" && sftp name_user_vps@host:/home/name_user_vps/code_vps_bacup.zip ~/bacups _vps Либо в ручную либо автоматизируйте данные команды в скрипте sh или подобных.