Как сделать резервную копию сайта WordPress в Spaces

Вступление

DigitalOcean Spaces может предоставить решение для хранения объектов для данных сайта WordPress. Эти данные часто разнообразны, включая медиаресурсы и файлы базы данных, что делает их хорошим кандидатом для хранения объектов. Поскольку такие решения, как Spaces, могут хранить большие объемы неструктурированных данных, они могут вместить статические ресурсы вашего сайта. Отдельное хранение статических ресурсов может оптимизировать производительность сайта за счет освобождения места и ресурсов на ваших серверах. Если ваш сайт имеет динамические ресурсы - ресурсы с высокой частотой запросов или файлы базы данных, которые требуют частой модификации - вы можете рассмотреть возможность объединения решения блочного хранилища с вашим DigitalOcean Space для оптимального хранения ваших данных. Чтобы узнать больше о хранилище объектов и блоков, ознакомьтесь с нашимtutorial on Object Storage vs. Block Storage Services.

В этом уроке мы будем использовать пробелы для резервного копирования данных WordPress. Поскольку DigitalOceanSpaces API совместим с AWS S3 API, мы сможем использовать S3-совместимые плагины для управления нашими резервными копиями, а такжеS3cmd, клиентский инструмент для работы с S3 и S3- совместимые хранилища объектов. Мы рассмотрим несколько различных способов создания резервных копий: использование плагина WordPress, создание резервных копий вручную с помощью S3cmd и автоматизация резервного копирования с помощью S3cmd и сценария, созданного для этой цели.

Предпосылки

В этом руководстве предполагается, что у вас есть экземпляр WordPress на сервере, а также пространство DigitalOcean. Если нет, вы можете настроить следующее:

Имея эти предварительные условия, мы можем начать резервное копирование сайта WordPress в Spaces.

Изменение разрешений WordPress

На протяжении этого руководства мы будем работать с папкойwp-content/uploads в нашем проекте WordPress, поэтому важно, чтобы эта папка существовала и имела правильные разрешения. Вы можете создать его с помощью командыmkdir, используя флаг-p, чтобы создать папку, если она не существует, и избежать выдачи ошибки, если она есть:

sudo mkdir -p /var/www/html/wp-content/uploads

Теперь вы можете установить разрешения для папки. Во-первых, установите его право собственности на своего пользователя (мы будем использовать здесьsammy, но обязательно использовать вашего некорневого пользователяsudo), а групповое владение - для группыwww-data:

sudo chown -R sammy:www-data /var/www/html/wp-content/uploads

Затем установите разрешения, которые предоставят веб-серверу доступ на запись в эту папку:

sudo chmod -R g+w /var/www/html/wp-content/uploads

Теперь мы сможем использовать плагины для создания резервных копий ресурсов в папкеwp-content/uploads и взаимодействовать с нашими активами из интерфейса WordPress.

Использование плагинов для создания резервных копий

Существует множество S3-совместимых плагинов, которые вы можете использовать для резервного копирования вашего сайта WordPress на ваш Space. При оценке плагинов необходимо учитывать, хотите ли вы выполнять резервное копирование файлов базы данных, поскольку некоторые из этих ресурсов не предоставляют такую ​​возможность. Еще один фактор, который нужно учитывать, - будет ли плагин извлекать ресурсы из других плагинов. Например, если вы используете диспетчер документов, вы можете решить, будет ли ваш плагин резервного копирования захватывать файлы и ресурсы, созданные вашим диспетчером документов, в папкеwp-content/uploads.

Установка плагинов с помощью WP-CLI

Можно работать сWP-CLI для управления вашими плагинами WordPress из командной строки. Мы установим его в этом разделе и используем в следующем, чтобы продемонстрировать, как работать с плагинами для резервного копирования данных WordPress в Spaces.

Чтобы установить WP-CLI, мы будем следовать предлагаемым шагам проекта. Выполните следующую команду, чтобы загрузить двоичный файл в папкуtmp:

cd /tmp
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar

