Бэкап сайта в dropbox

2 461 просмотр 0 комментариев 25 декабря 2015

Резервное копирование своих и клиентских сайтов у меня сделано на Dropbox. Достаточно много времени уделил этой теме, но ничего более удобного для больших объемов данных не нашел. Некоторые сайты в архиве занимают более 10 гигабайт и очень важно хранить резервные копии максимально долгое кол-во времени. Аккаунт на 1 ТБ за 10$ в месяц на ​DropBox отлично справляется с этой задачей. Для небольших сайтов хватит а бесплатного аккаунта.

У Dropbox есть API, через которое я изначально и делал резервное копирование, написав PHP, который с ним взаимодействует и делает бэкапы.

Потом нашел на GitHub хороший BASH скрипт https://github.com/andreafabrizi/Dropbox-Uploader, который позволяет загружать, удалять, отображать файлы на вашем Dropbox аккаунте, работает он через API Dropbox.

Документацию можно прочесть на GitHub, она проста и понятна. Скрипт состоит из двух файлов:

  1. dropbox_uploader.sh – основной скрипт с которым и идет все взаимодействие с Dropbox
  2. dropShell.sh – интерактивная оболочка для упрошенной работы с Dropbox из терминала, используется только для того чтоб не вводить более сложные команды используя dropbox_uploader.sh при ручной работе с Dropbox, для работы своих скриптов этот файл не нужен, и я его не использую.

Работа с dropbox_uploader.sh для резервного копирования в Dropbox

Уверен что этот способ не идеален и можно сделать лучше, это быстро и это работает.

После скачивания dropbox_uploader.sh, я решил сделать этот скрипт видимым глобально из системы, для более удобной работы.

В Ubuntu это делается так

sudo mv dropbox_uploader.sh /usr/local/bin/dropUpload
sudo chmod +x /usr/local/bin/dropUpload

Это команды переносят скрипт dropbox_uploader.sh в глобально видимую папку со скриптами при этом переименовав скрипт в dropUpload. И делают его доступным для выполнения.

После чего нужно ввести команду dropUpload, и откроется диалог в котором вас попросят перейти по ссылке, зарегистрировать приложение в Dropbox. При регистрации приложения в Dropbox предлагается выбрать уровень доступа приложения к вашим файлам на аккаунте. Можно сделать глобальный доступ, тогда приложению будет доступны все файлы и папки на вашем Dropbox аккаунте, либо ограниченный доступ, при котором создаться специальная папка для приложения и приложение будет иметь доступ только к ней. Второй вариант безопаснее, и я использую его.

После этого вам будут выданы App Key и App Secret, которые нужно требует наш скрипт. После ввода этих данных скрипт создает файлик ~/.dropbox_uploader, в котором хранятся эти настройки, и его можно переносить с сервера на сервер, без необходимости вручную вводить эти данные на каждом сервере.

Все, скрипт работы с Drobox настроен, и уже можно экспериментировать отправкой файлов на Dropbox.

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

Для того чтоб автоматически делать бэкап базы данных и файлов нужно еще сделать индивидуальный скрипт для каждого сайта, вот моя заготовка:

#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PROJNAME="la2ha.ru"
DBNAME="la2ha.ru"
HOST='localhost'
USER='your_username'
PASSWD='your_password'
DATADIR=/var/www/la2ha/data/backupper/$PROJNAME
SRCFILES='/var/www/la2ha/www/la2ha.ru/www'
ZIPPARAMS=""

#start backup
echo "[--------------------------------[`date +%F_%H-%M`]--------------------------------]" 
echo "[----------][`date +%F_%H-%M`] Run the backup script..."
mkdir -p $DATADIR 2> /dev/null
find $DATADIR -mtime +10 -type f -print -delete
echo "[++--------][`date +%F_%H-%M`] Generate a database backup..."
#MySQL dump
MYSQLFILENAME=`date +%F_%H-%M`-$DBNAME.sql
mysqldump --user=$USER --host=$HOST --password=$PASSWD $DBNAME > $DATADIR/$MYSQLFILENAME
dropUpload upload $DATADIR/$MYSQLFILENAME $PROJNAME/$MYSQLFILENAME
rm $DATADIR/$MYSQLFILENAME
echo "[++++------][`date +%F--%H-%M`] Backup database [$DBNAME] - successfull."
echo "[++++++----][`date +%F--%H-%M`] Copy the source code project [$PROJNAME]..."
#Src dump
FILESFILENAME=`date +%F_%H-%M`-$PROJNAME.zip
zip -r $ZIPPARAMS $DATADIR/$FILESFILENAME $SRCFILES 2> /dev/null
dropUpload upload $DATADIR/$FILESFILENAME $PROJNAME/$FILESFILENAME
rm $DATADIR/$FILESFILENAME
echo "[++++++++--][`date +%F--%H-%M`] Copy the source code project [$PROJNAME] successfull."
echo "[+++++++++-][`date +%F--%H-%M`] Stat datadir space (USED): `du -h $DATADIR | tail -n1`" 
echo "[+++++++++-][`date +%F--%H-%M`] Free HDD space: `df -h /home|tail -n1|awk '{print $4}'`"
echo "[++++++++++][`date +%F--%H-%M`] All operations completed successfully!"
exit 0

Поясню по переменным:
PROJNAME – название проекта, так будет назваться папка на Dropbox в которую сохраняются файлы
DBNAME – база данных
HOST – хост базы данных, обычно это localhost
USER – имя пользователя базы данных
PASSWD – пароль базы данных
DATADIR – папка в которую будут сохранятся резервные копии до того как отправятся на Drobbox, потом файлы из папки удалаются
SRCFILES –  папка в которой находятся файлы проекта
ZIPPARAMS – параметры для ZIP архивирования, для некоторых проектов я указываю параметры которые исключают некоторые файлы и папки из резервной копии.

Сам скрипт писал не я,  просто нашел кусок какого-то кода и переделал под себя.

Предварительно на сервере должен быть установлен ZIP архиватор, но можно поправить скрипт и пользоваться предустановленным tar архиватором.

Если запустить скрипт, то создастся резервная копия и отправится вам на DropBox.

Для автоматического запуска скрипта я использую cron задачу

0 1 * * * /var/www/la2ha/www/la2ha.ru/www/backup.sh > /var/www/la2ha/data/backupper/log/la2ha.ru 2>&1

Она автоматически запускает скрипт резервного копирования ежедневно в 1 час ночи. И логи в файл /var/www/la2ha/data/backupper/log/la2ha.ru.

Результат на Dropbox выглядит так:

Вы можете оставить первый комментарий