Бэкап WordPress с VPS на Яндекс Диск

Резервная копия на том же сервере, где работает сайт, защищает только от ошибок в файлах. Если пропадёт сам сервер, пропадут и копии. Поэтому архивы лучше отправлять во внешнее хранилище. Покажу, как это сделать с помощью консольного клиента Яндекс Диска. Для примера использую VPS на Hetzner с Ubuntu.

Установка клиента

Яндекс выпускает официальный клиент для Linux. Подключаем репозиторий и ставим пакет:

curl -fsSL http://repo.yandex.ru/yandex-disk/YANDEX-DISK-KEY.GPG | sudo gpg --dearmor -o /usr/share/keyrings/yandex-disk.gpg
echo "deb [signed-by=/usr/share/keyrings/yandex-disk.gpg] http://repo.yandex.ru/yandex-disk/deb/ stable main" | sudo tee /etc/apt/sources.list.d/yandex-disk.list
sudo apt update
sudo apt install yandex-disk

Команда apt-key, которая встречается в старых инструкциях, в новых версиях Ubuntu устарела, поэтому ключ кладём в отдельный файл.

Авторизация

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

yandex-disk setup

Клиент покажет код и ссылку. Открываем её в браузере на своём компьютере, входим в аккаунт Яндекса и подтверждаем доступ.

Дальше мастер спросит, в какую папку синхронизировать диск, запускать ли клиент автоматически и нужен ли прокси.

Скрипт резервного копирования

Создаём скрипт, который делает дамп базы, архивирует файлы сайта и кладёт всё в папку Яндекс Диска:

#!/bin/bash
set -e
DATE=$(date +%F)
DST=/root/Yandex.Disk/backup
mkdir -p "$DST"
mysqldump --single-transaction wordpress | gzip > "$DST/db-$DATE.sql.gz"
tar -czf "$DST/site-$DATE.tar.gz" -C /var/www example.ru
find "$DST" -type f -mtime +14 -delete
yandex-disk start >/dev/null 2>&1 || true
yandex-disk sync

Последние строки на всякий случай запускают демон, если он не стартовал, и принудительно синхронизируют папку. Архивы старше 14 дней удаляются, чтобы не переполнить диск.

Делаем скрипт исполняемым:

chmod +x /root/backup.sh

Расписание в cron

crontab -e
30 3 * * * /root/backup.sh >> /var/log/backup.log 2>&1

Копия будет создаваться каждую ночь в 3:30. Составить другое расписание поможет генератор crontab.

Что проверить

  • Объём свободного места на Яндекс Диске: бесплатные 5 ГБ быстро заканчиваются.
  • Что архив действительно восстанавливается. Хотя бы раз разверните его на тестовом сервере.
  • Что локальная папка синхронизации не съедает место на VPS. Если диск маленький, используйте выборочную синхронизацию (yandex-disk --exclude-dirs).

Подробнее о стратегии бэкапов я писал в заметке о бэкапе в стиле DevOps.

Источники и ссылки


Комментарии загружаются…