Shell скрипт бекапа сайта по WebDAV с использованием REST API


Скрипт хорошо документирован, что не составит труда изменить его под свои нужды.

Что умеет скрипт:
  • Создавать на сервере резервные копии:
    • — Файлов
    • — Баз данных
  • Безопасно авторизовываться по OAuth-токену.
  • Сохранять резервные копии на Яндекс диск.

Для его роботы необходимо oauth приложение и токен.
— зарегистрировать можно тут
— выставляем права в Яндекс.Диск REST API на Доступ к информации о Диске и Доступ к папке приложения на Диске
— в Callback URL «подставляем URL для разработки» и нажимаем сохранить
— подставляем наш id в oauth.yandex.ru/authorize?response_type=token&client_id= и подтверждаем разрешения
— после подстановки получаем токен, он выдается на 1 год

.sh
#!/bin/bash
#
#Переменные Базы данных
DBHOST="localhost" #Адрес MySQL сервера
DBUSER="user_db" #Имя пользователя базы данных
DBPASS="pass_db" #Пароль пользователя базы данных
DBNAME="name" #Имя базы данных
DBARC=$DBNAME.sql.gz #Имя архива базы данных
#
#Переменные сайта
SCRIPTDIR="/home/backup/" #Абсолютный путь откуда запускается скрипт и где храняться архивы
SCRDIR="/home/www/site.ru/" #Абсолютный путь к сайту от корня диска
SCREXCLUDE="tmp" #Что не попадет в архив
SCRARC="site.ru.tar.gz" #Имя архива файлов сайта
#
#Переменные Резерных копий
ARCNAME="site.ru"=$(date '+%F(%H:%M)')".tar" #Имя архивной копии сайта
ARCMAX="2" #Количество файлов в локальном хранилище
#
#Переходим в корневую директорию вебсервера
cd $SCRDIR
#
#Создаем файловый архив со сжатием, учитываем исключения
tar cfz $SCRIPTDIR$SCRARC --exclude=$SCREXCLUDE *
#
#Возвращаемся в папку со скриптом, где лежат все архивы
cd $SCRIPTDIR
#
#Архивируем базу данных со сжатием
mysqldump -h$DBHOST -u$DBUSER -p$DBPASS $DBNAME | gzip > $DBARC
#
#Объединяем файловый архив и дамп базы данных, теперь уже без сжатия
tar cf $SCRIPTDIR$ARCNAME $SCRARC $DBARC
#
#Убираем промежуточные архивы
rm *.gz
#
#Удаляем старые копии сайта, оставляем несколько свежих копий
ls -t *.tar | tail -n+$ARCMAX | xargs rm -f
#
#REST API Яндекс Диска - Отправляем результат в Яндекс.Диск
YA_DISK_HEADER='Authorization: OAuth TOKEN' #Каждый http запрос должен содержать токен авторизации
for FILE in $(ls -f ${SCRIPTDIR}/*|grep -v ".sh"); #Все файлы из директории backup, за исключением .sh, должны быть сохранены на диске
do
    echo "Transfering " $FILE;
    YA_DISK_REQUEST_URL='https://cloud-api.yandex.net:443/v1/disk/resources/upload?path=app:/'${ARCNAME}'&overwrite=false' #Формируем URL для загрузки
    REST_OUTPUT=$(curl -s -H "${YA_DISK_HEADER}" ${YA_DISK_REQUEST_URL}); #Выполняем запрос URL
    echo "YA REST_OUTPUT: ${REST_OUTPUT}"
    UPLOAD_URL=$(echo $REST_OUTPUT| sed 's/{"href":"\|",".*//g'); #Формируем URL для загрузки
    echo "UPLOAD_URL: $UPLOAD_URL"
    curl -s -T $FILE -H "{YA_DISK_HEADER}" ${UPLOAD_URL}; #Выполняем загрузку файла
done

Делаем скрипт исполняемым:
# chmod +x backup.sh

Добавляем скрипт в Crontab:
# crontab -e
 - самый простой вариант
@weekly /home/backup/backup.sh

3 комментария

avatar
+1 Давно ждал!))
avatar
спасибо буду тестить
комментарий был удален
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.