ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Автоматическое резервное копирование WordPress на Google Диске с помощью Bash скрипта

Ранее мы показали, как сделать резервное копирование на Dropbox без плагина в WordPress. Если ваш сайт не такой большой, и не превышает лимит Dropbox в 2 ГБ, может удовлетворить ваши потребности. Тем не менее, если у вас есть больший сайт, то Google Drive может быть лучшим вариантом, так как вы получите 15 ГБ пространства.

Благодаря программе Gdrive можно загрузить прямо на Диск с помощью командной строки. Это означает , что мы можем использовать силу WP-CLI для резервного копирования нашей базы данных WordPress гораздо быстрее, чем с помощью WordPress плагинов в php. Сценарий находиться на GitHub.

Вы должны иметь доступ к оболочке вашего VPS или выделенный сервера, чтобы установить программное обеспечение Gdrive.

Автоматическое резервное копирование WordPress на Google Диске с помощью Bash скрипта

Обзор установки

Установка GDrive

На 64 бит Linux для Ubuntu, Debian или CentOS это установит последнюю GDrive. Если вам нужно другие версии или архитектуры процессоров,  смотрите здесь.

wget "https://docs.google.com/uc?id=0B3X9GlR6EmbnQ0FtZmJJUXEyRTA&export=download" -O /usr/bin/gdrive

 

Если вы хотите запустить gdrive под обычным пользователем, вы можете изменить владельца программы для этого пользователя.

sudo chown user /usr/bin/gdrive

 

Убедитесь , что gdrive позволяет его владельцу чтение, запись и выполнение (7)

sudo chmod 755 /usr/bin/gdrive

 

Теперь вы можете запустить начальный мастер, выполнив

gdrive list

 

Вы получите URL, которому вы должны следовать в вашем браузере.

Go to the following url in your browser:
https://accounts.google.com/o/oauth2/auth?access_type=offline&client_id=367226221053-7n0vf5akeru7on6o2fjinrecpdoe99eg.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&response_type=code&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive&state=state

 

Вы получите всплывающее окно разрешения GDrive , а затем будет показан проверочный код.
Разрешение доступа на GDrive
Введите код подтверждения выше, и вы увидите список элементов на Диске.

Enter verification code: 4/sd56K1wms98AD3x8k987D3066UY7F5sLlkH54g98Hgtf
Id                              Name              Type   Size     Created
0B-zYdZ8Kfs5Zc3RhcnRlcl9maWxl   Getting started   bin    1.6 MB   2016-08-16 00:44:19

 

В случае ошибки:

Установить следующее

Для Ubuntu/Debian

apt-get install ca-certificates

 

Для CentOS

yum install ca-certificates

 

Тест GDrive

Давайте создадим папку резервных копий

gdrive mkdir "backups"

 

Вы получите идентификатор каталога, который необходим для загрузки элементов в эту папку.

Directory 0B-df756Kfs34G3dVUG67hfGt98j created

 

Вы можете проверить на Диске существование папки.

Создание каталога на GDrive

Мы собираемся создать временный файл для проверки загрузки

cd /tmp
echo "test" > testfile.txt

 

Укажите идентификатор нашей папки резервных копий, который мы создали несколько шагов назад, --delete означает, что мы удалим локальную копию файла.

gdrive upload --parent 0B-df756Kfs34G3dVUG67hfGt98j --delete /tmp/testfile.txt

 

получим ID папки

Uploading /tmp/testfile.txt
Uploaded 0B-zYdZ8Kfs5ZbXRrbG9GXzBoSU0 at 7.1 B/s, total 7.1 B
Removed /tmp/testfile.txt

 

Вы можете проверить свой Google Drive, чтобы увидеть, присутствие файла.

Созданный файл на GDrive

Это позволит получить идентификатор файла TestFile. Все файлы и папки имеют ID, так что вы можете ссылаться на них в сценариях для удаления.

Мы будем использовать эту технику в резервном Bash скрипте Google Drive для WordPress.

gdrive list --no-header | grep testfile | awk '{ print $1}'

 

Теперь настало время для создания резервной копии сценария Google Drive для WordPress.

Создание скрипта резервного копирования на Google Drive для WordPress

Теперь мы собираемся создать Bash скрипт, который будет использовать Gdrive, tar и WP-CLI

mkdir ~/scripts
nano ~/scripts/googledrivebackup.sh

 

Это сценарий будет работает в последовательности, чтобы создать резервную копию каждой WordPress установки и загрузит его на Google Drive.

