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

- 28 Ноябрь 2024 Бесплатный аналог ChatGPT на своём ПК Комментарии к посту
- 21 Ноябрь 2024 Python-проект в EXE-файл и обфускация кода Комментарии к посту
- 10 Октябрь 2024 Obsidian LiveSync - совместная работа над проектной документацией Комментарии к посту
- 15 Август 2024 Веб-сервер Caddy - Альтернатива NGINX и Apache Комментарии к посту
- 27 Март 2024 Создание резервных копий VPS на Яндекс Диск Комментарии к посту
- 06 Март 2024 Разворачивание Django-проекта на Replit Комментарии к посту
- 08 Февраль 2024 Разворачивание Django-проекта на PythonAnyWhere Комментарии к посту
- 29 Сентябрь 2023 Cpp FreeGPT WebUI - Бесплатный GPT на вашем сервере Комментарии к посту
- 22 Сентябрь 2023 Certbot - бесплатный SSL-сертификат для сайта Комментарии к посту
- 06 Сентябрь 2023 Полезные инструменты. Переключатель цветовой темы в Bootstrap5 Комментарии к посту
- 06 Сентябрь 2023 Полезные инструменты. Jazzmin - шаблон панели администратора Django Комментарии к посту
- 02 Август 2023 НЕ АКТУАЛЬНО! Бесплатный Chat-GPT4 на вашем ПК или сервере Комментарии к посту
Реклама

Бэкапы – больная тема. Разработчики скажут "какие бэкапы? У меня есть git!" и будут правы. Частично. Git, безусловно, позволяет откатиться на прошлую, "рабочую", версию. Но что будет, если откажет накопитель с проектом, который был размещен локально? Или случатся проблемы с сервером, где, помимо файлов проекта, лежит ещё и БД?
Где бэкапы? Где резервные копии? Их нет... Давайте исправим это.
Почему я задумался о бэкапах? Всё просто. У меня на сервере сейчас много всего:
- Сайт https://pressanybutton.ru/
- Telegram-бот для канала и чата https://t.me/press_any_button_bot
- Собственный git-сервер на базе Gitea.
- Собственный почтовый сервер на базе Docker Mailserver.
- Собственная Wiki на базе WikiJS.
- И БД PostgreSQL для всего этого.
Потерять это будет крайне обидно.
Мой 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 или подобных.
Войдите чтобы добавить комментарий.