Подключаем 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, выходим из меню в которое мы попали.
Открываем файл конфига 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.
Снова проверяем работу CRM, звоним самому себе и пробуем послушать звонок выгруженный в облако. Должно всё работать. Если нужна помощь - пишите мне на почту, может помогу.
P.S. В версии BitrixVM 7.4.4 уже не нужно добавлять эти строки, они там уже должны быть.