Вступление
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. Если нет, вы можете настроить следующее:
-
Один сервер Ubuntu 16.04, настроенный в соответствии с нашимиInitial Server Setup with Ubuntu 16.04 tutorial.
-
Стек LAMP, установленный на вашем сервере в соответствии с нашим руководством поHow To Install Linux, Apache, MySQL, PHP (LAMP) stack on Ubuntu 16.04.
-
WordPress, установленный на вашем сервере в соответствии с нашим руководством поHow To Install WordPress with LAMP on Ubuntu 16.04.
-
Ключ DigitalOcean Space и API, созданный следующим образомHow To Create a DigitalOcean Space and API Key.
Имея эти предварительные условия, мы можем начать резервное копирование сайта 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:
ВыбравInstalled Plugins, мы перейдем на страницу со списком установленных плагинов. Мы должны увидетьUpdraftPlus - Backup/Restore в списке доступных опций:
Чтобы настроить параметры резервного копирования, перейдите на вкладкуSettings на панели управления администратора и выберитеUpdraftPlus Backups из списка доступных параметров. Будет экран посадки, который выглядит следующим образом:
Мы расскажем, как сделать базовое резервное копирование сайта с помощью этого плагина. На вкладкеSettings вверху страницы вы найдете меню, которое позволяет вам планировать резервное копирование:
Если вы хотите проверить, работает ли плагин, вы можете оставить для этого параметра значениеManual. Мы пока сохраним этот параметр, чтобы проверить, что плагин работает правильно.
Под этим меню вы увидите различные параметры удаленного хранилища. ВыберитеS3-Compatible (Generic):
После выбора этой опции вам будет предложено меню, которое запрашивает информацию о вашем DigitalOcean Space:
Основываясь на URL своего пространства, вы сможете определить его имя и конечную точку. Например, если URL-адрес вашего пространстваhttps://example-name.nyc3.digitaloceanspaces.com
, тоexample-name
будет вашим сегментом, аnyc3.digitaloceanspaces.com
будет вашей конечной точкой. S3 location будет именем вашего сегмента, аS3 end-point будет вашей конечной точкой.
Ниже вы найдете параметры для файлов, которые нужно включать и исключать из резервной копии:
После того, как вы заполнили эти настройки, чтобы отразить то, что вы хотите сохранить, вы можете вернуться на вкладкуCurrent Status. Когда вы выбираетеBackup Now из доступных кнопок в верхней части экрана, вам будет представлено следующее меню:
Здесь вы можете выбрать, хотите ли вы сделать резервную копию вашей базы данных.
После того, как вы выбрали опцию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.