Чтобы сделать этот файл исполняемым и используемым из командной строки, введите следующее:

chmod +x /tmp/wp-cli.phar

После того, как мы сделали файл исполняемым, мы можем переименовать его и переместить в место в нашемPATH:

sudo mv /tmp/wp-cli.phar /usr/local/bin/wp

Если мы хотим проверить, что наша установка прошла успешно, мы можем выполнить следующее:

wp --info

Это даст нам общую информацию о версии, которую мы используем, и ее пути.

Теперь мы можем использовать WP-CLI для установки любых плагинов, которые мы хотим использовать, а также дляmanage other tasks, связанных с нашим сайтом WordPress.

Установка и настройка UpdraftPlus Backup

Если вас беспокоит резервное копирование файлов базы данных вместе с другими медиа-активами, вы можете использовать плагин, который предлагает опцию резервного копирования базы данных. UpdraftPlus Backup предлагает совместимую с S3 бесплатную версию, которая обеспечивает резервное копирование баз данных и носителей, а также планирование резервного копирования.

Чтобы установить UpdraftPlus, мы можем перейти в каталог плагинов WordPress:

cd /var/www/html/wp-content/plugins

Отсюда мы можем установитьupdraftplus с помощью командыwp:

wp plugin install updraftplus

Чтобы активировать плагин, мы можем запустить:

wp plugin activate updraftplus

Отсюда мы можем перейти к вкладке плагинов в левой части нашей панели администрирования WordPress:

WordPress Plugin Tab

ВыбравInstalled Plugins, мы перейдем на страницу со списком установленных плагинов. Мы должны увидетьUpdraftPlus - Backup/Restore в списке доступных опций:

UpdraftPlus Activated

Чтобы настроить параметры резервного копирования, перейдите на вкладкуSettings на панели управления администратора и выберитеUpdraftPlus Backups из списка доступных параметров. Будет экран посадки, который выглядит следующим образом:

Updraft Menu

Мы расскажем, как сделать базовое резервное копирование сайта с помощью этого плагина. На вкладкеSettings вверху страницы вы найдете меню, которое позволяет вам планировать резервное копирование:

Schedule Menu

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

Под этим меню вы увидите различные параметры удаленного хранилища. ВыберитеS3-Compatible (Generic):

S3-Compatible Option

После выбора этой опции вам будет предложено меню, которое запрашивает информацию о вашем DigitalOcean Space:

S3 Settings

Основываясь на URL своего пространства, вы сможете определить его имя и конечную точку. Например, если URL-адрес вашего пространстваhttps://example-name.nyc3.digitaloceanspaces.com, тоexample-name будет вашим сегментом, аnyc3.digitaloceanspaces.com будет вашей конечной точкой. S3 location будет именем вашего сегмента, аS3 end-point будет вашей конечной точкой.

Ниже вы найдете параметры для файлов, которые нужно включать и исключать из резервной копии:

Include Exclude File Options

После того, как вы заполнили эти настройки, чтобы отразить то, что вы хотите сохранить, вы можете вернуться на вкладкуCurrent Status. Когда вы выбираетеBackup Now из доступных кнопок в верхней части экрана, вам будет представлено следующее меню:

Database Menu

Здесь вы можете выбрать, хотите ли вы сделать резервную копию вашей базы данных.

После того, как вы выбрали опциюBackup Now в нижней части этого меню, ваши файлы резервных копий должны заполнить вашу корзину. Вы можете перейти на свою страницу Spaces в панели управления DigitalOcean, чтобы убедиться, что они там есть. После того, как вы проверили функциональность плагина, вы можете изменить настройки расписания резервного копирования в соответствии со своими потребностями.

Резервное копирование WordPress с S3cmd

Как инструмент командной строки для управления данными в решениях для хранения объектов, S3cmd предлагает множество вариантов резервного копирования данных WordPress в Spaces. Его можно использовать в изолированных командах и в сценариях, которые автоматизируют процесс резервного копирования.

