После переноса сайта на digitalocean появилась потребность в собственном резервном копировании. Сначала был написан скрипт простого бэкапа, с хранением на самом хостинге. Но кто его знает, вдруг с ним что-нибудь случится, поэтому было решено копировать файлы дополнительно в облачное хранилище.
Аккаунт Яндекс,Диска у меня уже был, поэтому было решено делать интеграцию с ним. А также для Яндекс.Диска есть удобный консольный клиент под linux, который упрощает саму интеграцию, иначе пришлось бы использовать webdav api.
Консольный клиент
Для начала установим консольный клиент ( я устанавливал через yum, через другие менеджеры описано здесь ):
- Создаем файлик yandex.repo в /etc/yum.repos.d/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
- И устанавливаем:
nano /etc/yum.repos.d/yandex.repo rpm --import http://repo.yandex.ru/yandex-disk/YANDEX-DISK-KEY.GPG yum install yandex-disk
- Импортируем GPG ключ:
wget -O YANDEX-DISK-KEY.GPG http://repo.yandex.ru/yandex-disk/YANDEX-DISK-KEY.GPG sudo apt-key add YANDEX-DISK-KEY.GPG
- И запускаем мастер настройки, он запросит название каталога для хранения данных, прокси, параметры автозагрузки, а также логин и пароль для доступа в Яндекс.Диск:
yandex-disk setup
SMS информирование
Для отслеживания создания бэкапов и работоспособности сервера было добавлено sms информирование о создании бэкапа. Для рассылки мне приглянулся сервис sms.ru, т.к. он поддерживает бесплатную рассылку для отладки на указанные в договоре телефоны. О нем уже писали на хабре.
Регистрируемся в сервисе, и берем из личного кабинета api_key.
Для работы с сервисом есть php класс, взять его можно здесь.
Ну и собственно скрипт отправки sms:
require_once 'smsru.php'; $sms = new \Zelenin\smsru( api_key ); $result = $sms->sms_send( phone_number, 'backup success created' );
Скрипт бэкапа
В bash скрипт создания бэкапа был добавлен перенос в Яндекс.Диск и отправка sms:
# Доступы до БД MYSQL_USER=mysql_user MYSQL_PASSWORD=mysql_password MYSQL_DB=mysql_db MYSQLDUMP=/usr/bin/mysqldump SERVER_PATH="public_html/" $MYSQLDUMP --user=$MYSQL_USER -p$MYSQL_PASSWORD $MYSQL_DB > db.sql # Архвируем БД if [ -f db.sql ]; then echo "db dump created" tar -cjf db.tar.bz2 db.sql if [ -f db.tar.bz2 ]; then echo "db packed" rm db.sql mv db.tar.bz2 $SERVER_PATH fi fi # Путь до темы сайта THEME_PATH=$SERVER_PATH"theme/" cur_date=`date +%Y-%m-%d` filename="backup-"$cur_date".tar.bz2" # Архивируем, исключая не нужные файлы. tar \ --exclude=$SERVER_PATH".git" \ --exclude=$THEME_PATH"bower_components" \ --exclude=$THEME_PATH"node_modules" \ -cjf $filename $SERVER_PATH if [ -f $filename ]; then # Отправляем sms php sms.ru/send.php # Удаляем архив бд rm $SERVER_PATH"db.tar.bz2" # Перемещаем бэкап в Яндекс.Диск mv $filename Yandex.Disk/backups/ # Синхронизируем копии yandex-disk sync fi
Скрипт добавлен в crontab на запуск 1 раз в день. Удаление старых копий осуществляется вручную, вдруг что пойдет не так.