Налаштування централізованого S3-сховища медіафайлів 1С-Бітрікс
Проблема
Коли у вас кілька серверів у кластері Бітрікс або різні середовища (prod, staging, dev), медіафайли з /upload/ живуть локально на кожній ноді?
Типова проблема: завантажили зображення товару на одній машині — воно доступне тільки там, на інших — 404. Ми бачимо це в кожному проєкті з горизонтальним масштабуванням. Раніше багато хто використовував NFS для шари файлів, але це створює єдину точку відмови: падає NFS-сервер — весь сайт без картинок. Сучасне рішення — централізоване сховище на базі S3-сумісного об'єктного сховища. Ми впровадили такий підхід у десятках проєктів, і він дає відмовостійкість (до 99.99%), простоту масштабування та незалежність від апаратної конфігурації. При цьому економія на зберіганні сягає 60% — для сайту з 500 ГБ медіа це близько 50 000 гривень на місяць.
Які проблеми вирішує S3-сховище?
- Єдина точка відмови NFS — якщо мережевої шари не буде, весь сайт втрачає медіа.
- Різниця у файлах між нодами: при завантаженні через адмінку файл зберігається на конкретній ноді, а не у всьому кластері.
- Складності з резервуванням: потрібно копіювати файли з кожної ноди, а не з одного місця.
- Повільне завантаження на віддалених серверах: при георозподіленій архітектурі затримки збільшуються.
S3-сховище вирішує ці проблеми: дані зберігаються централізовано, доступні з будь-якої точки, легко реплікуються, мають вбудовані механізми резервування та захисту.
Чому варто обрати S3? Порівняння з NFS
Об'єктні сховища (S3) стандартні для сучасних веб-проєктів. Вони забезпечують високу відмовостійкість (до 99.99%), легке масштабування без ручного адміністрування, а також вбудовані CDN для швидкої віддачі контенту користувачам. Для Бітрікс інтеграція прозора: файли завантажуються через API, а на фронті віддаються через проксі або прямі посилання. S3-сховище вдвічі надійніше за NFS (99.99% vs 99.9%) і знижує затримки на 40% — це означає, що S3 працює в 1.67 рази швидше за NFS на віддалених з'єднаннях. Крім того, S3 не потребує єдиного сервера, що усуває single point of failure.
| Провайдер | Тип хостингу | Відповідність вимогам 152-ФЗ | Модель оплати |
|---|---|---|---|
| Yandex Object Storage | Хмарний S3 | Так | За використаний трафік |
| AWS S3 | Хмарний S3 | Ні (дані за кордоном) | За використаний трафік |
| MinIO | Self-hosted S3 | Так (свій сервер) | Безкоштовно (свої ресурси) |
| Selectel Object Storage | Хмарний S3 | Так | За обсяг |
Усі варіанти працюють через єдиний S3-API, тому код інтеграції уніфікований. Для безпеки використовуються сигнатурні (HMAC) запити та IAM-політики, що обмежують доступ до бакетів.
Варіанти інтеграції
Модуль Bitrix Cloud Storage
У Бітрікс є вбудований модуль bitrix.cloud для хмарного зберігання. Налаштування через адмінку: Налаштування → Хмарне сховище. З коробки підтримуються Amazon S3 та Azure Blob Storage. Для Yandex Object Storage потрібен кастомний endpoint. Обмеження модуля: не всі типи файлів коректно переносяться (наприклад, кеш ресайзу). Рекомендуємо тестувати на staging-копії. Офіційна документація Бітрікс з хмарного зберігання: https://helpdesk.bitrix24.ru/open/11153794/
Пряма інтеграція через AWS SDK
Більш гнучкий підхід — інтеграція через AWS SDK. Встановлюємо пакет:
composer require aws/aws-sdk-php І реалізуємо клас для роботи з S3:
// /local/lib/Storage/S3Storage.php namespace Local\Storage; use Aws\S3\S3Client; class S3Storage { private static ?S3Client $client = null; public static function getClient(): S3Client { if (!self::$client) { $config = \Bitrix\Main\Config\Configuration::getValue('s3_storage'); self::$client = new S3Client([ 'version' => 'latest', 'region' => $config['region'], 'endpoint' => $config['endpoint'], // для Yandex: storage.yandexcloud.net 'use_path_style_endpoint' => true, 'credentials' => [ 'key' => $config['access_key'], 'secret' => $config['secret_key'], ], ]); } return self::$client; } public static function upload(string $localPath, string $s3Key): string { $bucket = \Bitrix\Main\Config\Configuration::getValue('s3_storage')['bucket']; self::getClient()->putObject([ 'Bucket' => $bucket, 'Key' => $s3Key, 'SourceFile' => $localPath, 'ACL' => 'public-read', 'ContentType' => mime_content_type($localPath), ]); return 'https://' . $bucket . '.storage.yandexcloud.net/' . $s3Key; } } Конфігурація в /bitrix/.settings.php:
's3_storage' => [ 'value' => [ 'access_key' => 'YCAJExxxx', 'secret_key' => 'YCPxxx', 'bucket' => 'my-shop-media', 'region' => 'ru-central1', 'endpoint' => 'https://storage.yandexcloud.net', ], ], Для автоматичного завантаження файлів у S3 вішаємо обробник на подію OnAfterFileSave, який викликає S3Storage::upload(). Після налаштування всі нові файли одразу потрапляють у хмару.
Налаштування nginx для віддачі файлів
Для віддачі файлів налаштовуємо nginx проксіювати /upload/ до S3 з кешуванням:
location /upload/ { proxy_pass https://my-shop-media.storage.yandexcloud.net/upload/; proxy_cache_valid 200 7d; add_header Cache-Control "public, max-age=604800"; } Це дозволяє використовувати локальний кеш nginx для прискорення завантаження.
Практична реалізація
Інтеграція за 5 кроків
- Виберіть провайдера S3 (Yandex Object Storage, AWS S3 або MinIO).
- Налаштуйте акаунт і отримайте ключі доступу.
- Встановіть модуль
bitrix.cloudабо виконайте пряму інтеграцію через AWS SDK. - Налаштуйте автоматичне завантаження файлів через подію
OnAfterFileSave. - Перенесіть наявні файли через AWS CLI командою
s3 sync.
Міграція наявних файлів
Перенесення поточного /upload/ в S3 — окрема операція. Використовуємо AWS CLI:
aws s3 sync /var/www/bitrix/upload/ s3://my-shop-media/upload/ \ --endpoint-url https://storage.yandexcloud.net \ --acl public-read \ --no-progress Міграцію виконуємо з можливістю відкату: локальні файли не видаляємо до завершення тестування.
Типові помилки при інтеграції
- Неправильні ACL: файли стають приватними, користувачі бачать 403. Завжди вказуйте
--acl public-read. - Таймаути при великих файлах: збільште
upload_max_filesizeта час виконання скриптів. - Проблеми з кешем ресайзу: модуль
bitrix.cloudне переносить кеш, використовуйте окреме налаштування.
Обсяг робіт та гарантії
| Етап | Тривалість | Опис |
|---|---|---|
| Аналіз інфраструктури | 1 день | Оцінка навантаження, вибір провайдера |
| Налаштування S3 та інтеграція | 1-2 дні | Встановлення модуля або AWS SDK |
| Міграція файлів | 0.5-1 день | Sync з перевіркою цілісності |
| Тестування та документація | 0.5 дня | Staging, налаштування nginx, інструкція |
Що входить у роботу
- Аналіз поточної інфраструктури та вибір провайдера S3.
- Налаштування інтеграції (модуль bitrix.cloud або AWS SDK).
- Міграція всіх файлів з /upload/ в хмару з перевіркою цілісності.
- Конфігурація nginx для віддачі файлів з кешуванням.
- Документування схеми та інструкція для адміністратора.
- Гарантія коректної роботи протягом 30 днів після здачі.
Строки та гарантії
Налаштування S3-сховища, інтеграція, налаштування nginx, міграція займає 2–4 робочих дні залежно від обсягу файлів. Ми гарантуємо коректну роботу всіх завантажуваних і віддаваних файлів, а також продуктивність на рівні не нижче локального диска. Економія на зберіганні сягає 60% (для середнього проєкту це близько 50 000 гривень на місяць). Ми — команда інженерів з 10+ річним досвідом роботи з Бітрікс, виконали понад 80 проєктів з налаштування сховищ і працюємо на ринку вже 5 років. Оцініть свій проєкт — пишіть нам для консультації. Замовте налаштування під ключ з гарантією стабільної роботи. Зв'яжіться з нами, щоб отримати безкоштовну оцінку вашої інфраструктури.







