WebKrasavin / Битрикс / Подключаем Yandex Object Storage к Битрикс

Подключаем Yandex Object Storage к Битрикс

138 прочитали
Подключаем Yandex Object Storage к Битрикс

Пока не так много разработчиков предлагают облачное хранилище. Как я понял, пока облачные хранилища не так популярны в России, но набирают обороты.

Посмотрел статьи в интернетах и не нашел примера подключения Яндекс Облака в Битриксе, но есть старые гайды 2014 годов с подключением Clodo. Что ж, напишу гайд по Яндекс Облаку, а именно Yandex Object Storage.

Плюсы и минусы облачного хранилища

Плюсы

  • Репликация на несколько зон доступности: хранилище в разных географически расположенных местах
  • Посекундная тарификация: используешь 3 мб, 3 гб или 30 гб - платишь только за занятое место, получается намного выгоднее чем держать VDS с запасом, который не используешь. Подробнее о тарификации.
  • Холодное и горячее хранение: если данные нужно только хранить и редко к ним обращаться, это еще дешевле чем стандартное хранение в Object Storage.
  • Бэкапы хранятся не там где вы их делаете: во-первых так хранить небезопасно, а во-вторых в случае отключения основного сервера можете поднять резервный сервер, а бэкапы как раз доступны!
  • Очень высокая степень надежности хранилища УЗ-1, подробнее тут.

Минусы

  • Вместо одного закрывающего документа у одного хостинг-провайдера нужно будет тратить еще минуту на второго: шучу, конечно оно того стоит и это пустяковый минус
  • Минусов не нашел

Подготовка Object Storage

Заходим на сервис, у вас сразу есть дефолтный каталог сервисов, проваливаемся туда нажав на него

У меня уже есть 1 бакет, об этом нас информирует верхняя плашечка. Создадим новый. В списке сервисом жмем на Obgect Storage.

Попадаем в пустой список, создаем новый бакет.

 

Видим страницу параметров для создания бакета.

 

Эти настройки делаем для хранения записей телефонных звонков или бэкапов. Но на стороне битрикса чуть-чуть настройки отличаются. В общем даем название бакету, например crm24-mp3-file-backup чтобы было понятно что у нас там хранится. В общем создали бакет.

Просто создать бакет недостаточно, еще нужно создать статический API ключ для Object Storage, это делается в вкладке "Сервисные аккаунты". Сейчас покажу где это.

Открыв будет пустой список аккаунтов. Создадим новый.

 

Имя можете дать новому аккаунту любое, но только латинскими цифрами и буквами. Называете исходя из задач, так как облако можно использовать по-разному, иметь одного пользователя на все задачи, на несколько или на одну. Я назвал задачу в рамках одной задачи, чтобы было понятно для чего был создан аккаунт.

Добавляете роль, например storage.admin. Создаем. Открываем созданный сервисный аккаунт. Видим кнопку Создать сервисный ключ.

Создаем статический API-ключ, даже пометка есть к чему он подойдет.

В описание ключа пишем подробности, для чего выдан этот ключ, например "Для выгрузки телефонных звонков/бэкапов в Object Storage".

Создаем. И тут важный момент. Ключ доступа нам показывают один раз. Сохраните его в свой KeePass или другую надежную систему хранения доступов, обязательно. Ключ не должен попасть в чужие руки и не должен быть в открытом доступе.

Ключ создали. Идем в Object Storage, где мы создали бакет. Нужно "прикрепить" этот сервисный аккаунт с доступом к бакету.

В списке бакетов жмем на три точки, видим пункт ACL бакета. Жмем.

Выбираем сервисный аккаунт. Выбрали. Справа с кнопкой добавить написано READ. Думаю нет смысла объяснять зачем это. Выбираем FULL_CONTROL.

Жмем напротив Добавить, а только потом Сохранить

Настройка Битрикс

Хранилище настроено. Теперь идём в битрикс чтобы подключить его. Заходим в панель управления Битрикс24 или Битрикс Управление сайтом.