В переменной DAYSKEEP можно указать, сколько дней вы хотели бы сохранить резервные копии WordPress, любые старые будут удалены из Google Drive.

#!/usr/bin/env bash

#определите локальный путь для резервных копий
BACKUPPATH="/tmp/backups"

#определить путь удаленного резервного копирования
BACKUPPATHREM="AndreyEx Backups"

#путь к сайтам
SITESTORE="/var/www"

#префикс даты
DATEFORM=$(date +"%Y-%m-%d")

#кол-во дней копирования
DAYSKEEP=7

#рассчитать дни как префикс имени файла
DAYSKEPT=$(date +"%Y-%m-%d" -d "-$DAYSKEEP days")

#создать массив объектов на основе названий папок
SITELIST=($(ls -lh $SITESTORE | awk '{print $9}'))

#убедитесь, что папка для резервного копирования существует
mkdir -p $BACKUPPATH

#проверьте существование папки удаленного резервного копирования на gdrive
BACKUPSID=$(gdrive list --no-header | grep $BACKUPPATHREM | grep dir | awk '{ print $1}')
    if [ -z "$BACKUPSID" ]; then
        gdrive mkdir $BACKUPPATHREM
        BACKUPSID=$(gdrive list --no-header | grep $BACKUPPATHREM | grep dir | awk '{ print $1}')
    fi

#запуск цикла
for SITE in ${SITELIST[@]}; do
    #удалить старую резервную копию, получить идентификатор папки и удалить, если существует
    OLDBACKUP=$(gdrive list --no-header | grep $DAYSKEPT-$SITE | grep dir | awk '{ print $1}')
    if [ ! -z "$OLDBACKUP" ]; then
        gdrive delete $OLDBACKUP
    fi 

    # создать локальную папку архива, если она не существует
    if [ ! -e $BACKUPPATH/$SITE ]; then
        mkdir $BACKUPPATH/$SITE
    fi

    #всю папку Вордпресс
    cd $SITESTORE/$SITE
  
    #резервное копирование папки WordPress
    tar -czf $BACKUPPATH/$SITENAME/$SITE/$DATEFORM-$SITE.tar.gz .
    #резервное копирование базы данных WordPress, сжать и очистить от темы и плагинов
    wp db export $BACKUPPATH/$SITE/$DATEFORM-$SITE.sql --allow-root --skip-themes --skip-plugins
    cat $BACKUPPATH/$SITE/$DATEFORM-$SITE.sql | gzip > $BACKUPPATH/$SITE/$DATEFORM-$SITE.sql.gz
    rm $BACKUPPATH/$SITE/$DATEFORM-$SITE.sql
    
    #взять текущий ID папки
    SITEFOLDERID=$(gdrive list --no-header | grep $SITE | grep dir | awk '{ print $1}')

    #создать папку, если она не существует
    if [ -z "$SITEFOLDERID" ]; then
        gdrive mkdir --parent $BACKUPSID $SITE
        SITEFOLDERID=$(gdrive list --no-header | grep $SITE | grep dir | awk '{ print $1}')
    fi

    #загрузить архив WordPress
    gdrive upload --parent $SITEFOLDERID --delete $BACKUPPATH/$SITE/$DATEFORM-$SITE.tar.gz
    #загрузить базу данных WordPress
    gdrive upload --parent $SITEFOLDERID --delete $BACKUPPATH/$SITE/$DATEFORM-$SITE.sql.gz

done

#исправить разрешения
sudo chown -R www-data:www-data $SITESTORE
sudo find $SITESTORE -type f -exec chmod 644 {} +
sudo find $SITESTORE -type d -exec chmod 755 {} +

 

Ctrl + X, Y и Enter, чтобы сохранить и выйти.

Теперь добавьте сценарий как cronjob так, чтбы он работал каждый день

crontab -e

 

Введите этот скрипт так, чтобы он работал ежедневно (в полночь), вы можете использовать абсолютные пути к сценарию (например , /home/user/scripts или /root/scripts)

@daily /bin/bash ~/scripts/googledrivebackup.sh

 

Ctrl + X, Y и Enter, чтобы сохранить и выйти.

Теперь ваши резервные копии сайтов на WordPress или WooCommerce будут автоматически загружены в Google Drive без необходимости полагаться на плагин WordPress.

Автоматическое резервное копирование WordPress на Google Диске с помощью Bash сприпта

Exit mobile version