Подключение облачного объектного хранилища (S3) в WordPress и настройка хранения изображений в нем

Подключение S3 в WordPress

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

В данной статье мы будем использовать плагин S3-Uploads, поскольку он бесплатно предоставляет возможности миграции и настройки хранения медиафайлов WordPress в S3-совместимых облачных хранилищах, однако для работы с самим плагином потребуется использование командной строки. Есть и другие плагины (например, WP Media Offload), но они могут ограничивать функционал плагина в бесплатной версии – к примеру, количество загружаемых файлов или возможность миграции файлов в объектное хранилище.

Установка и настройка плагина

Мы разработали видеоинструкцию, где в удобном формате объяснили, как настроить отдачу изображений из S3 для WordPress.

Смотреть видеоинструкцию

Перед настройкой плагина настоятельно рекомендуется создать резервную копию сайта, подробно процесс описан в нашем руководстве.

Для установки плагина подключитесь к серверу, на котором расположен сайт, по SSH либо воспользуйтесь терминалом в панели управления. Перейдите в директорию сайта командой cd <путь до директории сайта>, например:

cd ~/betutorial.ru/public_html

Перейдите в директорию плагинов сайта:

cd wp-content/plugins

Создайте директорию плагина командой:

mkdir s3-uploads

Перейдите в нее:

cd s3-uploads

Загрузите архив с плагином со страницы плагина:

wget https://github.com/humanmade/S3-Uploads/releases/download/3.0.7/manual-install.zip

Распакуйте и удалите архив:

unzip manual-install.zip
rm manual-install.zip

Перейдите в директорию wp-content:

cd ../..

Создайте директорию mu-plugins, если ее еще нет:

mkdir -p mu-plugins

После чего создайте файл mu-plugins/s3-endpoint.php:

<?php
// Filter S3 Uploads params.
add_filter( 's3_uploads_s3_client_params', function ( $params ) {
	$params['endpoint'] = 'https://s3.ru1.storage.beget.cloud';
	$params['use_path_style_endpoint'] = true;
	$params['debug'] = false; // Set to true if uploads are failing.
	return $params;
} );

Затем перейдите в public_html:

cd ~/betutorial.ru/public_html

Откройте файл wp-config.php для редактирования удобным вам текстовым редактором, например, vim:

vim wp-config.php

После строки /* Произвольные значения добавляйте между этой строкой и надписью "дальше не редактируем". */ добавьте следующие строки:

define( 'S3_UPLOADS_BUCKET', '<bucket_name>' );
define( 'S3_UPLOADS_REGION', '<region>' );
define( 'S3_UPLOADS_KEY', '<access_key>' );
define( 'S3_UPLOADS_SECRET', '<secret_key>' );
define( 'S3_UPLOADS_BUCKET_URL', '<public_url>' );

Скорректируйте значения в соответствии с данными, указанными на странице объектного хранилища:

  • 'S3_UPLOADS_BUCKET' – название бакета, указанное в реквизитах доступа
  • 'S3_UPLOADS_REGION' – регион бакета, для российской локации ru1
  • 'S3_UPLOADS_KEY' – Access key, указанный в реквизитах доступа
  • 'S3_UPLOADS_SECRET' – Secret key, указанный в реквизитах доступа
  • 'S3_UPLOADS_BUCKET_URL' – Path style, указанный в реквизитах доступа
Обратите внимание!
Плагин задуман как plug-and-play решение и включает перезапись URL и загрузку новых файлов в объектное хранилище сразу после его включения. Для изменения данного поведения вы можете добавить опцию define( 'S3_UPLOADS_AUTOENABLE', false ); в wp-config.php – в таком случае для включения/отключения поведения будут использоваться команды wp s3-uploads enable и wp s3-uploads disable соответственно.

После чего сохраните файл и закройте его. Далее создайте в директории сайта файл wp-cli.yml со следующим содержимым:

require:
  - wp-content/plugins/s3-uploads/inc/class-wp-cli-command.php

Активируйте плагин командой:

wp plugin activate s3-uploads

И проверьте его работу командой:

wp s3-uploads verify

Плагин попробует загрузить и удалить тестовый файл в облачное хранилище:

wp s3-uploads verify
Attempting to upload file s3://f6bcd57c2800-shortsighted-katja/uploads/1168017065.txt
File uploaded to S3 successfully.
Attempting to delete file. s3://f6bcd57c2800-shortsighted-katja/uploads/1168017065.txt
File deleted from S3 successfully.
Success: Looks like your configuration is correct.

Если плагин выведет сообщение об успешной проверке конфигурации, установка плагина завершена. В противном случае убедитесь, что данные подключения указаны корректно в файле wp-config.php.

Миграция существующих файлов в объектное хранилище

Для миграции файлов в облачное хранилище используется команда wp s3-uploads upload-directory <path_to_dir> <s3_dir>

Например, чтобы загрузить директорию wp-content/uploads в облачное хранилище, необходимо выполнить команду:

wp s3-uploads upload-directory wp-content/uploads uploads

Если вам необходимо скопировать определенное изображение WordPress в объектное хранилище, можно воспользоваться командой cp:

wp s3-uploads cp <from> <to>
Обратите внимание!
По умолчанию для всех загрузок в WordPress используется публичная политика – все загруженные изображения WP доступны для всех. Данный плагин следует такой же политике. Если вам необходимо изменить данное поведение, в плагине поддерживается система фильтров для более тонкой настройки, более подробно вы сможете прочитать в документации плагина.

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

Если возникнут вопросы, напишите нам, пожалуйста, тикет из панели управления аккаунта (раздел “Помощь и поддержка”), а если вы захотите обсудить, как получить изображение WordPress, настроив отдачу из S3, с коллегами по цеху и сотрудниками Бегета – ждем вас в нашем сообществе в Telegram.

4
1029