Резервное копирование сайта на MODX в Google Диск

О необходимости резервного копирования сказано много. Мы в этой статье рассмотрим удобный и простой способ для серверов, настроенных по этой замечательной инструкции. Итак, вводные данные:
  • Каждый сайт работает от своего пользователя;
  • Все сайты находятся в /var/www/ ;
  • Системное имя пользователя, имя пользователя БД и название БД совпадают.
Что нам нужно в результате:
  • Создание zip архива всего сайта и sql дампа БД в ~/backup
  • Подстановка даты в имя файлов
  • [Опционально] Закачивание всех архивов в Google Drive и удаление с сервера
Первый вариант решения — каждому пользователю свой скрипт. Минус варианта в том, что при необходимости изменить что-то ключевое в алгоритме придется редактировать большое количество файлов. Второй вариант решения — один универсальный скрипт с алгоритмом и каждому пользователю свой скрипт, в котором указываются только пароль к БД и UID каталога на Google Drive. Пойдем по второму пути, ибо удобнее. Закачивание файлов в Google Drive. Для этого требуется:
  • Скачать утилиту работы с GDrive, сохранить ее в доступном для всех пользователей месте и добавить атрибут исполнения (+x).
  • Под каждым пользователем запустить shell с помощью команды
    $ sudo -u user /bin/bash
    
  • Запустить скачанную утилиту
    $ /home/shareduser/downloads/drive-linux-x64 list
    
  • и получить ссылку
  • После перехода по ней разрешите приложению доступ к своему аккаунту Google
  • Скопируйте полученный код обратно в консоль
  • После этих действий утилита сможет корректно запускаться без лишних запросов.

Универсальный скрипт резервного копирования

Скрипт простой, по комментариям в коде все понятно.

#!/bin/bash
# Пароль пользователя БД
MPWD=$1
# UID каталога в Google Drive
GCAT=$2
# Текущая дата
DATE=$(date +%Y%m%d)
# Текущий пользователь, под которым запущен скрипт
USER=$(getent passwd $UID | sed -e 's/\:.*//')
# Каталог для резервных копий в каталоге пользователя
BDIR="backup"
# Путь к утилите GDRIVe 
DRIVEUTIL="/home/admin/scripts/drive-linux-x64"

# Переходим в домашний каталог
cd ~/
# Архивируем каталог сайта, исключив кэш и директорию с транспортными пакетами
zip -q -r ${BDIR}/${USER}.${DATE}.zip www -x "www/core/cache/" "www/core/packages"
# Переходим в каталог для архивов
cd ~/${BDIR}/
#Создаем дамп БД
mysqldump -u${USER} -p${MPWD} ${USER} > ${USER}.${DATE}.sql
# Если переменная GCAT не пуста, запускаем закачку в облако и последующее удалений созданных файлов
if [ "$GCAT" != "" ]
then
${DRIVEUTIL} upload -f ~/${BDIR}/${USER}.${DATE}.sql --parent ${GCAT}
${DRIVEUTIL} upload -f ~/${BDIR}/${USER}.${DATE}.zip --parent ${GCAT}
rm ~/${BDIR}/${USER}.${DATE}.sql
rm ~/${BDIR}/${USER}.${DATE}.zip
fi
Скрипт сохраняем в /var/www/backup.sh . Он получился удобным - вызывать можно из-под любого пользователя, требуется лишь передать пароль от пользователя БД и ID каталога в GDrive, что мы и сделаем. Скрипт для пользователя Сохраняем его в /var/user/backup.sh, добавляем атрибут +x.
#!/bin/bash
cd ~/backup
../../backup.sh DBPASSWORD GDRIVEDIRECTORYUID

Как получить GDRIVEDIRECTORYUID Открываем любой каталог в Google Drive и копируем из адреса часть, обведенную красной рамкой на изображении:

Итог

У нас теперь есть очень простой способ создания резервных копий и их закачивания в GDrive. Для любого пользователя достаточно создать маленький скрипт с указанием пароля и UID каталога, все остальное будет работать. При этом, если не указывать второй параметр (UID каталога), дополнительных действий в отношении GDrive не требуется, а файлы удаляться не будут.

Остается лишь добавить пользовательские скрипты в cron.

Дата публикации: 2016-03-27 22:04:53
G+

Закрыть

Вернуться

Вернуться

Обратный звонок