Бэкап сайта в dropbox
Резервное копирование своих и клиентских сайтов у меня сделано на Dropbox. Достаточно много времени уделил этой теме, но ничего более удобного для больших объемов данных не нашел. Некоторые сайты в архиве занимают более 10 гигабайт и очень важно хранить резервные копии максимально долгое кол-во времени. Аккаунт на 1 ТБ за 10$ в месяц на DropBox отлично справляется с этой задачей. Для небольших сайтов хватит а бесплатного аккаунта.
У Dropbox есть API, через которое я изначально и делал резервное копирование, написав PHP, который с ним взаимодействует и делает бэкапы.
Потом нашел на GitHub хороший BASH скрипт https://github.com/andreafabrizi/Dropbox-Uploader, который позволяет загружать, удалять, отображать файлы на вашем Dropbox аккаунте, работает он через API Dropbox.
Документацию можно прочесть на GitHub, она проста и понятна. Скрипт состоит из двух файлов:
- dropbox_uploader.sh – основной скрипт с которым и идет все взаимодействие с Dropbox
- 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 выглядит так:
Вы можете оставить первый комментарий