Налаштування S3-сумісного сховища для 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Налаштування S3-сумісного сховища для 1С-Бітрікс
Проста
~1 робочий день
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Конфігурація S3-сумісного сховища для 1С-Бітрікс

Диск на сервері закінчується. Або потрібно рознести на кілька серверів і синхронізувати завантажені файли між ними. Перенесення /upload/ на S3-сумісне сховище (MinIO, Selectel, VK Cloud, Cloudflare R2) вирішує обидві задачі — але тільки якщо настроїти правильно, інакше Бітрікс почне записувати шляхи до файлів неправильно.

Модуль main.cloudstorages

Бітрікс підтримує хмарні сховища через модуль main.cloudstorages. Він абстрагує роботу з файлами через провайдерів. Для S3-сумісних сховищ використовується провайдер amazon (сумісність на рівні API S3).

Настройка провайдера виробляється в /bitrix/admin/main_cloud_storage.php. Параметри для S3-сумісного сховища:

  • Endpoint URL — URL сервісу (для MinIO: http://minio:9000, для Selectel: https://s3.selectel.ru)
  • Key — Access Key ID
  • Secret — Secret Access Key
  • Bucket — назва бакету
  • Region — регіон (для кастомних S3 часто us-east-1)

Конфігурація в коді (для автоматизації настройки):

\Bitrix\Main\Config\Option::set('main', 'cloud_storage_active', 'Y');
\Bitrix\Main\Config\Option::set('main', 'cloud_storage_provider', 'amazon');
\Bitrix\Main\Config\Option::set('main', 'cloud_storage_endpoint', 'https://s3.example.com');
\Bitrix\Main\Config\Option::set('main', 'cloud_storage_access_key', 'ACCESS_KEY');
\Bitrix\Main\Config\Option::set('main', 'cloud_storage_secret_key', 'SECRET_KEY');
\Bitrix\Main\Config\Option::set('main', 'cloud_storage_bucket', 'bitrix-uploads');
\Bitrix\Main\Config\Option::set('main', 'cloud_storage_path', 'upload/');

Path style vs virtual hosted style

Найчастіша проблема при підключенні не-AWS S3 — неверна адресація бакету. AWS використовує virtual hosted style: https://bucket.s3.amazonaws.com/key. Більшість S3-сумісних сервісів підтримують path style: https://s3.example.com/bucket/key.

Стандартний модуль Бітрікса використовує virtual hosted style. Для сервісів, які його не підтримують (наприклад, MinIO в локальній мережі без wildcard DNS), потрібно патчити клас провайдера /bitrix/modules/main/lib/cloudstorages/amazon.php — додати параметр use_path_style_endpoint: true при ініціалізації AWS SDK:

$s3Client = new \Aws\S3\S3Client([
    'version'                 => 'latest',
    'region'                  => $region,
    'endpoint'                => $endpoint,
    'use_path_style_endpoint' => true,
    'credentials'             => [
        'key'    => $accessKey,
        'secret' => $secretKey,
    ],
]);

Синхронізація існуючих файлів

Після підключення сховища Бітрікс починає завантажувати нові файли на S3, але старі залишаються локально. Для міграції використовується вбудована утиліта: /bitrix/admin/main_cloud_copy.php. Вона запускає агент, який пакетами переносить файли з /upload/ в сховище і оновлює шляхи в b_file.

При перенесенні важливо: поле SUBDIR в b_file зберігає відносний шлях файла. Після міграції на S3 шляхи стають URL-адресами бакету. Якщо міграція переривається на середині, частина файлів буде на S3, частина — локально. Бітрікс визначає джерело файла за полем EXTERNAL_ID в b_file — якщо воно заповнено, файл вважається хмарним.

Публічний доступ та CDN

Файли в S3 мають бути публічно доступні для прямих посилань на зображення. Настройка політики бакету для публічного читання:

{
    "Version": "2012-10-17",
    "Statement": [{
        "Effect": "Allow",
        "Principal": "*",
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::bitrix-uploads/*"
    }]
}

Для підключення CDN перед бакетом (CloudFront, Cloudflare) в настройках модуля вказується параметр CDN_URL — Бітрікс буде формувати публічні URL через CDN, а запис на S3 буде йти напрямку.

Кеш та тимчасові файли

Директорію /bitrix/cache/ переносити на S3 неможна — це деградує продуктивність. Кеш має залишатися локальним або на швидкому мережевому сховищі (NFS, Redis для керованого кеша). На S3 переносяться тільки /upload/ — користувацький контент.