Если на вашем сервере еще не установленs3cmd, вы можете установить его, выполнивthe “Install S3cmd” section of this tutorial, и настроить его с использованием информации о пространствах, выполнивthe “Configure S3cmd” section.

Теперь у вас должен быть установленs3cmd и настроен с использованием информации о пространствах. Вы можете проверить конфигурациюs3cmd, набрав:

s3cmd --dump-config

Вы должны увидеть результат, подобный следующему:

Output
[default]
access_key = Your_Spaces_Access_Key
access_token =
add_encoding_exts =
add_headers =
bucket_location = US
ca_certs_file =
cache_file =
check_ssl_certificate = True
check_ssl_hostname = True
cloudfront_host = cloudfront.amazonaws.com
default_mime_type = binary/octet-stream
delay_updates = False
delete_after = False
delete_after_fetch = False
delete_removed = False
dry_run = False
enable_multipart = True
encrypt = False

...

После того, как мы проверили информацию о конфигурацииs3cmd, чтобы убедиться, что она соответствует нашим учетным данным Spaces, мы будем готовы использоватьs3cmd для резервного копирования файлов в наше пространство. Сначала мы сделаем это вручную, прежде чем перейти к созданию сценария, который автоматизирует эту работу.

Создание резервных копий папкиwp-content/uploads вручную

Чтобы создать резервную копию нашей папкиwp-content/uploads, мы будем использовать команду под названиемs3cmd sync. Это позволит нам передавать только те файлы, которые еще не существуют в нашем Пространстве. Хотя это может не иметь большого значения для одноразовой передачи, это может быстро стать важным по мере того, как вы перемещаете больше данных в свое Пространство. Мы будем использоватьsammys-bucket для нашего сегмента иsammys-backups для обозначения папки резервного копирования в нашем пространстве, но вы должны заменить их именами вашего сегмента и папки резервного копирования (если применимо). Чтобы убедиться, что наши файлы отправляются по назначению, мы будем использовать параметр--dry-run сs3cmd следующим образом:

s3cmd sync --dry-run /var/www/html/wp-content/uploads s3://sammys-bucket/sammys-backups/

Если вывод команды указывает, что ваши данные достигнут места назначения, то вы можете продолжить и запустить команду без параметра--dry-run:

s3cmd sync /var/www/html/wp-content/uploads s3://sammys-bucket/sammys-backups/

Создание ручных резервных копий базы данных MySQL

Теперь мы можем создать резервную копию нашей базы данных MySQL. Это произойдет в 4 частях. Во-первых, мы можем создать папку в нашем домашнем каталоге для хранения файлов нашей базы данных:

mkdir ~/mysqldmp

Далее мы создадим файл для хранения информации о пользователе и пароле нашей базы данных. Это поможет нам избежать передачи этой информации в командную строку в процессе создания наших файлов резервных копий. Пользовательские параметры MySQL обычно хранятся в~/.my.cnf, поэтому мы создадим этот файл в нашем домашнем каталоге. Тип:

nano ~/.my.cnf

Внутри файла мы будем указывать имя пользователя и пароль для нашего клиента MySQL:

~/.my.cnf

[client]
user=mysql_user
password=mysql_password

Сохраните этот файл, набравCTRL+X, а затемY.

Чтобы ограничить права на чтение и запись для нашего пользователя, мы можем ввести следующее:

chmod 600 .my.cnf

Теперь мы сможем запустить командуmysqldump, чтобы сделать копию файлов нашей базы данных, не передавая информацию о пароле в командную строку. Когда мы запускаемmysqldump, он будет искать наш файл.my.cnf как часть своего процесса для чтения параметров по умолчанию. Чтобы сжать вывод из нашей базы данных, мы также можем использоватьgzip следующим образом:

mysqldump mysqldatabase_name | gzip > ~/mysqldmp/mysql_dump.sql.gz

Наконец, мы можем использоватьs3cmd для отправки сжатого файла в наше пространство:

s3cmd sync mysqldmp/mysql_dump.sql.gz s3://sammys-bucket/sammys-backups/

