Оптимизация хранения медиафайлов WordPress: перенос в облачное S3-хранилище Cloud.ru

Оцените статью

В продолжение перевода своих ресурсов в облака следующим этапом необходимо настроить хранение медиафайлов WordPress в хранилище S3 в облаке Cloud.ru. Задача довольно типовая, но есть нюансы, которые мы подробно разберём.

Прежде всего зарегистрируем сервисный ключ доступа к S3-хранилищу и собственно само хранилище

И кстати, обратите внимание, что у Cloud.ru первые 10 ГБ не тарифицируются — это отличная возможность протестировать функционал без лишних затрат.

Сервисный аккаунт S3

Задаём осмысленное наименование аккаунта, описание на будущее и уровень аккаунта (Организация). Рекомендуется использовать понятные имена, чтобы через несколько месяцев не гадать, для чего был создан тот или иной аккаунт.

Ограниченные права доступа

Назначаем ограниченные права доступа — только на работу с хранилищем и доступ на чтение-запись. Это повышает безопасность: даже если ключ скомпрометируют, злоумышленник не сможет управлять другими сервисами.

Создание ключа доступа

Ключ и пароль обязательно сохраняем — их больше нигде не покажут. Лучше сразу записать в менеджер паролей или защищённый файл.

Создание объектного хранилища S3

Переходим в раздел Evolution → Object Storage.

Создать бакет

Создаём бакет. Обязательно обратите внимание на требования к глобальному наименованию: оно должно быть уникальным в рамках всего облака и соответствовать правилам DNS (только латиница, цифры, дефисы, без точек в конце).

Данные доступа к бакету

Получаем данные по доступу к бакету в разделе Object Storage API. Здесь указаны endpoint, регион и другая информация, которая понадобится при настройке плагина.

Настройка внешнего доступа

Настройка внешнего доступа к файлам в формате CDN. Для этого в настройках бакета перейдите в раздел «Хостинг сайта» и выберите «Настройка публичного доступа». CDN (Content Delivery Network) позволит раздавать файлы с высокой скоростью из разных географических точек.

Настройка публичного доступа

Открываем публичный доступ к бакету на чтение для всех объектов. Это необходимо, чтобы посетители вашего сайта могли просматривать изображения и скачивать файлы напрямую из облака.

Открываем публичный доступ к бакету

Назначаем бакету доменное имя в настройках бакета. Например, можно использовать поддомен вашего основного сайта (media.example.com) или отдельный домен, предоставленный Cloud.ru.

Доменное имя бакета

В настройках хостинга сайта задайте «Главную страницу». Это может быть любой файл, иначе хостинг работать не будет. Обычно указывают index.html, но если у вас нет статической страницы, можно создать пустой файл с таким именем.

Задайте главную страницу сайта

Соответственно, файлы будут доступны по адресу https://interlan.s3-website.cloud.ru. Пробуем получить доступ к какому-нибудь тестовому файлу. Если файл открывается в браузере, значит, всё настроено верно, и можно приступать к подключению хранилища к WordPress и переносу медиафайлов.

Подключаем хранилище

Для тестового подключения S3-бакета воспользуемся инструкцией, которую я написал в рамках прохождения курса от Cloud.ru:

Скачиваем и активируем плагин Advanced Media Offloader. Этот плагин позволяет выгружать медиафайлы WordPress в облачное хранилище и заменять ссылки на них в контенте.

Advanced Media Offloader

Переходим в настройки плагина.

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

