Перейти к содержимому

Плагины для S3-хранилищ WordPress

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

Здесь — сравнение плагинов, которые реализуют offload медиа в S3.

ХарактеристикаS3 Uploads (Human Made)WP Offload MediaMedia CloudNext3 OffloadInfinite Uploads
ЦенаБесплатно (MIT)Lite бесплатно / Pro от $50/годFreemiumПлатныйSaaS от $9/мес
ИнтерфейсWP-CLI + wp-configАдминка (UI)Админка (UI)Админка (UI)Админка + SaaS
S3-провайдерыЛюбые S3-совместимыеAWS S3, DO Spaces, GCSAWS S3, GCS, DO, WasabiAWS S3, DO, WasabiСвой CDN + S3
Yandex / Selectel✅ Через endpointЧерез кастомный endpoint
CDN из коробки❌ Отдельно✅ Pro (CloudFront)✅ Imgix/CDN✅ Встроенный
WP-CLI✅ Полный✅ Pro
Offload CSS/JS❌ Только uploads✅ Pro
Offload существующих✅ wp s3-uploads upload-directory✅ Pro (bulk)
Private files / Signed URL
Multisite✅ Pro✅ Pro
Сложность настройки⭐⭐⭐ Высокая⭐⭐ Средняя⭐⭐ Средняя⭐ Низкая⭐ Низкая
GitHub Stars~800— (закрытый код)— (закрытый)— (закрытый)— (SaaS)

S3 Uploads (Human Made) — выбор для инженерных команд

Заголовок раздела «S3 Uploads (Human Made) — выбор для инженерных команд»

S3 Uploads — это легковесный open-source плагин от Human Made, который полностью заменяет локальную директорию wp-content/uploads на S3-совместимое объектное хранилище. В отличие от WP Offload Media, у него практически нет графического интерфейса — вся настройка через wp-config.php и WP-CLI.

Ключевая философия: минимум «магии», максимум контроля. Идеален для команд, которые хотят предсказуемое поведение и не боятся конфигов.

  • Перехватывает загрузку и чтение медиафайлов через WordPress Media API
  • Работает со всеми размерами миниатюр (thumbnails)
  • Переписывает URL-ы на S3 (опционально, через конфиг)
  • Поддерживает приватные файлы через signed URL (временные ссылки с подписью)
  • Не трогает CSS/JS темы — работает только с uploads
  • Высоконагруженные сайты с несколькими веб-нодами (stateless)
  • Kubernetes / Docker Swarm / автоскейлинг
  • Экономия на egress — часто используют с Cloudflare R2 (ноль за исходящий трафик)
  • Приватные файлы (курсы, LMS, документы) через signed URL
  • Миграции — медиа не нужно копировать, достаточно подключить бакет
  • Локальная разработка — плагин можно отключить одной константой

Плюсы:

  • Полностью open-source (MIT-лицензия)
  • Лёгкий — никакого лишнего кода и интерфейса
  • WP-CLI для миграции и верификации
  • Работает с любым S3-совместимым хранилищем через endpoint
  • Предсказуемое поведение — никаких неожиданных побочных эффектов

Ограничения:

  • Нет админки — всё через конфиги и консоль
  • Нужно руками настроить IAM, бакет, права
  • Нет встроенного CDN — нужно настраивать отдельно
  • Для новичков проще WP Offload Media
Окно терминала
# В консоли облачного провайдера:
# - Создать бакет (например, my-site-uploads)
# - Создать IAM-пользователя с правами s3:GetObject, s3:PutObject, s3:DeleteObject, s3:ListBucket
# - Записать Access Key ID и Secret Access Key

Рекомендуется через Composer:

Окно терминала
composer require humanmade/s3-uploads

Или скачать с GitHub и поместить в wp-content/plugins/s3-uploads/, затем активировать:

