Для предотвращения потери сайта в результате собственных ошибок или взлома со стороны злоумышленников необходимо делать резервное копирование сайта.
Я рекомендую делать копии сайта и самого сервера по следующему принципу:
- Ежедневно внутри операционной системы виртуальной машины - данный тип бэкапа можно использовать для оперативного восстановления случайно удаленных файлов или настроек.
- Еженедельно вне операционной системы - данный тип бэкапа можно использовать для восстановления сломанного сервера целиком в случае поломки операционной системы или всего сервера.
- Еженедельно на внешний ресурс - данный тип резервной копии используется в случае потери доступа к хостингу.
Чтобы делать резервное копирование внутри операционной системы, необходимо выполнить следующие шаги:
Создать папки для облачного и локального бэкапов и скрипт бэкапа в папке локального бэкапа:
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 дня в локальном хранилище.
- Создание дампа базы данных сайта.
- Архивирование контента сайта.
- Проверка, что текущий день - суббота
- Удаление старых дампов баз данных возрастом более 28 дней в облачном хранилище.
- Удаление старых архивов контента сайта возрастом более 28 дней в облачном хранилище.
- Копирование сегодняшнего бэкапа в облачное хранилище.
- Запуск синхронизации с облачным хранилищем
Разрешить исполнять скрипт бэкапа и открыть расписание планировщика 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 раз в неделю и хранить это снимок в течение месяца или дольше. Для этого надо воспользоваться настройками хостинга или облачного сервиса, чтобы выставить нужные интервалы резервного копирования.