В настройках для Cloud.ru есть несколько нюансов:

  • Cloud Provider: Any S3‑Compatible Storage (MinIO, OVHcloud, …)
  • Provider Name: S3
  • Access Key ID: Tenant.KEY ID (скопируйте из ранее сохранённого ключа)
  • Secret Access Key: KEY SECRET
  • S3 Endpoint URL: https://s3.cloud.ru
  • Region: Регион размещения бакета (например, ru-msk)
  • Use Path-Style Endpoint: Включено (галочка)
  • Bucket Name: Имя вашего бакета (например, interlan)
  • Custom Domain (CDN URL): CDN-адрес, полученный при задании домена (например, https://interlan.s3-website.cloud.ru)

После сохранения настроек плагин проверит подключение. Если всё введено верно, появится зелёное сообщение об успехе.

Запуск синхронизации из WP-CLI

Для обработки большого количества файлов удобно использовать консольную утилиту wp-cli. Она позволяет выполнять массовые операции без загрузки страниц в браузере. Давайте рассмотрим, как ей пользоваться применительно к докеризованной версии WordPress.

Подключаемся к консоли WP в Docker. Для этого сначала находим интересующий нас контейнер:

 $ docker ps
 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
 0a3bc2fe4013 nginx:alpine "/docker-entrypoint.…" 48 minutes ago Up 2 minutes 0.0.0.0:80->80/tcp, [::]:80->80/tcp, 0.0.0.0:443->443/tcp, [::]:443->443/tcp interlanxyz-nginx-1
 2993eb5bde36 wordpress:latest "docker-entrypoint.s…" 48 minutes ago Up 2 minutes 80/tcp interlanxyz-interlan-wordpress-1
 0c222f7fc7fd redis:alpine "docker-entrypoint.s…" 48 minutes ago Up 2 minutes 6379/tcp interlanxyz-redis-1
 e0cfbc40d482 mysql:8.0 "docker-entrypoint.s…" 48 minutes ago Up 2 minutes 0.0.0.0:3306->3306/tcp, [::]:3306->3306/tcp interlanxyz-mysql-db-1

Подключаемся к интерактивному терминалу контейнера WordPress и переключаемся на пользователя www-data (от его имени работает веб-сервер):

 $ docker exec -it 2993eb5bde36 /bin/bash

Устанавливаем утилиту wp-cli (если она ещё не установлена):

 $ curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
 $ chmod +x wp-cli.phar
 $ mv wp-cli.phar ./wp

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

 $ ./wp advmo offload

Эта команда перенесёт все существующие файлы из папки wp-content/uploads в S3-бакет и обновит ссылки в базе данных. Если файлов очень много, процесс может занять некоторое время — наберитесь терпения.

Все доступные команды плагина можно посмотреть на официальном сайте:

После завершения синхронизации проверьте, что изображения на сайте открываются по новым ссылкам (ведущим на ваш CDN-домен). Если всё работает, можно смело удалять локальные копии файлов, освобождая место на сервере.

Похожие записи

Настройка ProxySQL для распределения запросов в кластере MySQL

В современных высоконагруженных приложениях объём данных и количество запросов к базе данных постоянно растут. Это ставит перед администраторами и разработчиками задачу обеспечения высокой производительности, отказоустойчивости и масштабируемости СУБД. Именно для…

Конфигурация MySQL для микро-vps (минимизация потребления памяти)

Давайте немного поэкспериментируем с Микро-VPS. Из коробки MySQL сконфигурирован для автоматической подстройки под окружение, но на совсем ограниченных ресурсах я стабильно ловлю OOM-Killer и мне это не нравится, а переплачивать…

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Читать еще статьи

Оптимизация хранения медиафайлов WordPress: перенос в облачное S3-хранилище Cloud.ru

Оптимизация хранения медиафайлов WordPress: перенос в облачное S3-хранилище Cloud.ru

Настройка ProxySQL для распределения запросов в кластере MySQL

Настройка ProxySQL для распределения запросов в кластере MySQL

Конфигурация MySQL для микро-vps (минимизация потребления памяти)

Конфигурация MySQL для микро-vps (минимизация потребления памяти)

Подробная инструкция по локальной установке Next Cloud server в Ubuntu 24.04 с использованием Nginx и PHP-FPM

Подробная инструкция по локальной установке Next Cloud server в Ubuntu 24.04 с использованием Nginx и PHP-FPM

Руководство по установке и настройке Gitea: от Docker до локальной инсталляции на Ubuntu 24.04

Руководство по установке и настройке Gitea: от Docker до локальной инсталляции на Ubuntu 24.04

Настройка кластера Kubernetes в Ubuntu Linux 24.04: три узла

Настройка кластера Kubernetes в Ubuntu Linux 24.04: три узла