Добавляем облачное хранилище.

Выбираем провайдера Yandex Object Storage.

Используем ключ доступа и секретный ключ которые нам выдали при создании доступа к сервисному аккаунту.

Важно! Вам сразу сгенерировался контейнер в виде upload-блаблаблабла. Если вы создали бакет, указываем имя этого бакета, иначе при подключении вам создадут новый бакет с сгенерированным названием.

Заполнили доступ, но еще НЕ сохраняем.

Есть важная настройка в вкладке Правила.

 

По дефолту при подключенном хранилище у нас попадут туда все файлы, но нам нужно чтобы туда писались записи звонков. Для этого указываем расширение mp3. Я добавил еще mp4 для примера в статье, где указал, что мы хотим отправлять в облачное хранилище файлы весом от 10 мб до 10 гб. В общем, прочитайте информационное сообщение, там расписано что да как. Можно создать отдельный бакет хоть для каждого модуля или один бакет для всех модулей. В списке правил работы с облаком можете хоть все модули указать.

Настроили? Сохраняем.

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

Чтобы протестировать, совершите один звонок с портала на свой личный телефон, поговорите сами с собой, например скажите себе "Я всё смогу, я сделаю это!". Обновите страницу со списком облачных хранилищ, должен поменяться счетчик файлов и их объем.

Файлы ушли в облако, поздравляю. Но это не всё. Бывает что файлы отправляются в облако, но в портале они вдруг стали недоступны.

Эта проблема скорее всего связана с тем, что у вас отсутствует правило для хранилища Yandex Object Storage в конфигурации nginx. При установке BitrixVM это правило туда записывается, но если вы ставили старую версию 7.4.3 и младше, то правила для хранилища Яндекс нет.

Решаем проблему.

Подключаемся по SSH к вашему серверу.

Если у вас BitrixVM, выходим из меню в которое мы попали.

Идем в конфиг nginx.

/etc/nginx/bx/conf/

Открываем файл конфига bitrix_general.conf

Находим секцию location ^~ /upload/bx_cloud_upload/

Видим там правила для разных хранилищ. Вставляем новое правило для Yandex Object Storage в этой секции, в начале или в конце, без разницы.

Само правило:

location ~ ^/upload/bx_cloud_upload/(http[s]?)\.([^/:\s]+)\.storage\.yandexcloud\.net/([^\s]+)$ {
internal;
resolver 8.8.8.8;
proxy_method GET;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Server $host;
#proxy_max_temp_file_size 0;
proxy_pass $1://$2.storage.yandexcloud.net/$3;
}

Сохраняем и перезапускаем nginx.

systemctl restart nginx

Снова проверяем работу CRM, звоним самому себе и пробуем послушать звонок выгруженный в облако. Должно всё работать. Если нужна помощь - пишите мне на почту, может помогу.

P.S. В версии BitrixVM 7.4.4 уже не нужно добавлять эти строки, они там уже должны быть.

Кстати, при подключении к объектному хранилищу, у вас нет контроля над количеством последних бэкапов и размера хранилища, а Object Storage может быть бесконечно-ёмким. Поэтому, рекомендую вам почитать про настройку жизненного цикла Yandex Object Storage, чтобы контролировать количество последних копий, их удаление.

Ctrl
Enter
Заметили ошибку?
Выделите текст и нажмите Ctrl+Enter
0 комментариев
Топ из этой категории
Ошибка recipients bitrix smtpstatus 501 при отправке почты Ошибка recipients bitrix smtpstatus 501 при отправке почты
Исправляем ошибку recipients bitrix smtpstatus 501 в Битрикс. Краткая инструкция с скриншотами....
13.04.22
125
0
Решение проблемы работы сокетов Битрикс Решение проблемы работы сокетов Битрикс
Сайт работал на VDS Timeweb по шаблону BitrixVM, всё было ок сайт открывался по https, но никак не решалась проблема с...
14.04.22
63
0