Резервное копирование сайта Drupal

Опубликовано: 31.05.2020
Автор: Виталий Бочкарев
Поддержать автора статьи по этой ссылке

Для предотвращения потери сайта в результате собственных ошибок или взлома со стороны злоумышленников необходимо делать резервное копирование сайта.

Я рекомендую делать копии сайта и самого сервера по следующему принципу:

  • Ежедневно внутри операционной системы виртуальной машины - данный тип бэкапа можно использовать для оперативного восстановления случайно удаленных файлов или настроек.
  • Еженедельно вне операционной системы - данный тип бэкапа можно использовать для восстановления сломанного сервера целиком в случае поломки операционной системы или всего сервера.
  • Еженедельно на внешний ресурс - данный тип резервной копии используется в случае потери доступа к хостингу.

     

Чтобы делать резервное копирование внутри операционной системы, необходимо выполнить следующие шаги:

Создать папки для облачного и локального бэкапов и скрипт бэкапа в папке локального бэкапа:

sudo mkdir /Yandex.Disk
sudo mkdir /var/www/drupal-backup
sudo chown -R webuser:webuser /var/www/drupal-backup
touch /var/www/drupal-backup/site-backup.sh
vi /var/www/drupal-backup/site-backup.sh

 

Вставить в редакторе следующий скрипт:

#!/bin/bash

#clean old backups from local storage
find /var/www/drupal-backup/*.db -mtime +1 -exec rm {} \;
find /var/www/drupal-backup/*.gz -mtime +1 -exec rm {} \;

# backup database and website
/usr/bin/mysqldump -udbuser -pQwer\!234 drupal > /var/www/drupal-backup/$(date +%Y-%m-%d)_database.db
tar cvzfP  /var/www/drupal-backup/$(date +%Y-%m-%d)_site.tar.gz /var/www/drupal

# clean old backups from Yandex.Disk and copy archives to YandexDisk every Saturday
if [[ $(date +%u) -eq 6 ]]; then
    find /Yandex.Disk/site-backup/*.db -mtime +28 -exec rm {} \;
    find /Yandex.Disk/site-backup/*.gz -mtime +28 -exec rm {} \;
    cp /var/www/drupal-backup/$(date +%Y-%m-%d)_site.tar.gz /Yandex.Disk/site-backup/
    cp /var/www/drupal-backup/$(date +%Y-%m-%d)_database.db /Yandex.Disk/site-backup/
fi

sudo yandex-disk start

Скрипт бэкапа выполняет следующие операции:

  1. Удаление старых дампов баз данных возрастом более 1 дня в локальном хранилище.
  2. Удаление старых архивов контента сайта возрастом более 1 дня в локальном хранилище.
  3. Создание дампа базы данных сайта.
  4. Архивирование контента сайта.
  5. Проверка, что текущий день - суббота
  6. Удаление старых дампов баз данных возрастом более 28 дней в облачном хранилище.
  7. Удаление старых архивов контента сайта возрастом более 28 дней в облачном хранилище.
  8. Копирование сегодняшнего бэкапа в облачное хранилище.
  9. Запуск синхронизации с облачным хранилищем

 

Разрешить исполнять скрипт бэкапа и открыть расписание планировщика cron:

chmod a+x /var/www/drupal-backup/site-backup.sh
sudo crontab -e

 

Поставить скрипт бэкапа в расписание cron, чтобы он запускался ежедневно в 5 утра:

0 5 * * * /var/www/drupal-backup/site-backup.sh

 

Создать файл репозитория для установки Яндекс.Диска.

sudo vi /etc/yum.repos.d/yandex.repo

 

Вставить в редакторе следующее содержимое файла yandex.repo:

[yandex]
name=Yandex
failovermethod=priority
baseurl=http://repo.yandex.ru/yandex-disk/rpm/stable/$basearch/
enabled=1
metadata_expire=1d
gpgcheck=1
gpgkey=http://repo.yandex.ru/yandex-disk/YANDEX-DISK-KEY.GPG

 

Установить библиотеки Яндекс.Диска

sudo rpm --import http://repo.yandex.ru/yandex-disk/YANDEX-DISK-KEY.GPG
sudo yum install yandex-disk

 

Настроить сервис синхронизации с Яндекс.Диском.

sudo yandex-disk setup

Ответить на вопросы конфигуратора, указав пользователя, на который зарегистрирована учетная запись Яндекса, и путь к локальной копии облачного хранилища.

Would you like to use a proxy server? [y/N]:
Log in
If you don't have a Yandex account yet, get one at https://passport.yandex.com/passport?mode=register
Enter username: sysengineering.ru
Enter password:
Token saved to /root/.config/yandex-disk/passwd
Configure Yandex.Disk
Enter path to Yandex.Disk folder (Leave empty to use default folder '/root/Yandex.Disk'): /Yandex.Disk
Would you like Yandex.Disk to launch on startup? [Y/n]: Y
Starting daemon process...Done

 

В результате работы данного сценария на диске сервера, где расположен веб-сайт, будет создана папка drupal-backup с ежедневными бэкапами базы данных дата_database.db и контента сайта дата_site.tar.gz, которые можно использовать для восстановления сайта. А так же в папке Yandex.Disk будут хранится еженедельные резервные копии, которые будут синхронизированы с облачным хранилищем Яндекс.Диска.

Необходимо учесть, что сценарий хранит 5 копий сайта, поэтому надо предусмотреть необходимое свободное место на диске, чтобы резервные копии не заполнили системный диск сервера и не остановили его работу.

 

Чтобы делать резервное копирование вне операционной системы сервера, необходимо делать снимок виртуальной машины, содержащей сайт и его резервные копии, 1 раз в неделю и хранить это снимок в течение месяца или дольше. Для этого надо воспользоваться настройками хостинга или облачного сервиса, чтобы выставить нужные интервалы резервного копирования.