Теперь вы должны увидеть сжатый файл базы данных в вашем пространстве.

Автоматизация резервного копирования WordPress с помощью Cron

Автоматизация резервного копирования гарантирует, что ваши данные WordPress остаются доступными и восстанавливаемыми. Хотя можно создавать резервные копии вручную, это трудоемкий процесс, который можно с пользой автоматизировать с помощью планировщика заданийcron. Чтобы узнать больше об использованииcron для планирования задач, ознакомьтесь с нашим руководством поHow To Schedule Routine Tasks With Cron and Anacron on a VPS.

Чтобы создать файл для нашего скрипта резервного копирования, мы можем использовать следующую команду:

nano ~/wp-sync.sh

В пустом файле мы сначала напишем следующее, чтобы указать, что этот скрипт будет запускаться оболочкой Bash:

wp-sync.sh

#!/bin/bash

Далее мы объявим переменные, которые будут указывать информацию о том, какие файлы и базы данных мы будем резервировать. Наши переменныеDATABASE иUPLOADS_DIR будут указывать информацию о базе данных и папке, резервную копию которой мы будем создавать. Мы объявим эти переменные как массивы, которые позволят нам указать более одного значения:

wp-sync.sh

...
DATABASE=("mysqldatabase_name") # To add more than one database, separate values with spaces: ("database1" "database2")
UPLOADS_DIR=("/var/www/html/wp-content/uploads") # To add more than one directory, separate values with spaces: ("folder1" "folder2")

BACKUP_DIR=/home/sammy/mysqldmp

ПеременнаяDATABASE указывает имя базы данных WordPress или баз данных, резервную копию которых будет выполнятьmysqldump. UPLOADS_DIR указывает на каталог или каталоги, резервные копии которых мы создаем. BACKUP_DIR сообщает сценарию, кудаmysqldump должен записать файл резервной копии.

Затем мы установим нашу информациюs3cmd, включая информацию о корзине Spaces. Эта информация будет отражать информацию о корзинеs3 из нашего файла конфигурацииs3cmd. Когда мы укажем нашу переменнуюS3_CMD, мы включим путь к двоичному файлуs3cmd дляcron. Мы также включим переменнуюDATE, которая позволит нам создавать отметки времени для наших файлов резервных копий:

wp-sync.sh

...

DATE=$(date +%y%m%d-%H_%M_%S)


S3_CMD="/usr/local/bin/s3cmd"
S3_BUCKET=s3://sammys-bucket/sammys-backups/$DATE/

Здесь мы сделали переменнуюDATE очень детализированной, чтобы уловить год (%y), месяц (%m), день (%d), час (%H), минута (%M) и секунда (%S) нашей резервной копии. В зависимости от частоты вашего расписания резервного копирования, вы можете изменить это таким образом, чтобы вы могли с пользой отслеживать ваши резервные копии. Наша переменнаяS3_CMD будет указывать на исполняемый файлs3cmd, который позволит нам запускать наши команды.

Затем мы включим набор команд, которые создадут наш каталогmysqldmp, если он еще не существует, и удалим все файлы из этого каталога в процессе обновления:

wp-sync.sh

...

mkdir -p $BACKUP_DIR
rm -rf "${BACKUP_DIR:?}/*"

Наконец, мы создадимfor loops для запускаs3cmd sync для файлов нашей базы данных. Мы снова будем использоватьmysqldump для создания сжатого файла базы данных, но мы добавим к нему параметр--defaults-extra-file, который сообщаетmysqldump прочитать.my.cnf в дополнение к стандартной опции файлы. Мы также проведем итерацию по массиву нашей базы данных, выполняя одинаковый набор действий для каждой базы данных:

wp-sync.sh

...

for DB in "${DATABASE[@]}"
do
mysqldump --defaults-extra-file=/home/sammy/.my.cnf "$DB" | gzip > "$BACKUP_DIR/mysql_dump.sql.gz"
$S3_CMD sync "$BACKUP_DIR/mysql_dump.sql.gz" "$S3_BUCKET"
done

