Налаштування Яндекс Object Storage для 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Налаштування Яндекс Object Storage для 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

Конфігурація Яндекс Object Storage для 1С-Бітрікс

Яндекс Object Storage — S3-сумісне сховище, але з кількома відмінностями від AWS, які ломають стандартну S3-інтеграцію Бітрікса. Endpoint не amazonaws.com, регіон завжди ru-central1, а URL бакету має власний формат.

Параметри підключення

Endpoint Яндекс Object Storage: https://storage.yandexcloud.net. Регіон: ru-central1. URL публічного доступу до файлів: https://[bucket].storage.yandexcloud.net/[key] — virtual hosted style.

В /bitrix/admin/main_cloud_storage.php:

  • Тип сховища: Amazon S3 (сумісне)
  • Endpoint: https://storage.yandexcloud.net
  • Region: ru-central1
  • Access Key: ідентифікатор статичного ключа з консолі Яндекс.Облако
  • Secret Key: секретний ключ
  • Bucket: назва бакету

Створення сервісного аккаунту та ключів — в консолі Яндекс.Облако: IAM → Сервісні аккаунти → Створити → Видати роль storage.editor на бакет → Створити статичний ключ доступу.

Розходження з модулем Бітрікса

Модуль main.cloudstorages у Бітриксі використовує AWS SDK PHP. При підключенні до Яндекс Object Storage через цей SDK виникає проблема зі Signature Version. Яндекс підтримує тільки AWS Signature Version 4 (SigV4), а SDK для кастомних endpoint може намагатися використовувати SigV2. Явне вказання версії підпису:

// Клас /bitrix/modules/main/lib/cloudstorages/amazon.php
$s3Client = new \Aws\S3\S3Client([
    'version'       => 'latest',
    'region'        => 'ru-central1',
    'endpoint'      => 'https://storage.yandexcloud.net',
    'signature'     => 'v4',
    'credentials'   => [
        'key'    => $accessKey,
        'secret' => $secretKey,
    ],
]);

Якщо модуль не дозволяє передати параметр signature через інтерфейс, редагується клас-провайдер з бэкапом — або застосовується патч через наслідування.

CORS для завантаження з браузера

При використанні прямого завантаження в Object Storage з браузера (presigned URL) необхідна CORS-конфігурація бакету. В консолі Яндекс.Облако, розділ "CORS":

<CORSConfiguration>
  <CORSRule>
    <AllowedOrigin>https://example.com</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>PUT</AllowedMethod>
    <AllowedHeader>*</AllowedHeader>
    <MaxAgeSeconds>3600</MaxAgeSeconds>
  </CORSRule>
</CORSConfiguration>

Без CORS браузер блокує завантаження файлів з редактора TinyMCE або кастомних форм завантаження.

Lifecycle-політики для тимчасових файлів

У Яндекс Object Storage підтримуються lifecycle-правила — автоматичне видалення файлів старше N днів. Це корисно для тимчасових файлів імпорту/експорту, які Бітрікс складає в /upload/tmp/ та /upload/import/. Настройка в консолі або через API:

{
    "Rules": [{
        "ID": "cleanup-tmp",
        "Status": "Enabled",
        "Filter": { "Prefix": "upload/tmp/" },
        "Expiration": { "Days": 7 }
    }]
}

Настройка CDN

Яндекс Cloud CDN інтегрується з Object Storage за дві хвилини: створити CDN-ресурс з джерелом — бакет Object Storage, вказати домен CDN в настройках модуля main.cloudstorages як CDN_URL. Після цього Бітрікс формує публічні URL через CDN, а файли розповсюджуються з найближчої точки присутності.

Параметр в настройках модуля:

\Bitrix\Main\Config\Option::set('main', 'cloud_storage_cdn_url', 'https://cdn.example.com');

При цьому запис файлів йде напрямку в бакет, а читання — через CDN. Для Бітрікксового кеша ресайзів зображень це дає помітний приріст швидкості завантаження сторінок каталога.