В продолжение перевода своих ресурсов в облака следующим этапом необходимо настроить хранение медиафайлов WordPress в хранилище S3 в облаке Cloud.ru. Задача довольно типовая, но есть нюансы, которые мы подробно разберём.
Прежде всего зарегистрируем сервисный ключ доступа к S3-хранилищу и собственно само хранилище
И кстати, обратите внимание, что у Cloud.ru первые 10 ГБ не тарифицируются — это отличная возможность протестировать функционал без лишних затрат.

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

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

Ключ и пароль обязательно сохраняем — их больше нигде не покажут. Лучше сразу записать в менеджер паролей или защищённый файл.
Создание объектного хранилища 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 в облачное хранилище и заменять ссылки на них в контенте.

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

В настройках для 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-домен). Если всё работает, можно смело удалять локальные копии файлов, освобождая место на сервере.