Окно терминала
wp plugin activate s3-uploads
// Базовые константы (обязательные)
define('S3_UPLOADS_BUCKET', 'my-site-uploads');
define('S3_UPLOADS_REGION', 'eu-central-1'); // или ru-central1 для Yandex
define('S3_UPLOADS_KEY', 'AKIAIOSFODNN7EXAMPLE');
define('S3_UPLOADS_SECRET', 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY');
// Опционально
define('S3_UPLOADS_BUCKET_URL', 'https://my-site-uploads.s3.eu-central-1.amazonaws.com');
define('S3_UPLOADS_USE_INSTANCE_PROFILE', false); // для EC2 IAM-ролей

Для S3-совместимых провайдеров, отличных от AWS, нужно задать endpoint через mu-plugin:

wp-content/mu-plugins/s3-endpoint.php
add_filter('s3_uploads_s3_client_params', function($params) {
$params['endpoint'] = 'https://storage.yandexcloud.net'; // Yandex Object Storage
// $params['endpoint'] = 'https://s3.selcdn.ru'; // Selectel
// $params['endpoint'] = 'https://<account>.r2.cloudflarestorage.com'; // Cloudflare R2
$params['use_path_style_endpoint'] = true;
return $params;
});
Окно терминала
# Загрузить локальный uploads в бакет
wp s3-uploads upload-directory wp-content/uploads uploads --verbose
# Проверить целостность
wp s3-uploads verify
# Проверить, что плагин активен
wp s3-uploads is-installed

Чтобы отключить S3 на локальной среде:

if (defined('WP_ENV') && WP_ENV === 'local') {
define('S3_UPLOADS_USE_LOCAL', true);
}

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

  • Lite (бесплатно) — базовый offload в S3, URL-rewriting
  • Pro (платно, от $50/год) — CDN, offload CSS/JS/шрифтов, существующая медиатека, multisite
  • Amazon S3
  • Amazon CloudFront (CDN)
  • DigitalOcean Spaces
  • Google Cloud Storage
  • Любое S3-совместимое через кастомный endpoint
ФункцияLitePro
Offload новых файлов в S3
URL-rewriting (замена ссылок)
Удаление локальных копий
Offload существующей медиатеки
Offload CSS, JS, шрифтов
CDN-интеграция (CloudFront)
Multisite
WP-CLI команды
  1. Зайти в AWS Console → IAM → Users
  2. Create user → имя (например wp-offload)
  3. Attach policies directly → выбрать AmazonS3FullAccess
  4. Создать access key: Security credentialsCreate access keyApplication running outside AWS
  5. Скачать .csv с Access Key ID и Secret Access Key
Окно терминала
# Через админку: Plugins → Add New → "WP Offload Media Lite"
# Или WP-CLI:
wp plugin install amazon-s3-and-cloudfront --activate
  1. WP Offload Media → Settings
  2. Выбрать Amazon S3 как Storage Provider
  3. Ввести Access Key ID и Secret Access Key
  4. Выбрать бакет (создастся автоматически или выбрать существующий)
  5. Настроить URL: либо S3-URL, либо свой домен/CDN

4. Определение ключей через wp-config (рекомендуется)

Заголовок раздела «4. Определение ключей через wp-config (рекомендуется)»
define('AS3CF_SETTINGS', serialize(array(
'provider' => 'aws',
'access-key-id' => 'AKIAIOSFODNN7EXAMPLE',
'secret-access-key' => 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY',
)));

Это безопаснее, чем хранить ключи в базе данных.

В Pro-версии: WP Offload Media → Media Library → Offload Now — массовый перенос всех существующих файлов в S3.

  1. В AWS Console создать CloudFront Distribution
  2. Указать S3-бакет как Origin
  3. В WP Offload Media Settings → Delivery → включить CloudFront
  4. Указать CloudFront Domain (например d123.cloudfront.net)

После этого URL-ы медиафайлов будут заменены на CDN-домен — изображения отдаются с ближайшего edge-узла.

  • IAM-роль вместо ключей — если сайт на AWS EC2, используйте IAM-роль с привязанной политикой. Не храните ключи в базе
  • CDN обязателен — S3 не оптимизирован для отдачи конечным пользователям. CloudFront или Cloudflare снижают latency и стоимость egress
  • Оптимизация изображений до offload — сжимайте изображения плагином (EWWW, Smush) до отправки в S3
  • Мониторинг затрат — следите за egress-трафиком в AWS Billing. S3-хранение дёшево, исходящий трафик — нет
  • Cloudflare R2 как альтернатива — бесплатный egress, совместим с S3 API

Когда брать:

  • Нужен UI в админке
  • Сайт на AWS (IAM-роли упрощают настройку)
  • Нужен offload CSS/JS/шрифтов (Pro)
  • Важна интеграция с CloudFront
  • Поддержка multisite

Когда НЕ брать:

  • Бюджет не позволяет Pro (базовый offload существующих файлов — только в Pro)
  • Нужен российский S3-провайдер с endpoint (Lite не поддерживает)
ОшибкаПричинаРешение
Изображения не грузятсяБакет приватныйВключить public access на бакете
CORS-ошибки в админкеНет CORS-заголовковНастроить CORS на бакете
403 Forbidden из S3Неверные права IAMПроверить IAM-политику
Двойное списание за egressНет CDNНастроить CloudFront

Media Cloud — плагин с автоматизацией и интеграцией Imgix для on-the-fly обработки изображений.

Когда брать:

  • Очень большая медиатека (50K+ файлов)
  • Нужна интеграция с Imgix для on-the-fly обработки
  • Требуется автоматическая оптимизация изображений

Когда брать:

  • Нужен простой UI и минимум настроек
  • Важна встроенная оптимизация изображений и WebP
  • Бюджет позволяет платный плагин

Когда брать:

  • Не хочется настраивать AWS/S3 вообще
  • Нужен встроенный CDN
  • Прозрачный биллинг без сюрпризов ($9/мес, unlimited sites)

АспектS3 UploadsWP Offload MediaДругие
ФилософияИнженерный минимализмProduct-ready UXКоммерческий all-in-one
КонфигурацияКод и консольАдминкаАдминка
ЗависимостиТолько плагин + ComposerПлагин + ключи в БД/configПлагин + ключи
ГибкостьМаксимальная (кастомные endpoint, signed URL)Высокая (addons)Средняя (что дали, то и есть)
БезопасностьКлючи только в wp-configКлючи в БД или wp-configКлючи в БД

Для проектов с аудиторией в РФ особенно актуальны:

  1. S3 Uploads + Yandex Object Storage — бесплатно, endpoint-конфиг, российские ЦОД
  2. S3 Uploads + Selectel Object Storage — дешёвое холодное хранение, интеграция с Selectel CDN
  3. WP Offload Media Lite + кастомный endpoint — если нужен UI, но придётся настраивать endpoint

Подробнее о провайдерах — S3-провайдеры для WordPress.

Пошаговое руководство по настройке — Настройка S3-хранилища для WordPress.