Решил написать эту статью, поскольку не нашел в русскоязычном интернете описание решения проблем, с которыми столкнулся в процессе установки и настройки всего описанного в заголовке. Формально говоря, про 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