Резервное копирование данных WordPress в хранилище объектов

Данные сайта WordPress нуждаются в резервном копировании. Эти данные часто неоднородны и включают в себя медиа-ресурсы и файлы базы данных, благодаря чему их хорошо хранить в хранилище объектов. Поскольку такие решения позволяют хранить большое количество неструктурированных данных, в них можно разместить статические активы вашего сайта. Раздельное хранение статических активов может оптимизировать производительность сайта, освобождая пространство и ресурсы на ваших серверах. Если ваш сайт использует динамические активы – ресурсы с высокочастотными запросами или файлы базы данных, которые нуждаются в частой модификации – вы можете использовать блочное хранилище.

Читайте также: Сервисы хранения объектов и блочные сервисы хранения: краткий обзор

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

Требования

Права доступа к WordPress

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

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

Теперь можно настроить права доступа. Передайте права собственности на каталог своему текущему пользователю (в данном мануале пользователь условно называется 8host) и группе www-data:

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

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

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

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

1: Резервное копирование данных с помощью плагинов

Существует множество S3-совместимых плагинов, которые вы можете использовать для резервного копирования вашего сайта WordPress в свое хранилище объектов. Одним из факторов, который следует учитывать при оценке плагинов, является необходимость создать резервные копии файлов базы данных – некоторые из плагинов не предлагают эту возможность. Еще один фактор, который следует иметь в виду, заключается в том, будет ли плагин извлекать ресурсы из других плагинов. Например, если вы используете менеджер документов, вы должны решить, будет ли плагин резервного копирования захватывать созданные им файлы и ресурсы.

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

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

Выполните следующую команду чтобы загрузить бинарный файл в папку 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 для установки плагинов.

Больше о WP-CLI можно найти на сайте WordPress.

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

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

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

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

Установите updraftplus:

wp plugin install updraftplus

Чтобы активировать плагин, введите:

wp plugin activate updraftplus

Теперь можно перейти во вкладку плагинов в левой части панели управления WordPress.

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

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

UpdraftPlus Backup/Restore
Welcome to UpdraftPlus! To make a backup, just press the Backup Now button. […]

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

Если вы хотите проверить, работает ли плагин, вы можете оставить режим Manual. Оставьте эту настройку, чтобы проверить правильность работы плагина.

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

Выбрав этот параметр, вам будет представлено меню, в котором будет запрашиваться информация о вашем хранилище объектов: S3 access key, S3 secret key, S3 location, S3 end-point.

На основе URL вашего хранилища вы сможете определить имя корзины и конечную точку. Например, если URL вашего пространства — https://example-name.nyc3.my-object-storage.com, то example-name – имя корзины, а nyc3.my-object-storage.com – конечная точка. Укажите имя корзины в S3 location, а конечную точку – в S3 end-point.

Ниже вы найдете опции для включения и исключения файлов из резервной копии.

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

˅ Include the database in the backup (…)
˅ Include any files in the backup (…)
˅ Send this backup to remote storage

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

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

2: Резервное копирование данных WordPress с помощью S3cmd

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

Если вы еще не установили s3cmd, обратитесь к мануалу Резервное копирование репозитория Git в хранилище объектов, который поможет вам установить и настроить этот инструмент.

Инструмент s3cmd должен быть установлен на сервер и иметь в настройках информацию о вашем хранилище. Чтобы проверить настройку s3cmd, введите:

s3cmd --dump-config

Вы должны увидеть такой вывод:

[default]
access_key = Your_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 и убедились, что они соответствуют учетным данным хранилища, вы можете использовать s3cmd для резервного копирования файлов в хранилище объектов. Сначала мы покажем, как сделать это вручную, а затем рассмотрим сценарий, который автоматизирует эту задачу.

Резервное копирование папки wp-content/uploads вручную

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

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

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

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

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

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

mkdir ~/mysqldmp

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

nano ~/.my.cnf

В файле укажите имя пользователя и пароль клиента MySQL:

[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://8host-bucket/8host-backups/

Проверьте свою корзину и убедитесь, что в ней есть файлы.

3: Автоматизация резервного копирования данных WordPress

Автоматизация резервного копирования гарантирует, что данные WordPress будут всегда доступны и их можно будет восстановить. Конечно, копии можно создавать вручную, но это трудоемкий процесс, потому его лучше автоматизировать с помощью планировщика заданий cron.

Читайте также: Планирование рутинных задач Linux при помощи Cron и Anacron

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

nano ~/wp-sync.sh

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

#!/bin/bash

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

...
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/8host/mysqldmp

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

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

...
DATE=$(date +%y%m%d-%H_%M_%S)
S3_CMD="/usr/local/bin/s3cmd"
S3_BUCKET=s3://8host-bucket/8host-backups/$DATE/

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

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

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

Затем нужно создать цикл for для запуска s3cmd sync для копирования файлов базы данных. Снова используйте mysqldump для создания сжатого файла базы данных, но теперь добавьте параметр —defaults-extra-file, который позволяет mysqldump прочитать файл .my.cnf в дополнение к стандартным файлам. Также нужно итерировать массив базы данных, чтобы повторить один и тот же набор действий в каждой БД:

...
for DB in "${DATABASE[@]}"
do
mysqldump --defaults-extra-file=/home/8host/.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 нужно итерировать, чтобы повторить один и тот же набор действий в каждом каталоге:

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

Команда s3cmd sync идентична той, которую вы использовали для резервного копирования этого каталога вручную. Разница – только метка времени.

Полный код сценария выглядит так:

#!/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/8host/mysqldmp
DATE=$(date +%y%m%d-%H_%M_%S)
S3_CMD="/usr/local/bin/s3cmd"
S3_BUCKET=s3://8host-bucket/8host-backups/$DATE/
mkdir -p $BACKUP_DIR
rm -rf "${BACKUP_DIR:?}/*"
for DB in "${DATABASE[@]}"
do
mysqldump --defaults-extra-file=/home/8host/.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

Сделайте сценарий исполняемым:

chmod +x ~/wp-sync.sh

Чтобы протестировать его, введите:

sudo ~/wp-sync.sh

Перейдите в хранилище и убедитесь, что в нем появились копии файлов. После этого можно отредактировать файл 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 * * * * /home/8host/wp-sync.sh

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

Заключение

Теперь вы знаете, как копировать данные WordPress в s3-совместимое хранилище объектов.

Читайте также:

Tags: , , ,