Командыmysqldump иs3cmd sync выполняют ту же работу, что и в предыдущем разделе. Однако, поскольку мы добавили метку времени переменнойDATE в нашу корзину, наши файлы будут созданы в нашем пространстве таким образом, чтобы мы могли легко отслеживать, когда они были созданы.

Далее мы создадим цикл для нашего каталога. Опять же, мы будем перебирать массивUPLOADS_DIR, чтобы выполнить те же действия в каждом каталоге:

wp-sync.sh

...

for DIR in "${UPLOADS_DIR[@]}"
do
$S3_CMD sync "$DIR" "$S3_BUCKET"
done

Опять же, командаs3cmd sync идентична команде, которую мы использовали для ручного резервного копирования этого каталога. Разница - это временная метка, которая прикрепляется к этому материалу в нашем Пространстве.

Сценарий в полном объеме будет выглядеть так:

wp-sync.sh

#!/bin/bash

DATABASE=("mysqldatabase_name") # To add more than one database, separate values with spaces: ("database1" "database2")
UPLOADS_DIR=("/var/www/html/wp-content/uploads") # To add more than one directory, separate values with spaces: ("folder1" "folder2")

BACKUP_DIR=/home/sammy/mysqldmp

DATE=$(date +%y%m%d-%H_%M_%S)

S3_CMD="/usr/local/bin/s3cmd"
S3_BUCKET=s3://sammys-bucket/sammys-backups/$DATE/

mkdir -p $BACKUP_DIR
rm -rf "${BACKUP_DIR:?}/*"

for DB in "${DATABASE[@]}"
do
mysqldump --defaults-extra-file=/home/sammy/.my.cnf "$DB" | gzip > "$BACKUP_DIR/mysql_dump.sql.gz"
$S3_CMD sync "$BACKUP_DIR/mysql_dump.sql.gz" "$S3_BUCKET"
done

for DIR in "${UPLOADS_DIR[@]}"
do
$S3_CMD sync "$DIR" "$S3_BUCKET"
done

Теперь мы можем сделать наш скриптwp-sync.sh исполняемым:

chmod +x ~/wp-sync.sh

Чтобы проверить это, мы можем запустить:

sudo ~/wp-sync.sh

Перейдите к своему пространству и убедитесь, что ваши файлы скопированы, как задумано. После того, как вы проверите это, вы можете отредактировать файлcrontab, чтобы запускать сценарий с желаемым интервалом.

Откройте файлcrontab, набрав:

crontab -e

Если вы впервые редактируете этот файл, вам будет предложено выбрать редактор:

кронтаб

no crontab for root - using an empty one
Select an editor.  To change later, run 'select-editor'.
  1. /bin/ed
  2. /bin/nano        <---- easiest
  3. /usr/bin/vim.basic
  4. /usr/bin/vim.tiny
Choose 1-4 [2]:
...

Вы можете выбрать2 для nano или ввести номер, соответствующий редактору по вашему выбору.

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

кронтаб

...

*/2 * * * * /home/sammy/wp-sync.sh

Через две минуты вы должны увидеть метку времени в вашем пространстве. Теперь вы можете изменить файлcrontab, указав интервал времени, который вы хотите использовать для резервного копирования.

Заключение

Мы рассмотрели несколько способов резервного копирования данных WordPress в службу хранилища объектов DigitalOcean Spaces.

Чтобы узнать больше о работе сs3cmd и Spaces, ознакомьтесь с нашимguide to configuring s3cmd 2x to manage DigitalOcean Spaces и нашим руководством поmanaging DigitalOcean Spaces with s3cmd. Вы также можете ознакомиться с нашими руководствами поHow To Automate Backups with DigitalOcean Spaces иHow To Backup Your Git Repository To DigitalOcean Spaces, чтобы увидеть больше примеров сценариев автоматизации и параметров резервного копирования. Наконец, для получения дополнительной информации об оптимизации использования Spaces ознакомьтесь сBest Practices for Performance on DigitalOcean Spaces.

Related