Запуск Converse.js в связке с Bosh punjab на Apache 2.4 и удалённым сервером Openfire или как прикрутить к страничке jabber из коробки

в 14:08, , рубрики: converse, jabber, open source, punjab, Веб-разработка, метки: ,

Решил написать эту статью, поскольку не нашел в русскоязычном интернете описание решения проблем, с которыми столкнулся в процессе установки и настройки всего описанного в заголовке. Формально говоря, про punjab на Хабре есть статья, но, к моему сожалению, она мне помогла не сильно. Статья рассчитана на человека, который не сильно сведущ в хитростях администрирования, Pyton`а и т.д. и т.п.

Итак, начнём. Моя система представляет собой сервер на Ubuntu 14.04 на котором работает Apache 2.4. Он хостит страничку, к которой возникло желание прикрутить Jabber-клиент. Выбор клиента пал на Converse.js, так как он требует минимальное количество настроек и работает из коробки. Jabber сервер — Openfire. Он расположен на удалённой машине в сети, доступ к которому я имею только как рядовой пользователь. Известны о нём мне было только IP адрес и порт.

Любой JS — Jabber (самописный, Strophe, converse) потребует от вас наличия BOSH-сервера. Грубо говоря, это эхо сервер, который пересылает сообщения от JS-Jabbera к jabber серверу и обратно. В качестве BOSH был взят Punjab .

С вводной частью закончили — поехали ставить.

Punjab

Для работы он требует: Python 2.6>=, Twisted 11.1>=. Для Ubuntu в репозитории есть пакет python-twisted. Если есть желание использовать TLS, понадобится пакет pyopenssl.
Наш сервер работает без шифрования, потому я этот пакет не ставил.
Далее либо клоним с GitHub, либо качаем архив и разархивируем Punjab. Кладём его куда нам нравится, например /usr/share/punjab. Из этой папки в консоли выполняем:

python setup.py install

Далее по описанию авторов предлагается сразу запустить сервер. Я же рекомендую обратить своё внимание на файл punjab.tac.
В нём есть такая строка:

 internet.TCPServer(5280, site).setServiceParent(application)

Иных настроек для порта удалённого сервера я не нашёл, а так как наш сервер работает на порте 5222, эту я заменил 5280 на 5222:

internet.TCPServer(5222, site).setServiceParent(application)

У вас может возникнуть вопрос: «А где писать адрес jabber-сервера?». В конфигурации нигде. Адрес сервера указывается уже в клиенте в виде записи: vasyliy_pupkin@192.168.1.18, где 192.168.1.18 — адрес jabber-сервера.

Запускаем Punjab через консоль:

twistd -y punjab.tac

Если всё прошло нормально, консоль проглотит эту строку, а в папке punjab появится файл twistd.log, в котором можно посмотреть, как там поживает наш BOSH-сервер.

Тонкий момент: если в логе появляются записи о DNS, вам нужно дописать в punjab.tac сразу после строки:

bosh = HttpbService(1)

следующий код:

bosh.connect_srv = False 

Проверяем работу:

.http://адрес_сервера: порт_punjab/ покажет сообщение вида: A XEP-0124 — BOSH — component manager.
.http://адрес_сервера: порт_punjab/http-bind сообщение вида: XEP-0124 — BOSH

Apache 2.4

Предполагаю, что Апач у вас стоит. Нам нужно включить модули proxy, proxy_http. Включается простой командой a2enmod proxy proxy_http.

Идём в apache2.conf и дописываем там:

 <IfModule proxy_module>
    ProxyRequests Off
    ProxyPass /http-bind http://localhost:5222/http-bind
    ProxyPassReverse /http-bind http://localhost:5222/http-bind
</IfModule>

Напомню, что у меня порт 5222.
Зачем это нужно. Браузер не может послать пакет на порт, только на адрес. Потому мы заменяем порт адресом.

Converse.js

Кладём файлы из архива converse в папку веб-сайта апача, открываем на редактирование index.html. В самом конце файла находим фрагмент JS-кода:

 converse.initialize({
            bosh_service_url: 'https://conversejs.org/http-bind/', // Please use this connection manager only for testing purposes
            i18n: locales['en'], // Refer to ./locale/locales.js to see which locales are supported
            keepalive: true,
            message_carbons: true,
            play_sounds: true,
            roster_groups: true,
            show_controlbox_by_default: true,
            xhr_user_search: false
        });

В этом коде указываем нужный bosh_service_url и locales по желанию.

Сохраняем, открываем в браузере демо-страницу. На ней указываем свои учётные данные в форме входа в виде: «Jabber_Id@jabber_server» и пароль.

Если всё прошло гладко, вы увидите свой список контактов.

Автор: Marsianin_Garry

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js