Настройка модуля Push and Pull для корпоративного портала 1С-Битрикс
Введение
Если у вас есть коробочная версия Битрикс24, и вы хотите использовать живую ленту, мгновенный чат, и получать push уведомления на телефон — вам понадобится модуль push and pull.
Под капотом у модуля модуль push and pull находится nginx с дополнительным модулем nginx-push-stream-module. Данный модуль не входит в стандартную поставку, поэтому для его подключения нужно собирать (компилировать) nginx из исходников.
Модуль nginx-push-stream-module есть в виртуальной машине битрикса (BitrixVM) из коробки. Поэтому самое простое решение данной задачи — развернуть BitrixVM и поставить на нее корпоративный портал.
Но если у вас нет BitrixVM и вы не хотите только ради этого переходить на нее — нужно скомпилировать nginx с поддержкой модуля nginx-push-stream-module из исходников, вручную.
Проблема
При работе с сайтом в публичной части выводится красная полоска с сообщением об ошибке “Отсутствует соединение с сервером”. Эта ошибка говорит о наличии проблемы с модулем push and pull.
При наличии такой ошибки, чтобы увидеть новое сообщение в чате — нужно либо долго ждать, либо перезагрузить страницу. В живой ленте обновления тоже будут появляться с большой задержкой или после перезагрузки страницы.
Можно выделить ряд характерных сообщений об ошибках (их можно найти в админке или в логах), свидетельствующих о необходимости настройки модуля push and pull:
- потеряно соединение с сервером
- выключена опция nginx push stream module в настройках модуля push and pull
- модуль nginx-push-stream работает некорректно
- не удалось подключиться к модулю nginx-push-stream отправки мгновенных сообщений
- не работает бизнес-чат в реальном времени (check_pull_stream): fail
- не настроен модуль nginx push-stream-module
- требуется установка nginx-push-stream-module
- требуется настройка bitrix push server
- требуется компиляция nginx для модуля push and pull для корпоративного портала
Коллеги-специалисты, которыми я задавал вопрос про настройку данного модуля ничего толком подсказать не смогли. Официальная иформация разбросана по разным статьям и всегда заканчивается рекомендацией воспользоваться BitrixVM. Поэтому трудно понять правильную последовательность действий.
Во время поиска информации мне попалась группа тематических веток на форумах: один, два, три, четыри, пять. И даже заказы решения данной задачи на биржах фриланса: один и два.
Проблемы с настройкой модуля push and pull регулярно возникают у многих. Судя по всему, задача не имеет тривиального решения, и исчерпывающего руководства, собранного в одном месте. Попробую исправить ситуацию.
Сборка nginx с модулем nginx-push-stream-module
Соберите NGINX с поддержкой модуля nginx-push-stream-module;
но не сказано в деталях как его собрать. Об этом сказано на сайте самого модуля nginx-push-stream-module, в разделе Installation. Там подробно описан процесс сборки, но есть некоторые нюансы, которые я хочу рассмотреть.
Внимание! Работа модуля Push and Pull поддерживается только до версии 0.5 nginx-push-stream-module. Более свежии версии не поддерживаются, так как для работы Push and Pull разрабатывается специальное решение от «1С-Битрикс».
Еще одна сложность заключается в том, что версия модуля nginx-push-stream-module завязана на версию nginx. Версия моего текущего nginx была 1.12 и мне не удалось собрать из исходников эту же версию nginx, которая бы скомпилировалась с модулем nginx-push-stream-module версии 0.5 или 0.5.4. Поэтому я решил попробовать собрать nginx последней версии с последней версией модуля nginx-push-stream-module.
В конечном счете, чтобы собрать nginx у меня получилась такая конфигурация:
$ ./configure —add-module=../nginx-push-stream-module —with-zlib=./zlib-1.2.11 —with-openssl=./openssl-1.0.2n —with-pcre=./pcre-8.41 —with-http_ssl_module
—with-http_ssl_module — этот модуль нужен обязательно, если на сайте используется https. А для этого модуля нужна openssl библиотека. Но последняя версия (1.1.0) openssl библиотеки не годится, так как с ней nginx не компилируется — это известный баг и пока что нужно использовать старую версию(1.0.2).
—with-zlib — Библиотека нужна для модуля ngx_http_gzip_module. Указывается путь к папке с исходниками библиотеки.
—with-pcre — Библиотека нужна для использования регулярных выражений в директиве location и для модуля ngx_http_rewrite_module. Указывается путь к папке с исходниками библиотеки.
—add-module=../nginx-push-stream-module — подключаем модуль nginx-push-stream-module. Указывается путь к папке с исходниками библиотеки.
То есть, сначала нужно скачать исходники всех библиотек, распаковать их (например в текущей папке) и указать путь к ним.
Итоговый список bash команд (запускать от имени пользователя root ), чтобы собрать nginx со всеми необходимыми модулями:
Во время выполнения команды make могут появиться различные ошибки, в основном это недостающие пакеты для компиляции. В конце статьи я приложил несколько ссылок по решению возможных проблем, из тех, с которыми я столкнулся.
После успешного выполнения команды ./configure , должно получить примерно следующее:
Таким же образом, можно перед сборкой посмотреть, какие модули были ранее установлены в старом nginx, скопировать их и добавить в список модулей для установки, при компиляции нового бинарника nginx.
Подключение собранного nginx
- положить новый бинарник в рабочую папку вместо старого ( у меня /usr/sbin/nginx)
- проверить и настроить пути к конфигам
- остановить службу nginx
- проверить, что нет ошибок
- перезапустить службу nginx
Список bash команд для подключения нового бинарника, в общем виде:
/path/to/old/ — замените на свой путь к старому бинарнику.
Не удаляйте старый бинарник! Переименуйте его на время тестирования, чтобы вернуть его назад, если возникнут проблемы с работой сайтов.
Новый бинарник подтянет старые файлы конфигурации, однако сразу же проверьте работоспособность своих сайтов.
В моем случае новый бинарник подтягивал конфиг из /usr/local/nginx/conf/nginx.conf , а старые конфиги былы тут /etc/nginx/nginx.conf . Для решения этой проблемы достаточно создать симлинк на старый путь:
Настройка nginx для модуля push and pull
1) В nginx добавить в блок server<> (для виртуального хоста) локейшены из битриксовой документации
2) В nginx добавить общие настройки модуля push and pull.
Нужно создать новый файл в папке с конфигами nginx для виртуального хоста, например push_and_pull.conf и поместить в него настройки. Некоторые строки пришлось закомментировать, так как они нужны только для BitrixVM.
3) Включить модуль push and pull в настройках в админке
Значение параметра На сервер установлена ближе всего к Виртуальная машина 4.4 и выше (nginx-push-stream-module 0.4.0) , поэтому устанавливаем именно этот вариант.
Теперь можно тестировать работу модуля push and pull — сообщения в чате должны приходить мгновенно, а в живой ленте должны появляться изменения (комментарии, просмотры, лайки, записи) без перезагрузки страницы.
Push сервер на основе nginx не справлялся с нагрузкой, которую создавали пользователи облачного сервиса Битрикс24, и поэтому появилась необходимость в разработке нового push сервера — NodeJS RTC, у которого под капотом Node.js. Новый push сервер встроен в BitrixVM версии 7+ и есть инструкция по его настройке. Мне не удалось найти информацию, как его настраивать без использования BitrixVM.
Для любой коробочной версии корпоративного портала, в которой количество активных пользователей намного меньше, чем в облачной версии — вполне хватит старой реализации push сервера на основе nginx.
Заключение
Чтобы запустить модуль push and pull необязательно ставить BitrixVM.
Есть мнение, что сборка из исходников — это слишком простой путь, и что правильнее собрать полноценный deb-пакет, который будет управляться пакетным менеджером. Для такого пакета можно запретить обновление (hold), чтобы впредь не обновлялся.
В данном случае опробована связка Debian + nginx 1.2.0 + nginx-push-stream-module 0.5.4 + bitrix 17.5.8 — все работает.
Push and Pull. Настройки модуля
В виртуальной машине ( BitrixVM c версии 7.1 и выше Виртуальная машина сэкономит время и силы на правильное развертывание и администрирование сайта или внутреннего информационного ресурса на базе продуктов «1С-Битрикс».
Подробнее в курсе Виртуальная машина ) Push-сервер установлен по умолчанию. О принципах работы модуля можно узнать в главе Push and Pull учебного курса Администратор. Модули.
Установка модуля
В первую очередь устанавливаем модуль если он не установлен. На странице установленных модулей должна быть соответствующая отметка что модуль установлен. Рабочий стол /Настройки / Настройки продукта / Модули
Также должен был быть установлен модуль REST API (rest)
Настройка модуля Push and Pull
На странице настроек модуля необходимо проверить чтобы был выбран Push server. Проще всего использовать облачный сервер 1С-Битрикс. Нужно только будет нажать кнопку зарегистрировать чтобы все активировалось. Этот вариант работает только для активных лицензий битрикса. Рабочий стол / Настройки / Настройки продукта / Настройки модулей
Проверка работы
Чтобы проверить, лучше открыть новую вкладку в режиме инкогнито, чтобы вы не были авторизованы на сайте. и в консоли браузера (F12, вкладка Консоль) выполнить команду
Результат должен быть примерно таким