https://jabberworld.info/api.php?action=feedcontributions&user=Rain&feedformat=atomМир Jabber - Вклад [ru]2024-03-28T15:40:53ZВкладMediaWiki 1.37.2https://jabberworld.info/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:%D0%9F%D1%80%D0%BE%D0%B2%D0%B0%D0%B9%D0%B4%D0%B5%D1%80%D1%81%D0%BA%D0%B8%D0%B5_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0&diff=10256Обсуждение:Провайдерские сервера2024-03-24T22:25:40Z<p>Rain: Rain переименовал страницу Обсуждение:Провайдерские сервера в Обсуждение:Провайдерские серверы</p>
<hr />
<div>#перенаправление [[Обсуждение:Провайдерские серверы]]</div>Rainhttps://jabberworld.info/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:%D0%9F%D1%80%D0%BE%D0%B2%D0%B0%D0%B9%D0%B4%D0%B5%D1%80%D1%81%D0%BA%D0%B8%D0%B5_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D1%8B&diff=10255Обсуждение:Провайдерские серверы2024-03-24T22:25:40Z<p>Rain: Rain переименовал страницу Обсуждение:Провайдерские сервера в Обсуждение:Провайдерские серверы</p>
<hr />
<div>Да, в общем-то, люди вполне успешно сервера и на основной странице писали :). --[[Участник:Rain|rain]] 05:59, 1 февраля 2009 (UTC)<br />
<br />
: fixed [[Участник:H31|H31]] 10:06, 1 февраля 2009 (UTC)<br />
<br />
== jabber.kiev.ua ==<br />
Не уверен, считается ли внутренняя биллинговая система университета провайдером, но думаю, стоит добавить в список сервер jabber.kiev.ua. Он хостится у нас в универе и бесплатно доступен всем из локальной сети. Есть S2S. --[[Участник:Ulidtko|Ulidtko]] 16:46, 4 июня 2009 (UTC)<br />
: В принципе, он в [[Региональные серверы Украины|региональных]] и [[Публичные серверы Jabber|публичных]] серверах есть, так что смотри сам, к тебе он ближе - тебе видней :). --[[Участник:Rain|Rain]] 17:54, 4 июня 2009 (UTC)<br />
:: Добавил, так как все три преимущества, указанные в статье, есть. Жаль, правда, там вебморда такая убогая... --[[Участник:Ulidtko|Ulidtko]] 01:09, 5 июня 2009 (UTC)<br />
::: Кстати, чего там [http://www.jabber.kiev.ua/stats.html статистика] не работает? --[[Участник:Rain|Rain]] 12:20, 25 июня 2009 (UTC)<br />
:::: Уже [http://jabber.kiev.ua/stats/ заработала] :))) --[[Участник:Ulidtko|Ulidtko]] 18:11, 23 июня 2010 (UTC)<br />
::::: Ага, наконец-то. --[[Участник:Rain|Rain]] 19:51, 23 июня 2010 (UTC)<br />
:::::: Не прошло и года :) --[[Участник:Ulidtko|Ulidtko]] 16:01, 24 июня 2010 (UTC)</div>Rainhttps://jabberworld.info/index.php?title=%D0%9F%D1%80%D0%BE%D0%B2%D0%B0%D0%B9%D0%B4%D0%B5%D1%80%D1%81%D0%BA%D0%B8%D0%B5_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0&diff=10254Провайдерские сервера2024-03-24T22:25:40Z<p>Rain: Rain переименовал страницу Провайдерские сервера в Провайдерские серверы</p>
<hr />
<div>#перенаправление [[Провайдерские серверы]]</div>Rainhttps://jabberworld.info/index.php?title=%D0%9F%D1%80%D0%BE%D0%B2%D0%B0%D0%B9%D0%B4%D0%B5%D1%80%D1%81%D0%BA%D0%B8%D0%B5_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D1%8B&diff=10253Провайдерские серверы2024-03-24T22:25:40Z<p>Rain: Rain переименовал страницу Провайдерские сервера в Провайдерские серверы</p>
<hr />
<div>Некоторые провайдеры (компании по предоставлению услуги доступа в Интернет) имеют свои собственные сервера. Главными их преимуществами по сравнению с обычными являются:<br />
* Высокая скорость работы<br />
* '''Нет необходимости оплачивать трафик, поэтому их использование абсолютно бесплатно'''<br />
* '''Возможность подключаться и общаться даже при отрицательном балансе на счету'''<br />
''Примечание: Сервера некоторых провайдеров могут не иметь одного или нескольких вышеприведенных достоинств, но они встречаются довольно редко.''<br />
<br />
Ниже находится список известных нам провайдерских серверов. Если Вы нашли Вашего провайдера в списке, но видите "Нет" в столбце "S2S", то это значит, что общение возможно только с пользователями этого сервера.<br />
==Россия==<br />
{|class="wikitable sortable" width=100%<br />
!width=20%|Сервер<br />
!width=15%|Город<br />
!Провайдер<br />
!width=10%|S2S<br />
|-<br />
|jabber.golden.ru<br />
|Иваново<br />
|[http://internet.beeline.ru "'''Beeline (Corbina)'''"]<br />
|'''Есть'''<br />
|-<br />
|talk37.ru<br />
|Иваново<br />
|[http://dsn.ru "'''DSN'''"][http://youlike.ru "'''Like'''"]<br />
|'''Есть'''<br />
|-<br />
|kursk.puzzle.su<br />
|Курск<br />
|[http://kursk.puzzle.su "'''Puzzle'''"]<br />
|'''Есть'''<br />
|-<br />
|olympus.ru<br />
|Екатеринбург<br />
|[http://olympus.ru/ "'''Olympus'''"]<br />
|'''Есть'''<br />
|-<br />
|rnet.ru<br />
|Санкт-Петербург<br />
|[http://www.rnet.ru "'''RNet'''"]<br />
|'''Есть'''<br />
|-<br />
|rsspnet.ru<br />
|Санкт-Петербург<br />
|[http://www.rts.spb.ru "'''PTC'''"]<br />
|'''Есть'''<br />
|-<br />
|jabber.corbina.ru<br />
|Москва,...(?)<br />
|[http://beeline.ru "'''Beeline (Corbina)'''"]<br />
|'''Есть'''<br />
|-<br />
|jabber.sibnet.ru<br />
|Новосибирск<br />
|"'''Rinet'''"<br />
|'''Есть'''<br />
|-<br />
|jabber.mediaring.ru<br />
|Екатеринбург<br />
|"'''UTel'''"<br />
|'''Есть'''<br />
|-<br />
|jabber.bks-tv.ru<br />
|Брянск<br />
|"'''БКС-TV'''"<br />
|'''Есть'''<br />
|-<br />
|jabber.ufanet.ru<br />
|Уфа<br />
|[http://Ufanet.ru "'''Ufanet'''"]<br />
|'''Есть'''<br />
|-<br />
|jabber.trigor.ru<br />
|Челябинск<br />
|[http://trigor.ru "'''Тригор'''"] <br />
|'''Есть'''<br />
|-<br />
|kurgan-telecom.ru<br />
|Курган<br />
|[http://kurgan-telecom.ru "'''Home Co. Ltd.'''"] <br />
|'''Есть'''<br />
|-<br />
|}<br />
<br />
==Украина==<br />
<br />
{|class="wikitable sortable" width=100%<br />
!width=20%|Сервер<br />
!width=15%|Город<br />
!Провайдер<br />
!width=10%|S2S<br />
|-<br />
|jb.wildpark.net<br />
|Николаев<br />
|[http://wildpark.net "'''Дикий Сад'''"]<br />
|'''Нет'''<br />
|-<br />
|jabber.trion<br />
|Николаев<br />
|[http://trion.mk.ua "'''Trion'''"]. [http://trion.mk.ua/index.php?page=support&sub=jabber Описание...]<br />
|'''Нет'''<br />
|-<br />
<br />
|}<br />
Просьба: если у Вашего провайдера есть Jabber сервер, но его нет в этом списке, напишите об этом на [[Обсуждение:Провайдерские сервера|странице обсуждения]] или отредактируйте страницу напрямую.<br />
<br />
[[Category:Серверы Jabber в мире]]</div>Rainhttps://jabberworld.info/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D1%85%D0%BE%D0%B4_%D1%81_ICQ_%D0%BD%D0%B0_Jabber&diff=10250Переход с ICQ на Jabber2024-03-01T18:21:49Z<p>Rain: </p>
<hr />
<div><center><small>'''Для просмотра содержимого Wiki с мобильного телефона Вы можете воспользоваться [[Карта Wiki|картой Wiki]] или [{{fullurl:{{FULLPAGENAME}}|mobileaction=toggle_view_mobile}} мобильной версией сайта]'''</small><br></center><br />
__NOTOC__<br />
{| class="standart" border=0 align=center width=100%<br />
|style="border:1px dashed #ddddf7; moz-border-radius:10px; border-radius:10px; webkit-border-radius:10px" colspan=6 bgcolor=#F7FBFF align=left|Современная структура общения в Internet очень развита и многогранна. Пользователю доступно множество видов общения, таких как чаты, почта, аудио и видео конференции, форумы, социальные сети и т.д. <br />
<br />
В нашем случае речь пойдет о Jabber - популярном свободном и открытом протоколе для общения посредством мгновенной отправки и получения текстовых сообщений в сети.<br />
<br />
Так исторически сложилось, что приличное количество людей на территории ex-СССР осталось пользоваться ICQ, несмотря на то, что это устаревшая сеть с закрытым протоколом, владельцы которой ущемляют пользователей в правах посредством своих лицензионных соглашений.<br />
<center><br />
Цель данного проекта - помощь как в переходе пользователей с ICQ на Jabber,<br> так и помощь новичкам в освоении Jabber.</center><br />
|-<br />
|}<br />
<br />
{|border=0 align=center width=100%<br />
| <!-- автор - nib952051, см. "Песочницу" за 2010-06-18 | http://chatlogs.linuxoid.in/linuxoid@conference.linuxoid.in/2010/06/18.html --><br />
<br />
{| border=0 width=30% style="float:left"<br />
|<br />
{|border=0 class="line-height-bigger" style="width:100%; text-align:left; margin-bottom: 50px;"<br />
|colspan=2 align=center|<h3>Что это такое?</h3><br />
|-<br />
|[[Изображение:Kfm home.png|100px|Введение|link=Краткое введение в Jabber]]<br />
|width=60%|<br />
'''[[Краткое введение в Jabber|Введение]]''' <br /><br />
'''[[Адресация в Jabber|Адресация]]''' <br /><br />
'''[[Недостатки Jabber|Недостатки]]'''<br />
|-<br />
|}<br />
<br />
{|border=0 class="line-height-bigger" style="width:100%; text-align:left; margin-bottom: 50px;"<br />
|colspan=2 align=center|<h3>Как им пользоваться?</h3><br />
|-<br />
|[[Изображение:Adv jabber 001.png|100px|Как им пользоваться?|link=Регистрация в Jabber]]<br />
|width=60%|<br />
'''[[Регистрация в Jabber|Регистрация]]''' <br /><br />
'''[[Клиенты Jabber|Популярные&nbsp;клиенты]]''' <br /><br />
'''[[Публичные серверы Jabber|Публичные&nbsp;серверы]]'''<br />
|-<br />
|}<br />
<br />
{|border=0 class="line-height-bigger" style="width:100%; text-align:left; margin-bottom: 20px;" <br />
|colspan=2 align=center|<h3>Полезная информация</h3><br />
|-<br />
|[[Изображение:Documentinfo 01.png|100px|Полезная информация|link=Карта Wiki]]<br />
|width=60%|<br />
'''[[Карта Wiki]]''' <br /><br />
'''[[:Category:Термины|Терминология]]''' <br /><br />
'''[[Jabber FAQ: Ответы на вопросы|Ответы&nbsp;на&nbsp;вопросы]]''' <br /><br />
|-<br />
|}<br />
|-<br />
|}<br />
<br />
{|border=0 class="line-height-bigger" style="float:left; width:40%; text-align: center; margin-top: 30px;"<br />
|<br /><h3>Мир безграничных возможностей</h3><br />
'''[[Транспорт|Транспорты]]''' <br /><br />
'''[[Конференции]]''' <br /><br />
'''[[JID полезных Jabber-ботов|Полезные боты]]''' <br /><br />
'''[[Уведомление о почте]]''' <br /><br />
'''[[Пользовательские статусы|Разнообразные статусы]]''' <br /><br />
'''[[Сетевые соединения в Jabber|Работа в любых условиях]]''' <br /><br />
'''[[Способы обмена сообщениями в Jabber|Различные способы общения]]''' <br /><br />
'''[[Использование нескольких клиентов одновременно|Использование нескольких]]<br />[[Использование нескольких клиентов одновременно|клиентов одновременно]]''' <br /><br />
'''[[Уведомления о печати]]''' <br /><br />
'''[[Передача файлов]]''' <br /><br />
'''[[Метаконтакты]]''' <br /><br />
'''[[Закладки на конференции|Закладки]]''' <br /><br />
'''[[Возможности Jabber|... и многое другое!]]''' <br /><br />
|-<br />
|}<br />
<br />
{|border=0 width=30% style="float:right"<br />
|<br />
{|border=0 class="line-height-bigger" style="width:100%; text-align:right; margin-bottom: 50px;"<br />
|colspan=2 align=center|<h3>Чем он лучше?</h3><br />
|-<br />
|width=60%|<br />
'''[[Преимущества Jabber]]''' <br /><br />
'''[[Недостатки ICQ]]''' <br /><br />
'''[[Сравнение Jabber и ICQ|Сравнение&nbsp;Jabber&nbsp;и&nbsp;ICQ]]''' <br /><br />
|[[Изображение:Vesy 001.png|100px|Сравнение сетей|link=Преимущества Jabber]]<br />
|-<br />
|}<br />
<br />
{|border=0 class="line-height-bigger" style="width:100%; text-align:right; margin-bottom: 50px;"<br />
|colspan=2 align=center|<h3>Продвинутым о Jabber</h3><br />
|-<br />
|width=60%|<br />
'''[[Устройство сети Jabber|Устройство сети]]''' <br /><br />
'''[[Сетевые соединения в Jabber|Сетевые&nbsp;соединения]]''' <br /><br />
'''[[Шифрование в Jabber|Шифрование]]''' <br /><br />
|[[Изображение:System 001.png|100px|Для продвинутых|link=Устройство сети Jabber]]<br />
|-<br />
|}<br />
<br />
{|border=0 class="line-height-bigger" style="width:100%; text-align:right; margin-bottom: 20px;"<br />
|colspan=2 align=center|<h3>Свой сервер</h3><br />
|-<br />
|width=60%|<br />
'''[[Ставим свой сервер|Основы]]''' <br /><br />
'''[[Установка и настройка Jabber-сервера|Установка&nbsp;и&nbsp;настройка]]''' <br /><br />
'''[[Полезные советы при создании своего сервера|Полезные советы]]''' <br /><br />
|[[Изображение:Server 001.png|100px|Строим свой сервер|link=Ставим свой сервер]]<br />
|-<br />
|}<br />
|-<br />
|}<br />
<br />
|}<br />
<br />
[[Category:Вики]]</div>Rainhttps://jabberworld.info/index.php?title=%D0%9F%D0%B5%D1%81%D0%BE%D1%87%D0%BD%D0%B8%D1%86%D0%B0&diff=10249Песочница2024-02-29T22:34:14Z<p>Rain: </p>
<hr />
<div><center><small>'''Для просмотра содержимого Wiki с мобильного телефона Вы можете воспользоваться [[Карта Wiki|картой Wiki]] или [{{fullurl:{{FULLPAGENAME}}|mobileaction=toggle_view_mobile}} мобильной версией сайта]'''</small><br></center><br />
__NOTOC__<br />
{| class="standart" border=0 align=center width=100%<br />
|style="border:1px dashed #ddddf7; moz-border-radius:10px; border-radius:10px; webkit-border-radius:10px" colspan=6 bgcolor=#F7FBFF align=left|Современная структура общения в Internet очень развита и многогранна. Пользователю доступно множество видов общения, таких как чаты, почта, аудио и видео конференции, форумы, социальные сети и т.д. <br />
<br />
В нашем случае речь пойдет о Jabber - популярном свободном и открытом протоколе для общения посредством мгновенной отправки и получения текстовых сообщений в сети.<br />
<br />
Так исторически сложилось, что приличное количество людей на территории ex-СССР осталось пользоваться ICQ, несмотря на то, что это устаревшая сеть с закрытым протоколом, владельцы которой ущемляют пользователей в правах посредством своих лицензионных соглашений.<br />
<center><br />
Цель данного проекта - помощь как в переходе пользователей с ICQ на Jabber,<br> так и помощь новичкам в освоении Jabber.</center><br />
|-<br />
|}<br />
<br />
{|border=0 align=center width=100%<br />
| <!-- автор - nib952051, см. "Песочницу" за 2010-06-18 | http://chatlogs.linuxoid.in/linuxoid@conference.linuxoid.in/2010/06/18.html --><br />
<br />
{| border=0 width=30% style="float:left"<br />
|<br />
{|border=0 class="line-height-bigger" style="width:100%; text-align:left; margin-bottom: 50px;"<br />
|colspan=2 align=center|<h3>Что это такое?</h3><br />
|-<br />
|[[Изображение:Kfm home.png|100px|Введение|link=Краткое введение в Jabber]]<br />
|width=60%|<br />
'''[[Краткое введение в Jabber|Введение]]''' <br /><br />
'''[[Адресация в Jabber|Адресация]]''' <br /><br />
'''[[Недостатки Jabber|Недостатки]]'''<br />
|-<br />
|}<br />
<br />
{|border=0 class="line-height-bigger" style="width:100%; text-align:left; margin-bottom: 50px;"<br />
|colspan=2 align=center|<h3>Как им пользоваться?</h3><br />
|-<br />
|[[Изображение:Adv jabber 001.png|100px|Как им пользоваться?|link=Регистрация в Jabber]]<br />
|width=60%|<br />
'''[[Регистрация в Jabber|Регистрация]]''' <br /><br />
'''[[Клиенты Jabber|Популярные&nbsp;клиенты]]''' <br /><br />
'''[[Публичные серверы Jabber|Публичные&nbsp;серверы]]'''<br />
|-<br />
|}<br />
<br />
{|border=0 class="line-height-bigger" style="width:100%; text-align:left; margin-bottom: 20px;" <br />
|colspan=2 align=center|<h3>Полезная информация</h3><br />
|-<br />
|[[Изображение:Documentinfo 01.png|100px|Полезная информация|link=Карта Wiki]]<br />
|width=60%|<br />
'''[[Карта Wiki]]''' <br /><br />
'''[[:Category:Термины|Терминология]]''' <br /><br />
'''[[Jabber FAQ: Ответы на вопросы|Ответы&nbsp;на&nbsp;вопросы]]''' <br /><br />
|-<br />
|}<br />
|-<br />
|}<br />
<br />
{|border=0 class="line-height-bigger" style="float:left; width:40%; text-align: center; margin-top: 30px;"<br />
|<br /><h3>Мир безграничных возможностей</h3><br />
'''[[Транспорт|Транспорты]]''' <br /><br />
'''[[Конференции]]''' <br /><br />
'''[[JID полезных Jabber-ботов|Полезные боты]]''' <br /><br />
'''[[Уведомление о почте]]''' <br /><br />
'''[[Пользовательские статусы|Разнообразные статусы]]''' <br /><br />
'''[[Сетевые соединения в Jabber|Работа в любых условиях]]''' <br /><br />
'''[[Способы обмена сообщениями в Jabber|Различные способы общения]]''' <br /><br />
'''[[Использование нескольких клиентов одновременно|Использование нескольких]]<br />[[Использование нескольких клиентов одновременно|клиентов одновременно]]''' <br /><br />
'''[[Уведомления о печати]]''' <br /><br />
'''[[Передача файлов]]''' <br /><br />
'''[[Метаконтакты]]''' <br /><br />
'''[[Закладки на конференции|Закладки]]''' <br /><br />
'''[[Возможности Jabber|... и многое другое!]]''' <br /><br />
|-<br />
|}<br />
<br />
{|border=0 width=30% style="float:right"<br />
|<br />
{|border=0 class="line-height-bigger" style="width:100%; text-align:right; margin-bottom: 50px;"<br />
|colspan=2 align=center|<h3>Чем он лучше?</h3><br />
|-<br />
|width=60%|<br />
'''[[Преимущества Jabber]]''' <br /><br />
'''[[Недостатки ICQ]]''' <br /><br />
'''[[Сравнение Jabber и ICQ|Сравнение&nbsp;Jabber&nbsp;и&nbsp;ICQ]]''' <br /><br />
|[[Изображение:Vesy 001.png|100px|Сравнение сетей|link=Преимущества Jabber]]<br />
|-<br />
|}<br />
<br />
{|border=0 class="line-height-bigger" style="width:100%; text-align:right; margin-bottom: 50px;"<br />
|colspan=2 align=center|<h3>Продвинутым о Jabber</h3><br />
|-<br />
|width=60%|<br />
'''[[Устройство сети Jabber|Устройство сети]]''' <br /><br />
'''[[Сетевые соединения в Jabber|Сетевые&nbsp;соединения]]''' <br /><br />
'''[[Шифрование в Jabber|Шифрование]]''' <br /><br />
|[[Изображение:System 001.png|100px|Для продвинутых|link=Устройство сети Jabber]]<br />
|-<br />
|}<br />
<br />
{|border=0 class="line-height-bigger" style="width:100%; text-align:right; margin-bottom: 20px;"<br />
|colspan=2 align=center|<h3>Свой сервер</h3><br />
|-<br />
|width=60%|<br />
'''[[Ставим свой сервер|Основы]]''' <br /><br />
'''[[Установка и настройка Jabber-сервера|Установка&nbsp;и&nbsp;настройка]]''' <br /><br />
'''[[Полезные советы при создании своего сервера|Полезные советы]]''' <br /><br />
|[[Изображение:Server 001.png|100px|Строим свой сервер|link=Ставим свой сервер]]<br />
|-<br />
|}<br />
|-<br />
|}<br />
<br />
|}<br />
<br />
[[Category:Вики]]</div>Rainhttps://jabberworld.info/index.php?title=%D0%9F%D0%B5%D1%81%D0%BE%D1%87%D0%BD%D0%B8%D1%86%D0%B0&diff=10248Песочница2024-02-29T22:28:20Z<p>Rain: </p>
<hr />
<div><center><small>'''Для просмотра содержимого Wiki с мобильного телефона Вы можете воспользоваться [[Карта Wiki|картой Wiki]] или [{{fullurl:{{FULLPAGENAME}}|mobileaction=toggle_view_mobile}} мобильной версией сайта]'''</small><br></center><br />
__NOTOC__<br />
{| class="standart" border=0 align=center width=100%<br />
|style="border:1px dashed #ddddf7; moz-border-radius:10px; border-radius:10px; webkit-border-radius:10px" colspan=6 bgcolor=#F7FBFF align=left|Современная структура общения в Internet очень развита и многогранна. Пользователю доступно множество видов общения, таких как чаты, почта, аудио и видео конференции, форумы, социальные сети и т.д. <br />
<br />
В нашем случае речь пойдет о Jabber - популярном свободном и открытом протоколе для общения посредством мгновенной отправки и получения текстовых сообщений в сети.<br />
<br />
Так исторически сложилось, что приличное количество людей на территории ex-СССР осталось пользоваться ICQ, несмотря на то, что это устаревшая сеть с закрытым протоколом, владельцы которой ущемляют пользователей в правах посредством своих лицензионных соглашений.<br />
<center><br />
Цель данного проекта - помощь как в переходе пользователей с ICQ на Jabber,<br> так и помощь новичкам в освоении Jabber.</center><br />
|-<br />
|}<br />
<br />
{|border=0 align=center style="min-width: 1200px;" width=100%<br />
| <!-- автор - nib952051, см. "Песочницу" за 2010-06-18 | http://chatlogs.linuxoid.in/linuxoid@conference.linuxoid.in/2010/06/18.html --><br />
<br />
{| border=0 width=30% style="float:left"<br />
|<br />
{|border=0 class="line-height-bigger" style="width:100%; text-align:left; margin-bottom: 50px;"<br />
|colspan=2 align=center|<h3>Что это такое?</h3><br />
|-<br />
|[[Изображение:Kfm home.png|100px|Введение|link=Краткое введение в Jabber]]<br />
|width=60%|<br />
'''[[Краткое введение в Jabber|Введение]]''' <br /><br />
'''[[Адресация в Jabber|Адресация]]''' <br /><br />
'''[[Недостатки Jabber|Недостатки]]'''<br />
|-<br />
|}<br />
<br />
{|border=0 class="line-height-bigger" style="width:100%; text-align:left; margin-bottom: 50px;"<br />
|colspan=2 align=center|<h3>Как им пользоваться?</h3><br />
|-<br />
|[[Изображение:Adv jabber 001.png|100px|Как им пользоваться?|link=Регистрация в Jabber]]<br />
|width=60%|<br />
'''[[Регистрация в Jabber|Регистрация]]''' <br /><br />
'''[[Клиенты Jabber|Популярные&nbsp;клиенты]]''' <br /><br />
'''[[Публичные серверы Jabber|Публичные&nbsp;серверы]]'''<br />
|-<br />
|}<br />
<br />
{|border=0 class="line-height-bigger" style="width:100%; text-align:left; margin-bottom: 20px;" <br />
|colspan=2 align=center|<h3>Полезная информация</h3><br />
|-<br />
|[[Изображение:Documentinfo 01.png|100px|Полезная информация|link=Карта Wiki]]<br />
|width=60%|<br />
'''[[Карта Wiki]]''' <br /><br />
'''[[:Category:Термины|Терминология]]''' <br /><br />
'''[[Jabber FAQ: Ответы на вопросы|Ответы&nbsp;на&nbsp;вопросы]]''' <br /><br />
|-<br />
|}<br />
|-<br />
|}<br />
<br />
{|border=0 class="line-height-bigger" style="float:left; width:40%; text-align: center; margin-top: 30px;"<br />
|<br /><h3>Мир безграничных возможностей</h3><br />
'''[[Транспорт|Транспорты]]''' <br /><br />
'''[[Конференции]]''' <br /><br />
'''[[JID полезных Jabber-ботов|Полезные боты]]''' <br /><br />
'''[[Уведомление о почте]]''' <br /><br />
'''[[Пользовательские статусы|Разнообразные статусы]]''' <br /><br />
'''[[Сетевые соединения в Jabber|Работа в любых условиях]]''' <br /><br />
'''[[Способы обмена сообщениями в Jabber|Различные способы общения]]''' <br /><br />
'''[[Использование нескольких клиентов одновременно|Использование нескольких]]<br />[[Использование нескольких клиентов одновременно|клиентов одновременно]]''' <br /><br />
'''[[Уведомления о печати]]''' <br /><br />
'''[[Передача файлов]]''' <br /><br />
'''[[Метаконтакты]]''' <br /><br />
'''[[Закладки на конференции|Закладки]]''' <br /><br />
'''[[Возможности Jabber|... и многое другое!]]''' <br /><br />
|-<br />
|}<br />
<br />
{|border=0 width=30% style="float:right"<br />
|<br />
{|border=0 class="line-height-bigger" style="width:100%; text-align:right; margin-bottom: 50px;"<br />
|colspan=2 align=center|<h3>Чем он лучше?</h3><br />
|-<br />
|width=60%|<br />
'''[[Преимущества Jabber]]''' <br /><br />
'''[[Недостатки ICQ]]''' <br /><br />
'''[[Сравнение Jabber и ICQ|Сравнение&nbsp;Jabber&nbsp;и&nbsp;ICQ]]''' <br /><br />
|[[Изображение:Vesy 001.png|100px|Сравнение сетей|link=Преимущества Jabber]]<br />
|-<br />
|}<br />
<br />
{|border=0 class="line-height-bigger" style="width:100%; text-align:right; margin-bottom: 50px;"<br />
|colspan=2 align=center|<h3>Продвинутым о Jabber</h3><br />
|-<br />
|width=60%|<br />
'''[[Устройство сети Jabber|Устройство сети]]''' <br /><br />
'''[[Сетевые соединения в Jabber|Сетевые&nbsp;соединения]]''' <br /><br />
'''[[Шифрование в Jabber|Шифрование]]''' <br /><br />
|[[Изображение:System 001.png|100px|Для продвинутых|link=Устройство сети Jabber]]<br />
|-<br />
|}<br />
<br />
{|border=0 class="line-height-bigger" style="width:100%; text-align:right; margin-bottom: 20px;"<br />
|colspan=2 align=center|<h3>Свой сервер</h3><br />
|-<br />
|width=60%|<br />
'''[[Ставим свой сервер|Основы]]''' <br /><br />
'''[[Установка и настройка Jabber-сервера|Установка&nbsp;и&nbsp;настройка]]''' <br /><br />
'''[[Полезные советы при создании своего сервера|Полезные советы]]''' <br /><br />
|[[Изображение:Server 001.png|100px|Строим свой сервер|link=Ставим свой сервер]]<br />
|-<br />
|}<br />
|-<br />
|}<br />
<br />
|}<br />
<br />
[[Category:Вики]]</div>Rainhttps://jabberworld.info/index.php?title=%D0%A0%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D1%8F_%D0%B2_Jabber&diff=10246Регистрация в Jabber2024-01-18T18:37:26Z<p>Rain: Откат правок Stormz (обсуждение) к последней версии Rain</p>
<hr />
<div>Если вы решили начать пользоваться Jabber, то закономерно возникает вопрос: как это сделать?<br />
<br />
Для начала необходимо выбрать один из серверов Jabber. От выбора сервера зависит стабильность, а также наличие некоторых дополнительных функций. Возможно, [[Провайдерские сервера|Ваш провайдер]] предоставляет свой собственный сервер, [[Возможно, у вас уже есть учётная запись Jabber!|или Вы используете какой-либо сервис]], который поддерживает Jabber. В противном случае необходимо выбрать сервер из [[Публичные серверы Jabber|общего списка]].<br />
<br />
После выбора сервера нужно зарегистрироваться на нем. Обычно это делается через Jabber-клиент и процесс зависит от выбора клиента. Выбрать наиболее подходящий можно на [[Клиенты Jabber|странице клиентов]]. Для компьютеров рекомендуется [[Psi]], для мобильных телефонов - [[Conversations]], но можно использовать и любой другой понравившийся клиент.<br />
<br />
Для регистрации обычно требуется ввести:<br />
<br />
# Имя пользователя (логин)<br />
# [[Публичные серверы Jabber|Сервер]]<br />
# [[Пароль]]<br />
<br />
После регистрации Вы получите уникальный идентификатор пользователя под названием [[Jabber ID]] (или сокращенно JID), похожий на адрес электронной почты: '''имя_пользователя@сервер'''. Другие пользователи сети Jabber смогут добавить Вас к себе список контактов, если Вы скажете им свой JID.<br />
<br />
Помимо этого, рекомендуется заполнить [[vCard]] - свою виртуальную визитную карточку в мире Jabber.<br />
<br />
Также, если нужно общаться с теми, кто ещё не перешёл на Jabber, можно подключить [[транспорт|транспорты]].<br />
<br />
== Настройка учётной записи ==<br />
<br />
Далее описан процесс регистрации учётной записи в популярных [[Клиенты_Jabber|джаббер-клиентах]]:<br />
<br />
{| width=75%<br />
|width=50%|[[Изображение:Icon 16-16 psi.png]] [[Регистрация в Psi|Psi]]<br />
|[[Изображение:Icon 16-16 pidgin.png]] [[Регистрация в Pidgin|Pidgin]]<br />
|-<br />
|[[Изображение:Logo 16-16 gajim.png]] [[Регистрация в Gajim|Gajim]]<br />
|[[Изображение:Jabbim logo 16-16.png]] [[Регистрация в Jabbim|Jabbim]]<br />
|-<br />
|[[Изображение:Logo 16-16 coccinella.png]] [[Регистрация в Coccinella|Coccinella]]<br />
|[[Изображение:Icon 16-16 talkonaut.png]] [[Регистрация в Talkonaut|Talkonaut]]<br />
|-<br />
|[[Изображение:Logo 16-16 kopete.png.png]] [[Регистрация в Kopete|Kopete]]<br />
|[[Изображение:Logo 16-16 tkabber.png]] [[Регистрация в Tkabber|Tkabber]]<br />
|-<br />
|[[Изображение:Logo 16-16 bombus.png]] [[Регистрация в Bombus|Bombus]]<br />
|[[Изображение:Sameplace-logo-16-16.png]] [[Регистрация в SamePlace|SamePlace]]<br />
|-<br />
|[[Изображение:Icon 16-16 MDCweb.png]] [[Регистрация в MDC|MDC]]<br />
|[[Изображение:IM+Logo.png]] [[Регистрация в IM+|IM+]]<br />
|-<br />
|[[Изображение:Icon 16-16 miranda.png]] [[Регистрация в Miranda|Miranda]]<br />
|[[Изображение:Logo 16-16 qip-logo.png.png]] [[Регистрация в QIP Infium|QIP Infium]]<br />
|-<br />
|[[Изображение:Icon 16-16 pandion.png]] [[Регистрация в Pandion|Pandion]]<br />
|[[Изображение:Yaonline 16 logo.png]] [[Регистрация в Я.Онлайн|Я.Онлайн]]<br />
|-<br />
|[[Изображение:Icon 16-16 OctroTalk.png]] [[Регистрация в OctroTalk|OctroTalk]]<br />
|[[Изображение:Dummy logo 16-16.png]] [[Регистрация в Nebohodimo IM|Nebohodimo IM]]<br />
|-<br />
|[[Изображение:Logo 16-16 jajc.png]] [[Регистрация в JAJC|JAJC]]<br />
|[[Изображение:Icon 16-16 adium.png]] [[Регистрация в Adium|Adium]]<br />
|-<br />
|[[Изображение:Spark logo 16-16.png]] [[Регистрация в Spark|Spark]]<br />
|[[Изображение:Google talk 16 logo.png]] [[Регистрация в Google Talk|Google Talk]]<br />
|-<br />
|[[Изображение:Icon 16-16 MDCweb.png]] [[Регистрация в WebMDC|WebMDC]]<br />
|[[Изображение:Imov logo 16-16.png]] [[Регистрация в imov Messenger|imov Messenger]]<br />
|-<br />
||[[Изображение:Logo 16-16 qip-logo.png.png]] [[Регистрация в QIP PDA|QIP PDA]]<br />
|[[Изображение:Icon 16-16 jimm.png]] [[Регистрация в Jimm Aspro|Jimm Aspro]]<br />
|-<br />
|[[Изображение:Logo 16-16 bombus.png]] [[Регистрация в Bombus-ng|Bombus-ng]]<br />
|[[Изображение:Logo 16 pigeon.png]] [[Регистрация в Pigeon!|Pigeon!]]<br />
|-<br />
|[[Изображение:Gossip logo 16-16.png]] [[Регистрация в Gossip|Gossip]]<br />
|[[Изображение:Agilemobile logo 16-16.png]] [[Регистрация в Agile Messenger|Agile Messenger]]<br />
|-<br />
|[[Изображение:Qutim logo 16-16.png]] [[Регистрация в QutIM|QutIM]]<br />
|[[Изображение:Empathy logo 16-16.png]] [[Регистрация в Empathy|Empathy]]<br />
|-<br />
|[[Изображение:Logo nimbuzz 16-16.png]] [[Регистрация в Nimbuzz|Nimbuzz]]<br />
|[[Изображение:Fring logo-16-16.png]] [[Регистрация в Fring|Fring]]<br />
|-<br />
|[[Изображение:Logo-eyeCU.png]] [[Регистрация в eyeCU|eyeCU]]<br />
|[[Файл:Conversations logo.png|16px|link=Регистрация в Conversations]]&nbsp;[[Регистрация в Conversations|Conversations]]<br />
|-<br />
|[[Файл:Blabber logo android.png|16px|link=Регистрация в Blabber.im]]&nbsp;[[Регистрация в Blabber.im|Blabber.im]]<br />
|<br />
|-<br />
|}<br />
<br />
== Ссылки ==<br />
<br />
* [http://mass-jabber.wiki-wiki.ru/ FAQ по переходу из ICQ на Jabber]<br />
<br />
[[Category:Регистрация]]</div>Rainhttps://jabberworld.info/index.php?title=%D0%A0%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D1%8F_%D0%B2_Nimbuzz&diff=10245Регистрация в Nimbuzz2024-01-18T18:37:05Z<p>Rain: Откат правок Марго (обсуждение) к последней версии 66.102.9.58</p>
<hr />
<div>{{ToDo|Сделать описания}}<br />
<br />
==Регистрация на сервисе Nimbuzz==<br />
<br />
<center><br />
<gallery perrow=5><br />
Файл:Nimbuzz start screen 01.jpg|Стартовый экран<br />
Файл:Nimbuzz service registration 01.jpg|Вводим учетные данные и капчу<br />
Файл:Nimbuzz service registration 02.jpg|Вводим (или пропускаем) данные о телефоне и стране<br />
Файл:Nimbuzz service registration 03.jpg|Вводим (или пропускаем) данные о себе<br />
Файл:Nimbuzz online 01.jpg|Онлайн<br />
</gallery><br />
</center><br />
<br />
==Добавление аккаунта на [[Google Talk]]==<br />
<br />
<center><br />
<gallery perrow=5><br />
Файл:Nimbuzz addgmail 01.jpg|Открываем настройки<br />
Файл:Nimbuzz addgmail 02.jpg|Открываем менеджер учетных записей<br />
Файл:Nimbuzz addgmail 03.jpg|Добавляем [[Google Talk]]-аккаунт<br />
Файл:Nimbuzz addgmail 04.jpg|Вводим учетные данные<br />
Файл:Nimbuzz gmail online 01.jpg|Аккаунт подключен<br />
</gallery><br />
</center><br />
<br />
==Ссылки==<br />
<br />
* [[Добавление контакта в Nimbuzz|Добавление контакта]]<br />
<br />
[[Category:Регистрация]]</div>Rainhttps://jabberworld.info/index.php?title=%D0%9F%D1%83%D0%B1%D0%BB%D0%B8%D1%87%D0%BD%D1%8B%D0%B5_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D1%8B_Jabber&diff=10242Публичные серверы Jabber2024-01-01T14:42:20Z<p>Rain: jabber.org-то зачем дропать?</p>
<hr />
<div>Для того, чтобы воспользоваться XMPP, необходимо иметь учётную запись на сервере. Выбор сервера может зависеть от различных факторов.<br />
<br />
В первую очередь это надёжность. У крупных серверов обычно лучше обслуживание и они более надёжны в работе, но зачастую они сильно нагружены. Одним из показателей надёжности является большое время непрерывной работы (''аптайм''). <br />
<br />
Во-вторых, это адрес, он должен быть понятным и красивым. Например, если в адресе вашего сервера есть название города, то сразу будет понятно, откуда вы.<br />
<br />
В-третьих, у вашего провайдера внутри сети [[Провайдерские сервера|может быть]] XMPP-сервер, трафик до которого будет для вас полностью бесплатным (иногда даже при отсутствии денег на счёту). Даже если он не будет публичным, а, например, закрытым (запрещены соединения с другими серверами) — его вполне можно использовать для общения с другими абонентами провайдера.<br />
<br />
В-четвёртых, всё больше онлайн-компаний включают XMPP в базовый набор предоставляемых услуг, например, сервисы [[LJ_Talk|Живой Журнал]], [[QIP.ru]] и [[Возможно, у вас уже есть учётная запись Jabber!|многие другие]], поэтому вы можете быть уже обеспечены учётной записью и достаточно [[Клиенты Jabber|скачать клиент]] и ввести [[Jabber ID|логин]]/[[пароль]], чтобы общаться в сети XMPP.<br />
<br />
Итак, ниже вы можете увидеть список наиболее крупных публичных серверов:<br />
<br />
'''Для России:'''<br />
<br />
* {{Сайт|https://www.jabber.ru/}} '''jabber.ru''' (либо '''xmpp.ru''') — один из крупнейших серверов страны.<br />
* {{Сайт|https://exmpp.ru}} '''exmpp.ru''' – ещё один российский Jabber сервер.<br />
* {{Сайт|https://thesecure.biz}} '''thesecure.biz''', работающий с 2007 года.<br />
* '''Крупные региональные серверы России:'''<br />
** {{Сайт|http://jabber.snc.ru}} '''jabber.snc.ru''' — Сахалин.<br />
** {{Сайт|http://jabbercity.ru}} '''jabbercity.ru''' — Санкт-Петербург.<br />
** [[JRD:Servers-List-RU|Больше серверов...]]<br />
<br />
'''Для Украины:'''<br />
* [[Региональные серверы Украины]]<br />
<br />
'''Крупные иностранные серверы:'''<br />
* {{Сайт|https://www.jabber.org/}} '''jabber.org'''<br />
* {{Сайт|https://a3.pm/}} '''a3.pm'''<br />
* {{Сайт|https://www.jabber.de/}} '''jabber.de'''<br />
* {{Сайт|https://www.jabbim.com/}} '''jabbim.com''' (а также '''jabbim.cz''', '''jabbim.pl''')<br />
* {{Сайт|https://jid.pl/}} '''jid.pl'''<br />
* {{Сайт|https://qwik.space/articles/xmpp/intro}} '''qwik.space'''<br />
<br />
Если вас не устроил ни один из вышеперечисленных серверов, вы можете выбрать подходящий из [[Список работающих публичных серверов Jabber|более полного списка публичных серверов Jabber]].<br />
<br />
== Ссылки ==<br />
<br />
* [[Национальные серверы Jabber|Национальные]] и [[Провайдерские серверы|провайдерские]] серверы XMPP.<br />
* [[RAW: Список Jabber-серверов|RAW-список]] для таблицы выше.<br />
* [https://xmpp.love Еще один список публичных Jabber-серверов]<br />
* [[Возможно, у вас уже есть учётная запись Jabber!|Jabber-серверы разных популярных сервисов]]<br />
* [[Пользовательские серверы]]<br />
<br />
[[Category:Серверы Jabber в мире]]</div>Rainhttps://jabberworld.info/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_Snikket&diff=10239Установка Snikket2023-11-13T10:44:44Z<p>Rain: /* Домен */</p>
<hr />
<div>Это простое руководство позволит всего за несколько минут установить и настроить собственный сервер на базе [[Snikket]].<br />
<br />
Для установки потребуется компьютер с внешним IP-адресом, на котором есть возможность установить необходимое ПО, а также домен, указывающий на данный адрес и где можно создать поддомены.<br />
<br />
Приступим!<br />
<br />
== Домен ==<br />
<br />
Для работы сервиса потребуется всего 3 (или 4, если у вас есть IPv6) записи в DNS:<br />
<br />
* Основная А/AAAA-запись для домена, указывающая на внешний IP-адрес.<br />
* Субдомен '''groups''' для [[Конференции|конференций]].<br />
* Субдомен '''share''' для [[Передача файлов|файлообмена]].<br />
<br />
2 последние записи для простоты можно сделать CNAME-алиасами на первую, чтобы не приходилось везде указывать IP-адрес.<br />
<br />
Для данного сервера это выглядело бы так:<br />
<br />
<pre><br />
jabberworld.info IN A 185.161.208.229<br />
jabberworld.info IN AAAA 2a07:c801:0:5::<br />
<br />
groups.jabberworld.info IN CNAME jabberworld.info<br />
share.jabberworld.info IN CNAME jabberworld.info<br />
</pre><br />
<br />
== Docker ==<br />
<br />
Snikket-сервер предоставляется в виде готовых контейнеров для [[ru_wikipedia:Docker|Docker]], поэтому все, что требуется - установить сам Docker и дать в нем команду на установку нужных образов. Инструкции по установке Docker есть для различных дистрибутивов Linux на его официальном сайте:<br />
<br />
* [https://docs.docker.com/install/linux/docker-ce/debian/ Debian]<br />
* [https://docs.docker.com/install/linux/docker-ce/ubuntu/ Ubuntu]<br />
* [https://docs.docker.com/install/linux/docker-ce/centos/ CentOS]<br />
* [https://docs.docker.com/install/linux/docker-ce/fedora/ Fedora]<br />
<br />
{{Hider hiding<br />
|title=Например, для Debian...<br />
|content=...все сводится к следующему:<br />
<pre><br />
sudo apt-get update<br />
sudo apt-get install ca-certificates curl gnupg<br />
sudo install -m 0755 -d /etc/apt/keyrings<br />
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg<br />
sudo chmod a+r /etc/apt/keyrings/docker.gpg<br />
<br />
# Add the repository to Apt sources:<br />
echo \<br />
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \<br />
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \<br />
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null<br />
sudo apt-get update<br />
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin<br />
</pre><br />
}}<br />
<br />
Дополнительно нужно поставить утилиту '''docker-compose''':<br />
<pre><br />
sudo curl -L "https://github.com/docker/compose/releases/download/1.25.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose<br />
sudo chmod a+x /usr/local/bin/docker-compose<br />
</pre><br />
<br />
==Подготовка==<br />
<br />
Теперь просто скачиваем конфиг-файл Docker'а для Snikket:<br />
<br />
<pre><br />
mkdir /etc/snikket<br />
cd /etc/snikket<br />
curl -o docker-compose.yml https://snikket.org/service/resources/docker-compose.beta.yml<br />
</pre><br />
<br />
А дальше в том же каталоге создаем файл '''snikket.conf''', где будет указан нужный домен и email администратора:<br />
<br />
<pre><br />
# The primary domain of your Snikket instance<br />
SNIKKET_DOMAIN=example.com<br />
<br />
# An email address where the admin can be contacted<br />
# (also used to register your Let's Encrypt account to obtain certificates)<br />
SNIKKET_ADMIN_EMAIL=you@example.com<br />
</pre><br />
<br />
==Запускаем==<br />
<br />
Вот и все! Запускаем сервер командой<br />
docker-compose up -d<br />
При первом запуске будут скачаны все нужные зависимости. Первым делом certbot получит сертификаты для домена и его субдоменов, после чего будет запущена основная часть сервера. Создайте пользователя-администратора командой<br />
docker exec snikket create-invite --admin --group default<br />
В ответ будет возвращена ссылка-приглашение на веб-интерфейс, по которой можно будет создать нового пользователя. В дальнейшем под этим пользователем можно авторизоваться в веб-интерфейсе для управления сервером:<br />
<center> <br />
<gallery><br />
Файл:Snikket login 01.png|Логин<br />
Файл:Snikket admin 01.png|Панель администратора<br />
</gallery><br />
</center><br />
<br />
Теперь можете приступить к созданию приглашений для своих друзей и знакомых!<br />
<br />
== Ссылки ==<br />
<br />
* [https://snikket.org/service/quickstart/ Оригинал руководства на официальном сайте]<br />
<br />
[[Category:Свой сервер]]</div>Rainhttps://jabberworld.info/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_Snikket&diff=10238Установка Snikket2023-11-12T23:06:09Z<p>Rain: /* Домены */</p>
<hr />
<div>Это простое руководство позволит всего за несколько минут установить и настроить собственный сервер на базе [[Snikket]].<br />
<br />
Для установки потребуется компьютер с внешним IP-адресом, на котором есть возможность установить необходимое ПО, а также домен, указывающий на данный адрес и где можно создать поддомены.<br />
<br />
Приступим!<br />
<br />
== Домен ==<br />
<br />
Для работы сервиса потребуется всего 3 (или 4, если у вас есть IPv6) записи в DNS:<br />
<br />
* Основная А/AAAA-запись для домена, указывающая на внешний IP-адрес.<br />
* Субдомен groups для [[Конференции|конференций]].<br />
* Субдомен share для [[Передача файлов|файлообмена]].<br />
<br />
2 последние записи для простоты можно сделать CNAME-алиасами на первую, чтобы не приходилось везде указывать IP-адрес.<br />
<br />
Для данного сервера это выглядело бы так:<br />
<br />
<pre><br />
jabberworld.info IN A 185.161.208.229<br />
jabberworld.info IN AAAA 2a07:c801:0:5::<br />
<br />
groups.jabberworld.info IN CNAME jabberworld.info<br />
share.jabberworld.info IN CNAME jabberworld.info<br />
</pre><br />
<br />
== Docker ==<br />
<br />
Snikket-сервер предоставляется в виде готовых контейнеров для [[ru_wikipedia:Docker|Docker]], поэтому все, что требуется - установить сам Docker и дать в нем команду на установку нужных образов. Инструкции по установке Docker есть для различных дистрибутивов Linux на его официальном сайте:<br />
<br />
* [https://docs.docker.com/install/linux/docker-ce/debian/ Debian]<br />
* [https://docs.docker.com/install/linux/docker-ce/ubuntu/ Ubuntu]<br />
* [https://docs.docker.com/install/linux/docker-ce/centos/ CentOS]<br />
* [https://docs.docker.com/install/linux/docker-ce/fedora/ Fedora]<br />
<br />
{{Hider hiding<br />
|title=Например, для Debian...<br />
|content=...все сводится к следующему:<br />
<pre><br />
sudo apt-get update<br />
sudo apt-get install ca-certificates curl gnupg<br />
sudo install -m 0755 -d /etc/apt/keyrings<br />
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg<br />
sudo chmod a+r /etc/apt/keyrings/docker.gpg<br />
<br />
# Add the repository to Apt sources:<br />
echo \<br />
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \<br />
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \<br />
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null<br />
sudo apt-get update<br />
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin<br />
</pre><br />
}}<br />
<br />
Дополнительно нужно поставить утилиту '''docker-compose''':<br />
<pre><br />
sudo curl -L "https://github.com/docker/compose/releases/download/1.25.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose<br />
sudo chmod a+x /usr/local/bin/docker-compose<br />
</pre><br />
<br />
==Подготовка==<br />
<br />
Теперь просто скачиваем конфиг-файл Docker'а для Snikket:<br />
<br />
<pre><br />
mkdir /etc/snikket<br />
cd /etc/snikket<br />
curl -o docker-compose.yml https://snikket.org/service/resources/docker-compose.beta.yml<br />
</pre><br />
<br />
А дальше в том же каталоге создаем файл '''snikket.conf''', где будет указан нужный домен и email администратора:<br />
<br />
<pre><br />
# The primary domain of your Snikket instance<br />
SNIKKET_DOMAIN=example.com<br />
<br />
# An email address where the admin can be contacted<br />
# (also used to register your Let's Encrypt account to obtain certificates)<br />
SNIKKET_ADMIN_EMAIL=you@example.com<br />
</pre><br />
<br />
==Запускаем==<br />
<br />
Вот и все! Запускаем сервер командой<br />
docker-compose up -d<br />
При первом запуске будут скачаны все нужные зависимости. Первым делом certbot получит сертификаты для домена и его субдоменов, после чего будет запущена основная часть сервера. Создайте пользователя-администратора командой<br />
docker exec snikket create-invite --admin --group default<br />
В ответ будет возвращена ссылка-приглашение на веб-интерфейс, по которой можно будет создать нового пользователя. В дальнейшем под этим пользователем можно авторизоваться в веб-интерфейсе для управления сервером:<br />
<center> <br />
<gallery><br />
Файл:Snikket login 01.png|Логин<br />
Файл:Snikket admin 01.png|Панель администратора<br />
</gallery><br />
</center><br />
<br />
Теперь можете приступить к созданию приглашений для своих друзей и знакомых!<br />
<br />
== Ссылки ==<br />
<br />
* [https://snikket.org/service/quickstart/ Оригинал руководства на официальном сайте]<br />
<br />
[[Category:Свой сервер]]</div>Rainhttps://jabberworld.info/index.php?title=%D0%92%D1%8B%D0%B1%D0%BE%D1%80_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0&diff=10237Выбор сервера2023-11-12T23:04:24Z<p>Rain: +Snikket</p>
<hr />
<div>Для запуска собственного Jabber-сервера необходимо установить одну из программ-серверов. На данный момент из всех существующих реализаций серверов наиболее популярны три:<br />
<br />
* [[Ejabberd]]<br />
* [[Prosody]]<br />
* [[Openfire]]<br />
<br />
В последнее время также активно развивается сервер под названием [http://www.tigase.org/ Tigase], написанный на Java.<br />
<br />
;'''Ejabberd''': Является самым популярным решением. Он имеет модульную архитектуру, поддерживает виртуальные узлы (может обслуживать несколько доменов), умеет работать с разнообразными хранилищами данных (MySQL, PostgreSQL, LDAP), также есть возможность использования внешнего скрипта для авторизации пользователей. За счет использования [[ru_wikipedia:Erlang|Erlang]] ejabberd может выдерживать большую нагрузку. Единственным серьёзным недостатком ejabberd является громоздкость — даже при небольшом числе онлайн-пользователей потребление памяти будет довольно высоким, что связано с особенностями внутреннего представления строк в erlang-машине. Использование памяти можно несколько сократить отказом от TLS и zlib, но вряд ли это понравится вашим пользователям. Если вы готовы терпеть этот единственный недостаток, к слову, присущий также и Openfire, то ejabberd&nbsp;— лучший выбор для вас.<br />
<br />
;'''Prosody''': Относительно молодой проект, тем не менее, быстро завоевавший большую популярность. Это связано с отличительной чертой Prosody — компактностью. Бесспорно, такие проекты, как [[Jabberd|Jabberd14]] и [[Jabberd|Jabberd2]] тоже нетребовательны к ресурсам, но на сегодняшний день их можно считать морально устаревшими. Prosody отвечает всем требованиям, предъявляемым к современному серверу — поддержка современных XEP, модульная архитектура, расширяемость. Как и [[ejabberd]], Prosody может работать с самыми разнообразными внешними хранилищами данных. Если же хочется получить готовое решение "все в одном", но при этом нетребовательное к ресурсам - стоит обратить внимание на '''[[Snikket]]''' - это тот же Prosody, поставляемый в предустановленном варианте с необходимыми сервисами.<br />
<br />
;'''Openfire''': Как уже было отмечено выше, также характеризуется значительным потреблением ресурсов. Другим недостатком Openfire является отсутствие поддержки виртуальных узлов, то есть, сервер, работающий на базе Openfire, может обслуживать только один домен. А неоспоримым преимуществом при использовании Openfire является его веб-интерфейс, позволяющий решать любые административные задачи: создание и удаление пользователей, просмотр статистики, установку дополнений. Установка дополнений производится в автоматическом режиме при помощи нескольких щелчков мыши. Среди дополнений есть полнофункциональный набор транспортов, Kraken, во многом похожий на универсальный Spectrum. Такой веб-интерфейс, в совокупности с поддержкой LDAP, делает Openfire хорошим выбором для локальных сетей фирм, учебных заведений и любых других предприятий, где нужно внедрить мгновенную переписку сотрудников.<br />
<br />
Что ejabberd, что Openfire полностью настраиваются до рабочего состояния во время или сразу после установки и сразу поддерживают [[Конференции|многопользовательские конференции]].<br />
<br />
;'''Jabberd''': Этот сервер имеет модульную архитектуру, например, поддержка конференций обеспечивается установкой отдельного пакета в случае использования сервера под Linux или распаковкой архива с [[MUC]]-модулем в каталог установки jabberd в случае с Windows. Отличается низкими требованиями к ресурсам, самым малым занимаемым местом на диске (менее 10 Мб) после установки и отсутствием веб-интерфейса для управления - вся настройка делается правкой конфигурационных файлов, что может потребовать некоторого опыта и знаний. Рекомендуется для использования на слабых машинах, однако не стоит ожидать от этого сервера поддержки современных функций - проект уже несколько лет, как прекратил развитие.<br />
<br />
После того, как Вы определитесь с выбором программы-сервера, можно переходить [[Регистрация доменного имени|регистрации доменного имени]].<br />
<br />
[[Category:Свой сервер]]</div>Rainhttps://jabberworld.info/index.php?title=Snikket&diff=10236Snikket2023-11-12T23:00:20Z<p>Rain: Ссылка на установку</p>
<hr />
<div>Snikket - проект от автора популярного сервера [[Prosody]], направленный на снижение порога входа для новых пользователей, а также для унификации названий различных терминов в Jabber'e между клиентами от разных авторов. [https://www.reddit.com/r/xmpp/comments/f0el07/deleted_by_user/ В качестве примера автор приводит] "конференции" - это и "чаты", и "группы", и "каналы". Кроме того, на разных платформах клиенты называются по-разному - например, популярный [[Conversations]] есть только для Android, что может сбить с толку новичков.<br />
<br />
Фактически, комплекс приложений "Snikket" - это легкая надстройка поверх существующих популярных приложений:<br />
* Сервер Snikket - это комплекс из всем известного [[Prosody]] + вспомогательных сервисов для его работы.<br />
* Snikket для Android - это слегка переделанный [[Conversations]]<br />
* Snikket для iPhone базируется на [[Siskin IM]]<br />
<br />
== Ссылки ==<br />
<br />
* [https://snikket.org Домашняя страница проекта]<br />
* [[Установка Snikket]]<br />
<br />
[[Category:Клиент]][[Category:Сервер]]</div>Rainhttps://jabberworld.info/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B8_%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_Jabber-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0&diff=10235Установка и настройка Jabber-сервера2023-11-12T22:59:54Z<p>Rain: jabberd лесом, устарел.</p>
<hr />
<div>Требования для работы и процедура установки собственного сервера Jabber являются не такими сложными, как это кажется непосвящённому. Jabber не сильно требователен к ресурсам, поэтому сервер для него возможно устроить практически где угодно. Сложность в установке не превышает сложности установки типичного веб-форума, а местами и ещё проще.<br />
<br />
==Подготовка==<br />
<br />
===Компьютер===<br />
<br />
Для работы сервера Jabber вполне достаточно старенького компьютера с процессором с тактовой частотой 500 МГц, размером оперативной памяти 128 Мб и жёстким диском 4 Гб. Разумеется, возможно использовать и более мощные компьютеры. Если вы планируете хранить историю сообщений на сервере, потребуется более объемистый жесткий диск. Можно установить Jabber-сервер и на машину, которая уже работает как сервер, это не повредит другим программам, как вы можете догадаться. А можно использовать свой настольный компьютер, если вы не выключаете его на ночь. Ниже приведены наиболее оптимальные применения для основных Jabber-серверов:<br />
<br />
* [[Snikket]] — самый простой и быстрый вариант для установки персонального сервера "с нуля".<br />
* [[Ejabberd]] — наиболее универсальный вариант, рекомендуется. Сервер поддерживает кластеризацию. У сервера высокая отказоустойчивость.<br />
* [[Prosody]] — персональный сервер с низкой нагрузкой. Простой в настройке, но не отличается стабильной работой при высокой нагрузке. Нет кластеризации.<br />
* [[Openfire]] — предприятия. Прост в настройке, но из-за виртуальной машины java потребляет много ресурсов.<br />
<br />
Подробнее смотрите в статье «[[Выбор сервера]]»<br />
<br />
===Интернет===<br />
<br />
Возможно сделать так, чтобы к вашему серверу можно было подключиться не только из локальной сети или предприятия. Но не каждый провайдер позволяет своим клиентам использовать собственный сервер в интернете. Для работы сервера нужно, чтобы ваше подключение к интернету было с так называемым «публичным», или «белым» адресом IP. Проверить его наличие можно с помощью [[Выявление NAT|этой инструкции]]. Также желательно, чтобы этот IP-адрес был фиксированным, чтобы к нему можно было легко привязать доменное имя. Все эти проблемы отпадут сами собой, если вы используете сервер VPS или Dedicated от поставщика услуг хостинга — они всегда подразумевают предоставление в ваше распоряжение фиксированных «белых» IP. Наконец, важным фактором является стабильность подключения — проблемы со стороны сервера сказываются на всех подключённых пользователях одновременно.<br />
<br />
==Практика==<br />
<br />
===Регистрация доменного имени===<br />
<br />
Как уже было сказано раньше, для работы jabber-сервера необходимо обзавестись доменным именем. Конечно, в крайнем случае можно обойтись и без него, но, согласитесь, вряд ли вам захочется видеть и использовать [[Jabber ID]] вида "'''vasya@169.254.96.124'''" или "'''petya@2001:470:0f3b:28fa::1'''". Поэтому последним шагом перед, собственно, установкой сервера будет регистрация собственного доменного имени, тем более сделать это так просто! Подробнее об этом, а также о привязке домена к IP-адресу своего сервера читайте в статье "[[Регистрация доменного имени]]". Возможно использование и динамического адреса.<br />
<br />
===Установка и настройка программы-сервера===<br />
<br />
Подготовив "железо" для будущего сервера, подключив его к сети и привязав к нему доменное имя в этой сети, можно переходить непосредственно к установке [[Выбор сервера|необходимого программного обеспечения]]. Ниже приводятся подробные инструкции для упомянутых трех популярных серверов в варианте для двух операционных систем - семейства юниксоподобных ОС (в частности дистрибутивов GNU/Linux и BSD) и Windows. Если у вас нет особых причин использовать Windows для сервера - мы рекомендуем в качестве основы взять GNU/Linux, как более защищенную и стабильно работающую платформу.<br />
<br />
<center><br />
{| border=0 width=75%<br />
|rowspan=3 width=100|[[Изображение:Linux bsd.png|120px]]<br />
|width=35% align=left height=35|[[Установка Snikket|Snikket]]<br />
|rowspan=3 width=100|[[Изображение:Windows logo.png|110px]]<br />
|width=35% align=left|[[Установка ejabberd под Windows|ejabberd]]<br />
|-<br />
|height=35 align=left|[[Установка ejabberd под Linux|ejabberd]]<br />
|align=left|<br />
|-<br />
| height=35 align=left|[[Установка Openfire под Linux|Openfire]]<br />
|align=left|[[Установка Openfire под Windows|Openfire]]<br />
|-<br />
|}<br />
</center><br />
<br />
==Ссылки==<br />
* [[Свой сервер: подробное руководство по установке ejabberd|Подробное руководство по установке ejabberd]]<br />
* [[Свой сервер: подробное руководство по установке Prosody|Подробное руководство по установке Prosody]]<br />
* [http://wiki.unixforum.org/wiki/Делаем_Jabber-сервер Делаем Jabber-сервер] {{deadlink}}<br />
* [http://habrahabr.ru/blogs/jabber/50182/ Популярные ошибки администраторов jabber-серверов]<br />
* [http://habrahabr.ru/blogs/im/50009/ Настройка Jabber сервера на своем домене с помощью Google apps] {{deadlink}}<br />
* Архив: установка jabberd2 [[Установка jabberd 2 под Linux|под Linux]] и [[Установка jabberd 2 под Windows|под Windows]].<br />
<br />
[[Category:Свой сервер]]</div>Rainhttps://jabberworld.info/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B8_%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_Jabber-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0&diff=10234Установка и настройка Jabber-сервера2023-11-12T22:57:37Z<p>Rain: Сниккет в топ</p>
<hr />
<div>Требования для работы и процедура установки собственного сервера Jabber являются не такими сложными, как это кажется непосвящённому. Jabber не сильно требователен к ресурсам, поэтому сервер для него возможно устроить практически где угодно. Сложность в установке не превышает сложности установки типичного веб-форума, а местами и ещё проще.<br />
<br />
==Подготовка==<br />
<br />
===Компьютер===<br />
<br />
Для работы сервера Jabber вполне достаточно старенького компьютера с процессором с тактовой частотой 500 МГц, размером оперативной памяти 128 Мб и жёстким диском 4 Гб. Разумеется, возможно использовать и более мощные компьютеры. Если вы планируете хранить историю сообщений на сервере, потребуется более объемистый жесткий диск. Можно установить Jabber-сервер и на машину, которая уже работает как сервер, это не повредит другим программам, как вы можете догадаться. А можно использовать свой настольный компьютер, если вы не выключаете его на ночь. Ниже приведены наиболее оптимальные применения для основных Jabber-серверов:<br />
<br />
* [[Ejabberd]] — наиболее универсальный вариант, рекомендуется. Сервер поддерживает кластеризацию. У сервера высокая отказоустойчивость.<br />
* [[Prosody]] — персональный сервер с низкой нагрузкой. Простой в настройке, но не отличается стабильной работой при высокой нагрузке. Нет кластеризации.<br />
* [[Openfire]] — предприятия. Прост в настройке, но из-за виртуальной машины java потребляет много ресурсов.<br />
* [[Jabberd]] — старые компьютеры с низкой вычислительной мощностью.<br />
<br />
Подробнее смотрите в статье «[[Выбор сервера]]»<br />
<br />
===Интернет===<br />
<br />
Возможно сделать так, чтобы к вашему серверу можно было подключиться не только из локальной сети или предприятия. Но не каждый провайдер позволяет своим клиентам использовать собственный сервер в интернете. Для работы сервера нужно, чтобы ваше подключение к интернету было с так называемым «публичным», или «белым» адресом IP. Проверить его наличие можно с помощью [[Выявление NAT|этой инструкции]]. Также желательно, чтобы этот IP-адрес был фиксированным, чтобы к нему можно было легко привязать доменное имя. Все эти проблемы отпадут сами собой, если вы используете сервер VPS или Dedicated от поставщика услуг хостинга — они всегда подразумевают предоставление в ваше распоряжение фиксированных «белых» IP. Наконец, важным фактором является стабильность подключения — проблемы со стороны сервера сказываются на всех подключённых пользователях одновременно.<br />
<br />
==Практика==<br />
<br />
===Регистрация доменного имени===<br />
<br />
Как уже было сказано раньше, для работы jabber-сервера необходимо обзавестись доменным именем. Конечно, в крайнем случае можно обойтись и без него, но, согласитесь, вряд ли вам захочется видеть и использовать [[Jabber ID]] вида "'''vasya@169.254.96.124'''" или "'''petya@2001:470:0f3b:28fa::1'''". Поэтому последним шагом перед, собственно, установкой сервера будет регистрация собственного доменного имени, тем более сделать это так просто! Подробнее об этом, а также о привязке домена к IP-адресу своего сервера читайте в статье "[[Регистрация доменного имени]]". Возможно использование и динамического адреса.<br />
<br />
===Установка и настройка программы-сервера===<br />
<br />
Подготовив "железо" для будущего сервера, подключив его к сети и привязав к нему доменное имя в этой сети, можно переходить непосредственно к установке [[Выбор сервера|необходимого программного обеспечения]]. Ниже приводятся подробные инструкции для упомянутых трех популярных серверов в варианте для двух операционных систем - семейства юниксоподобных ОС (в частности дистрибутивов GNU/Linux и BSD) и Windows. Если у вас нет особых причин использовать Windows для сервера - мы рекомендуем в качестве основы взять GNU/Linux, как более защищенную и стабильно работающую платформу.<br />
<br />
<center><br />
{| border=0 width=75%<br />
|rowspan=3 width=100|[[Изображение:Linux bsd.png|120px]]<br />
|width=35% align=left height=35|[[Установка Snikket|Snikket]]<br />
|rowspan=3 width=100|[[Изображение:Windows logo.png|110px]]<br />
|width=35% align=left|[[Установка ejabberd под Windows|ejabberd]]<br />
|-<br />
|height=35 align=left|[[Установка ejabberd под Linux|ejabberd]]<br />
|align=left|<br />
|-<br />
| height=35 align=left|[[Установка Openfire под Linux|Openfire]]<br />
|align=left|[[Установка Openfire под Windows|Openfire]]<br />
|-<br />
|}<br />
</center><br />
<br />
==Ссылки==<br />
* [[Свой сервер: подробное руководство по установке ejabberd|Подробное руководство по установке ejabberd]]<br />
* [[Свой сервер: подробное руководство по установке Prosody|Подробное руководство по установке Prosody]]<br />
* [http://wiki.unixforum.org/wiki/Делаем_Jabber-сервер Делаем Jabber-сервер] {{deadlink}}<br />
* [http://habrahabr.ru/blogs/jabber/50182/ Популярные ошибки администраторов jabber-серверов]<br />
* [http://habrahabr.ru/blogs/im/50009/ Настройка Jabber сервера на своем домене с помощью Google apps] {{deadlink}}<br />
* Архив: установка jabberd2 [[Установка jabberd 2 под Linux|под Linux]] и [[Установка jabberd 2 под Windows|под Windows]].<br />
<br />
[[Category:Свой сервер]]</div>Rainhttps://jabberworld.info/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_Snikket&diff=10233Установка Snikket2023-11-12T22:55:51Z<p>Rain: Новая страница: «Это простое руководство позволит всего за несколько минут установить и настроить собственный сервер на базе Snikket. Для установки потребуется компьютер с внешним IP-адресом, на котором есть возможность установить необходимое ПО, а также домен, указыва...»</p>
<hr />
<div>Это простое руководство позволит всего за несколько минут установить и настроить собственный сервер на базе [[Snikket]].<br />
<br />
Для установки потребуется компьютер с внешним IP-адресом, на котором есть возможность установить необходимое ПО, а также домен, указывающий на данный адрес и где можно создать поддомены.<br />
<br />
Приступим!<br />
<br />
== Домены ==<br />
<br />
Для работы сервиса потребуется всего 3 (или 4, если у вас есть IPv6) записи в DNS:<br />
<br />
* Основная А/AAAA-запись для домена, указывающая на внешний IP-адрес.<br />
* Субдомен groups для [[Конференции|конференций]].<br />
* Субдомен share для [[Передача файлов|файлообмена]].<br />
<br />
2 последние записи для простоты можно сделать CNAME-алиасами на первую, чтобы не приходилось везде указывать IP-адрес.<br />
<br />
Для данного сервера это выглядело бы так:<br />
<br />
<pre><br />
jabberworld.info IN A 185.161.208.229<br />
jabberworld.info IN AAAA 2a07:c801:0:5::<br />
<br />
groups.jabberworld.info IN CNAME jabberworld.info<br />
share.jabberworld.info IN CNAME jabberworld.info<br />
</pre><br />
<br />
== Docker ==<br />
<br />
Snikket-сервер предоставляется в виде готовых контейнеров для [[ru_wikipedia:Docker|Docker]], поэтому все, что требуется - установить сам Docker и дать в нем команду на установку нужных образов. Инструкции по установке Docker есть для различных дистрибутивов Linux на его официальном сайте:<br />
<br />
* [https://docs.docker.com/install/linux/docker-ce/debian/ Debian]<br />
* [https://docs.docker.com/install/linux/docker-ce/ubuntu/ Ubuntu]<br />
* [https://docs.docker.com/install/linux/docker-ce/centos/ CentOS]<br />
* [https://docs.docker.com/install/linux/docker-ce/fedora/ Fedora]<br />
<br />
{{Hider hiding<br />
|title=Например, для Debian...<br />
|content=...все сводится к следующему:<br />
<pre><br />
sudo apt-get update<br />
sudo apt-get install ca-certificates curl gnupg<br />
sudo install -m 0755 -d /etc/apt/keyrings<br />
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg<br />
sudo chmod a+r /etc/apt/keyrings/docker.gpg<br />
<br />
# Add the repository to Apt sources:<br />
echo \<br />
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \<br />
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \<br />
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null<br />
sudo apt-get update<br />
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin<br />
</pre><br />
}}<br />
<br />
Дополнительно нужно поставить утилиту '''docker-compose''':<br />
<pre><br />
sudo curl -L "https://github.com/docker/compose/releases/download/1.25.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose<br />
sudo chmod a+x /usr/local/bin/docker-compose<br />
</pre><br />
<br />
==Подготовка==<br />
<br />
Теперь просто скачиваем конфиг-файл Docker'а для Snikket:<br />
<br />
<pre><br />
mkdir /etc/snikket<br />
cd /etc/snikket<br />
curl -o docker-compose.yml https://snikket.org/service/resources/docker-compose.beta.yml<br />
</pre><br />
<br />
А дальше в том же каталоге создаем файл '''snikket.conf''', где будет указан нужный домен и email администратора:<br />
<br />
<pre><br />
# The primary domain of your Snikket instance<br />
SNIKKET_DOMAIN=example.com<br />
<br />
# An email address where the admin can be contacted<br />
# (also used to register your Let's Encrypt account to obtain certificates)<br />
SNIKKET_ADMIN_EMAIL=you@example.com<br />
</pre><br />
<br />
==Запускаем==<br />
<br />
Вот и все! Запускаем сервер командой<br />
docker-compose up -d<br />
При первом запуске будут скачаны все нужные зависимости. Первым делом certbot получит сертификаты для домена и его субдоменов, после чего будет запущена основная часть сервера. Создайте пользователя-администратора командой<br />
docker exec snikket create-invite --admin --group default<br />
В ответ будет возвращена ссылка-приглашение на веб-интерфейс, по которой можно будет создать нового пользователя. В дальнейшем под этим пользователем можно авторизоваться в веб-интерфейсе для управления сервером:<br />
<center> <br />
<gallery><br />
Файл:Snikket login 01.png|Логин<br />
Файл:Snikket admin 01.png|Панель администратора<br />
</gallery><br />
</center><br />
<br />
Теперь можете приступить к созданию приглашений для своих друзей и знакомых!<br />
<br />
== Ссылки ==<br />
<br />
* [https://snikket.org/service/quickstart/ Оригинал руководства на официальном сайте]<br />
<br />
[[Category:Свой сервер]]</div>Rainhttps://jabberworld.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Snikket_admin_01.png&diff=10232Файл:Snikket admin 01.png2023-11-12T22:53:33Z<p>Rain: </p>
<hr />
<div></div>Rainhttps://jabberworld.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Snikket_login_01.png&diff=10231Файл:Snikket login 01.png2023-11-12T22:52:52Z<p>Rain: </p>
<hr />
<div></div>Rainhttps://jabberworld.info/index.php?title=Snikket&diff=10230Snikket2023-11-12T22:16:35Z<p>Rain: Новая страница: «Snikket - проект от автора популярного сервера Prosody, направленный на снижение порога входа для новых пользователей, а также для унификации названий различных терминов в Jabber'e между клиентами от разных авторов. [https://www.reddit.com/r/xmpp/comments/f0el07/deleted_by_user/ В качеств...»</p>
<hr />
<div>Snikket - проект от автора популярного сервера [[Prosody]], направленный на снижение порога входа для новых пользователей, а также для унификации названий различных терминов в Jabber'e между клиентами от разных авторов. [https://www.reddit.com/r/xmpp/comments/f0el07/deleted_by_user/ В качестве примера автор приводит] "конференции" - это и "чаты", и "группы", и "каналы". Кроме того, на разных платформах клиенты называются по-разному - например, популярный [[Conversations]] есть только для Android, что может сбить с толку новичков.<br />
<br />
Фактически, комплекс приложений "Snikket" - это легкая надстройка поверх существующих популярных приложений:<br />
* Сервер Snikket - это комплекс из всем известного [[Prosody]] + вспомогательных сервисов для его работы.<br />
* Snikket для Android - это слегка переделанный [[Conversations]]<br />
* Snikket для iPhone базируется на [[Siskin IM]]<br />
<br />
== Ссылки ==<br />
<br />
* [https://snikket.org Домашняя страница проекта]<br />
<br />
[[Category:Клиент]][[Category:Сервер]]</div>Rainhttps://jabberworld.info/index.php?title=%D0%A1%D0%B2%D0%BE%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80:_%D0%BF%D0%BE%D0%B4%D1%80%D0%BE%D0%B1%D0%BD%D0%BE%D0%B5_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B5_Prosody&diff=10229Свой сервер: подробное руководство по установке Prosody2023-11-08T22:12:17Z<p>Rain: </p>
<hr />
<div>В этой статье приводится пример настройки [[Prosody]] - одного из самых популярных и легковесных jabber-серверов. Для сервера написано просто-таки [https://modules.prosody.im/all.html огромное число модулей] на все случаи жизни, поэтому в руководстве, основанном на версии 0.12.4, будет показано подключение актуальных и популярных функций. В качестве сертификатов будем использовать Let's Encrypt, а в качестве хранилища данных, в том числе архива сообщений - MySQL<ref name="mysql"></ref> - и все это на Debian GNU/Linux.<br />
<br />
Рассмотрим особенности данной конфигурации.<br />
<br />
__TOC__<br />
<br />
== [[ru_wikipedia:DNS|DNS-записи]] ==<br />
<br />
Хотя для базового варианта своего jabber-сервера вполне достаточно [[Регистрация доменного имени|бесплатного DynDNS-домена]], для полноценной конфигурации все же нужно обзавестись собственным доменом, где можно будет добавить все необходимые DNS-записи и сделать субдомены для сервисов. Выбор регистратора и покупка домена остается за рамками данной статьи, тут только приводятся шаги, которые надо сделать после покупки домена в его админке.<br />
<br />
Всего понадобится около 15 записей в DNS:<br />
<br />
# Для удобства, чтобы в случае миграции сервера с одного IP на другой не приходилось переписывать все записи, стоит завести для него субдомен, который будет ссылаться на нужный IP с помощью А-записи (или 2 таких субдомена в случае использования IPv4+IPv6 - один с A-записью, а второй с AAAA), а все остальные записи сделать CNAME-алиасами для него. Например, для данного сервера ('''jabberworld.info''') сделаны 2 субдомена '''xmpp.jabberworld.info''', ссылающиеся на IPv4 и IPv6-адреса.<br />
# Создаем субдомены для необходимых сервисов сервера<ref>Да, если планируется использовать, например, конференции исключительно локально, то можно обойтись и без DNS-записей - сервер и так знает, куда ему подключаться, так как он этот сервис и предоставляет. Но если хочется полноценный сервис, с которым смогут взаимодействовать и другие сервера - то все же потребуются указанные записи в DNS.</ref> - '''conference''' (для [[Конференции|конференций]]), '''proxy''' (прокси для прямой [[Передача файлов|передачи файлов]]), '''pubsub''' (сервисы типа "Публикация/подписка", где может сохраняться самая разная информация) и '''upload''' (сервис для [[Передача файлов|передачи файлов]] через HTTP Upload). Все эти записи создаем как CNAME на наш субдомен из 1-го пункта.<br />
# Создаем ряд SRV-записей для нашего основного домена - они показывают, где именно какой сервис находится. Конечно, если у вас все на одном адресе, то будет работать и так, но мы ведь решили все делать правильно, верно? Итак, нужны такие SRV-записи:<br />
<br />
:: '''_xmpp-client._tcp.EXAMPLE.COM''' (порт '''5222''') - чтобы указать, куда подключаться [[Клиенты Jabber|jabber-клиенту]]<br />
:: '''_xmpps-client._tcp.EXAMPLE.COM''' (порт '''5223''') - аналогичная запись для [https://xmpp.org/extensions/xep-0368.html TLS-подключений клиентов]<br />
:: '''_xmpp-server._tcp.EXAMPLE.COM''' (порт '''5269''') - чтобы указать, куда подключаться [[Публичные серверы Jabber|jabber-серверу]]<br />
:: '''_xmpps-server._tcp.EXAMPLE.COM''' (порт '''5270''') - аналогичная запись для [https://xmpp.org/extensions/xep-0368.html TLS-подключений серверов].<br />
<br />
:: Записи ниже служат для работы сервиса аудио/видеозвонков через jabber<ref name="avcalls">https://prosody.im/doc/turn</ref>. Для максимальной совместимости будем использовать как [[ru_wikipedia:STUN|STUN]], так и [[ru_wikipedia:Traversal Using Relay NAT|TURN]] - все возможные варианты:<br />
<br />
:: '''_stun._tcp.EXAMPLE.COM''' (порт '''3478''') - [[ru_wikipedia:STUN|STUN]] через [[ru_wikipedia:TCP|TCP]]<br />
:: '''_stun._udp.EXAMPLE.COM''' (порт '''3478''') - STUN через UDP<br />
:: '''_stuns._tcp.EXAMPLE.COM''' (порт '''5349''') - шифрованный STUN через TCP<br />
:: '''_turn._tcp.EXAMPLE.COM''' (порт '''3478''') - [[ru_wikipedia:Traversal Using Relay NAT|TURN]] через [[ru_wikipedia:TCP|TCP]]<br />
:: '''_turn._udp.EXAMPLE.COM''' (порт '''3478''') - TURN через UDP<br />
:: '''_turns._tcp.EXAMPLE.COM''' (порт '''5349''') - шифрованный TURN через TCP<br />
<br />
:: Во всех случаях target'ом для записей служит наш алиас из первого пункта.<br />
{{Hider hiding|<br />
|title=Для продвинутых<br />
|content=<br />
:: Самый полный вариант подразумевает в том числе создание SRV-записей для каждого из сервисов-субдоменов - тех, к которым будут подключаться сторонние серверы. Например, для конференций это может выглядеть так:<br />
<br />
:: '''_xmpp-server._tcp.conference.EXAMPLE.COM''' (порт '''5269''')<br />
:: '''_xmpps-server._tcp.conference.EXAMPLE.COM''' (порт '''5270''' для TLS)<br />
<br />
:: Но, как уже говорилось выше, это для совсем уж необычных конфигураций - когда сам домен указывает на один адрес (например, там может работать веб-сервер, предоставляющий чат-логи на сайте https://conference.example.com), а сам jabber-сервер при этом находится совершенно на другом.<br />
}}<br />
Вот как выглядят записи для данного сервера в админке бесплатного DNS-провайдера [https://dns.he.net Hurricane Electric]:<br />
<br />
<center>[[Файл:Jabber srv.png]]</center><br />
<br />
== Сертификаты ==<br />
<br />
<br />
В современном мире стандартной практикой является шифрование соединений, а для этого, в свою очередь, требуются [[ru_wikipedia:Цифровой сертификат|сертификаты]] от доверенных центров сертификации. Можно, конечно, использовать самоподписанный сертификат, но, во-первых, не все серверы будут их принимать - а значит, к ним не получится подключиться и общаться с их пользователями, а во-вторых, в подключающихся клиентах будут появляться сообщения о недоверенном сертификате, что тоже будет доставлять определенные неудобства. Поэтому стоит воспользоваться услугами одного из популярных бесплатных центров сертификации - [https://letsencrypt.org Let's Encrypt].<br />
<br />
Для работы с сертификатами от Let's Encrypt в Debian есть специальный пакет - '''certbot''', поэтому установите его следующей командой:<br />
<br />
sudo apt-get install certbot<br />
<br />
Сертификаты от Let's Encrypt выдаются сроком на 3 месяца, поэтому в конце этого срока их нужно обновлять. Для подтверждения владения доменом, а также для автоматизации обновления сертификатов в дальнейшем со стороны Let's Encrypt делается запрос на веб-сервер для указанного домена, поэтому для полноценной работы стоит установить какой-нибудь популярный вариант и прописать там виртуальные хосты для нашего jabber-сервера, а также сервисов на нем (сертификаты будут делаться в том числе для сервисов). Пример конфигурации веб-сервера Apache для данного сервера:<br />
<br />
{{Hider hiding<br />
|title=apache_to_jabber_service_domains.conf<br />
|content=<pre><br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@jabberworld.info<br />
DocumentRoot /var/www/jabberworld.info/htdocs<br />
ServerName jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@upload.jabberworld.info<br />
DocumentRoot /var/www/upload.jabberworld.info/htdocs<br />
ServerName upload.jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@pubsub.jabberworld.info<br />
DocumentRoot /var/www/pubsub.jabberworld.info/htdocs<br />
ServerName pubsub.jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@conference.jabberworld.info<br />
DocumentRoot /var/www/conference.jabberworld.info/htdocs<br />
ServerName conference.jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@proxy.jabberworld.info<br />
DocumentRoot /var/www/proxy.jabberworld.info/htdocs<br />
ServerName proxy.jabberworld.info<br />
</VirtualHost><br />
</pre><br />
}}<br />
<br />
В каталогах сервера не обязательно должен быть какой-то контент, хотя, например, на основном домене можно разместить какую-то страничку, посвященную jabber-серверу, а на поддомене '''conference''' разместить чат-логи [[Конференции|конференций]]. Субдомен '''upload''' можно приспособить под загружаемые через HTTP Upload файлы, чтобы в дальнейшем их раздавал веб-сервер<ref name="http_upload">В таком случае ему нужно обеспечить доступ к каталогу '''/var/lib/prosody/upload*''', плюс обеспечить нужные права веб-серверу, чтобы он мог читать файлы, загруженные через jabber-сервер. Альтернативный вариант - использовать веб-сервер, обслуживающий домен '''upload.EXAMPLE.COM''' в качестве прокси и заворачивающий все запросы на https://upload.EXAMPLE.COM:5281/file_share/. Такое решение имеет еще одно преимущество: разнообразные клиенты (не только Jabber) будут гораздо охотнее показывать превью для обычных HTTP/HTTPS-ссылок (т.е., на 80 или 443-м порту), а не тех, где контент отдается на "необычном" порту - вроде 5281 в данном примере.</ref>.<br />
<br />
После всех приготовлений<ref>Более подробно можно почитать тут: [[Свой сервер: подготовка веб-сервера и сертификатов]]</ref> создайте все необходимые сертификаты. Для этого воспользуйтесь следующими командами (выполнять надо от пользователя '''root'''):<br />
<br />
certbot certonly --webroot --webroot-path /var/www/EXAMPLE.COM/htdocs/ -d EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/conference.EXAMPLE.COM/htdocs/ -d conference.EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/upload.EXAMPLE.COM/htdocs/ -d upload.EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/pubsub.EXAMPLE.COM/htdocs/ -d pubsub.EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/proxy.EXAMPLE.COM/htdocs/ -d proxy.EXAMPLE.COM --rsa-key-size 4096<br />
<br />
В параметрах после '''--webroot-path''' указывается каталог веб-сервера для данного домена, а после '''-d''' - сам домен.<br />
<br />
После успешного выполнения команд будет выдана информация о созданном сертификате, в том числе 2 файла - цепочка ключей и приватный ключ - сохраните эти пути для дальнейшего использования, они нам еще пригодятся. Всего получится 10 файлов. certbot обновляет сертификаты автоматически, если срок их истечения составляет менее 30 дней - т.е., обновление происходит раз в 2 месяца.<br />
<br />
Так как Prosody работает от своего пользователя и не имеет доступа к сертификатам, созданным certbot от рута, то надо каким-то образом предоставить серверу доступ к сертификатам. Самым простым и корректным вариантом на сейчас является выполнение следующей команды от рута<ref>https://prosody.im/doc/letsencrypt</ref>:<br />
<br />
prosodyctl --root cert import /etc/letsencrypt/live<br />
<br />
В дальнейшем эту команду можно использовать после каждого обновления сертификатов - например, указав ее в качестве deploy hook для certbot.<br />
<br />
== Установка и настройка Prosody ==<br />
<br />
Все подготовительные процедуры завершены, теперь можно приступать непосредственно к установке и настройке своего jabber-сервера. Для поддержки звонков потребуется еще STUN/TURN-сервер - в качестве него будем использовать Coturn. В Debian установить Prosody с поддержкой MySQL<ref name="mysql">На самом деле выбор MySQL обусловлен с одной стороны ее популярностью на веб-хостингах, с другой - возможностью хранить большие объемы данных, которые могут потребоваться, если вы хотите хранить, например, архив сообщений за длительное время. Однако если таких планов нет и это будет сервер для одного или нескольких человек со скромными запросами - то вполне можно обойтись Sqlite.</ref> и Coturn можно командой<br />
<br />
apt-get install prosody coturn lua-dbi-mysql<br />
<br />
'''Примечание''': на момент написания статьи самая последняя версия Prosody - 0.12.4 - доступна в репозитории '''backports'''. Чтобы установить сервер оттуда - добавьте к команде выше ключ '''-t bookworm-backports''' (само-собой, репозиторий должен быть прописан в '''/etc/apt/sources.list''').<br />
<br />
Настройку начнем с Coturn - она очень простая и сводится к включению сервиса в файле '''/etc/default/coturn''' опции '''TURNSERVER_ENABLED=1''', а также приведению конфиг-файла '''/etc/turnserver.conf''' к такому виду:<br />
<br />
{{Hider hiding<br />
|title=/etc/turnserver.conf<br />
|content=<pre><br />
listening-port=3478<br />
tls-listening-port=5349<br />
verbose<br />
use-auth-secret<br />
static-auth-secret=MYSUPERSECRETKEY<br />
userdb=/var/lib/turn/turndb<br />
realm=EXAMPLE.COM<br />
cert=/etc/turncerts/EXAMPLE.COM.fullchain.pem<br />
pkey=/etc/turncerts/EXAMPLE.COM.privkey.pem<br />
syslog<br />
prod<br />
no-multicast-peers<br />
no-cli<br />
no-tlsv1<br />
no-tlsv1_1<br />
no-rfc5780<br />
no-stun-backward-compatibility<br />
response-origin-only-with-rfc5780<br />
</pre><br />
}}<br />
<br />
Фактически, изменения в конфиге сводятся по-большей части к следующему:<br />
<br />
* Указываем прослушиваемые порты - они должны быть такие же, как были указаны в SRV-записях в DNS.<br />
* Включаем '''use-auth-secret''' и указываем придуманный '''ключ-пароль''' - его мы потом укажем в конфиг-файле у Prosody.<br />
* Указываем '''realm''' - домен и сертификат с ключом для него.<br />
<br />
Да, так как Coturn не может напрямую прочитать сертификаты из каталога Let's Encrypt - для правильной работы можно создать отдельный каталог, куда копировать сертификаты с нужными правами. В примере выше это '''/etc/turncerts'''. Команду копирования и изменения прав можно объединить в одном скрипте с командой копирования сертификатов для Prosody и вызывать этот скрипт в качестве deploy hook для Let's Encrypt (или просто по Cron'у, например, раз в неделю).<br />
<br />
Закончив правку конфиг-файла, перезапускаем TURN-сервер:<br />
<br />
systemctl restart coturn.service<br />
<br />
Теперь переходим к настройке Prosody. Как уже говорилось, под него есть множество разнообразных модулей. Для удобства добавления модулей добавьте следующие пакеты:<br />
<br />
apt-get install luarocks liblua5.4-dev lua-luaossl --no-install-recommends<br />
<br />
После чего можно сразу установить полезные модули:<br />
<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_admin_web # Поддержка WEB-интерфейса для управления сервером<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_vcard_muc # Поддержка vCard для конференций<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_muc_moderation # Модерирование конференций и возможность удалять спам<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_cloud_notify # Поддержка PUSH-уведомлений<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_cloud_notify_extensions # Дополнительные модули для PUSH<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_register_web # Поддержка регистрации через веб-страницу<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_mam_adhoc # Возможность управлять настройками MAM-архива из jabber-клиента<br />
<br />
Конфигурационный файл у Prosody состоит из нескольких секций:<br />
* Общие параметры<br />
* Параметры виртуал-хоста<br />
* Параметры сервисов.<br />
<br />
Для удобства то, что относится к виртуал-хосту и его сервисам, вынесено в отдельный файл. Для включения нужного виртуал-хоста поместите симлинк на его конфиг в '''/etc/prosody/conf.d'''.<br />
<br />
{{Hider hiding<br />
|title=/etc/prosody/prosody.cfg.lua<br />
|content=<pre><br />
-- Prosody Example Configuration File<br />
--<br />
-- Information on configuring Prosody can be found on our<br />
-- website at https://prosody.im/doc/configure<br />
--<br />
-- Tip: You can check that the syntax of this file is correct<br />
-- when you have finished by running this command:<br />
-- prosodyctl check config<br />
-- If there are any errors, it will let you know what and where<br />
-- they are, otherwise it will keep quiet.<br />
--<br />
-- The only thing left to do is rename this file to remove the .dist ending, and fill in the<br />
-- blanks. Good luck, and happy Jabbering!<br />
<br />
<br />
---------- Server-wide settings ----------<br />
-- Settings in this section apply to the whole server and are the default settings<br />
-- for any virtual hosts<br />
<br />
-- This is a (by default, empty) list of accounts that are admins<br />
-- for the server. Note that you must create the accounts separately<br />
-- (see https://prosody.im/doc/creating_accounts for info)<br />
-- Example: admins = { "user1@example.com", "user2@example.net" }<br />
admins = {<br />
"admin@EXAMPLE.COM"<br />
}<br />
<br />
-- This option allows you to specify additional locations where Prosody<br />
-- will search first for modules. For additional modules you can install, see<br />
-- the community module repository at https://modules.prosody.im/<br />
-- For a local administrator it's common to place local modifications<br />
-- under /usr/local/ hierarchy:<br />
plugin_paths = {<br />
"/usr/lib/prosody/modules",<br />
"/var/lib/prosody/custom_plugins/"<br />
}<br />
<br />
-- This is the list of modules Prosody will load on startup.<br />
-- Documentation for bundled modules can be found at: https://prosody.im/doc/modules<br />
modules_enabled = {<br />
<br />
-- Generally required<br />
"disco"; -- Service discovery<br />
"roster"; -- Allow users to have a roster. Recommended ;)<br />
"saslauth"; -- Authentication for clients and servers. Recommended if you want to log in.<br />
"tls"; -- Add support for secure TLS on c2s/s2s connections<br />
<br />
-- Not essential, but recommended<br />
"blocklist"; -- Allow users to block communications with other users<br />
"bookmarks"; -- Synchronise the list of open rooms between clients<br />
"carbons"; -- Keep multiple online clients in sync<br />
"dialback"; -- Support for verifying remote servers using DNS<br />
"limits"; -- Enable bandwidth limiting for XMPP connections<br />
"pep"; -- Allow users to store public and private data in their account<br />
"private"; -- Legacy account storage mechanism (XEP-0049)<br />
"smacks"; -- Stream management and resumption (XEP-0198)<br />
"vcard4"; -- User profiles (stored in PEP)<br />
"vcard_legacy"; -- Conversion between legacy vCard and PEP Avatar, vcard<br />
<br />
-- Nice to have<br />
"csi_simple"; -- Simple but effective traffic optimizations for mobile devices<br />
"ping"; -- Replies to XMPP pings with pongs<br />
"register"; -- Allow users to register on this server using a client and change passwords<br />
"time"; -- Let others know the time here on this server<br />
"uptime"; -- Report how long server has been running<br />
"version"; -- Replies to server version requests<br />
"mam"; -- Store recent messages to allow multi-device synchronization<br />
"turn_external"; -- Provide external STUN/TURN service for e.g. audio/video calls<br />
<br />
-- Admin interfaces<br />
"admin_adhoc"; -- Allows administration via an XMPP client that supports ad-hoc commands<br />
"admin_shell"; -- Allow secure administration via 'prosodyctl shell'<br />
<br />
-- HTTP modules<br />
"bosh"; -- Enable BOSH clients, aka "Jabber over HTTP"<br />
--"http_openmetrics"; -- for exposing metrics to stats collectors<br />
"websocket"; -- XMPP over WebSockets<br />
<br />
-- Other specific functionality<br />
"posix"; -- POSIX functionality, sends server to background, enables syslog, etc.<br />
"announce"; -- Send announcement to all online users<br />
--"groups"; -- Shared roster support<br />
--"legacyauth"; -- Legacy authentication. Only used by some old clients and bots.<br />
--"mimicking"; -- Prevent address spoofing<br />
--"motd"; -- Send a message to users when they log in<br />
"s2s_bidi"; -- Bi-directional server-to-server (XEP-0288)<br />
"server_contact_info"; -- Publish contact information for this service<br />
"tombstones"; -- Prevent registration of deleted accounts<br />
"watchregistrations"; -- Alert admins of registrations<br />
"welcome"; -- Welcome users who register accounts<br />
<br />
"cloud_notify"; -- push support<br />
"cloud_notify_extensions"; -- meta-module that simply enables all the modules required to support Siskin or Snikket iOS on a Prosody server<br />
"register_web"; -- registrations via web interface<br />
"mam_adhoc"; -- allowing clients to change archiving preferences<br />
"throttle_presence"; -- automatically cuts down on presence traffic when clients indicate they are inactive<br />
"external_services"; -- calls<br />
"admin_adhoc"; -- ad-hoc administration of server<br />
}<br />
<br />
-- These modules are auto-loaded, but should you want<br />
-- to disable them then uncomment them here:<br />
modules_disabled = {<br />
-- "offline"; -- Store offline messages<br />
-- "c2s"; -- Handle client connections<br />
-- "s2s"; -- Handle server-to-server connections<br />
}<br />
<br />
-- Debian:<br />
-- Please, don't change this option since /run/prosody/<br />
-- is one of the few directories Prosody is allowed to write to<br />
--<br />
pidfile = "/run/prosody/prosody.pid";<br />
<br />
-- Server-to-server authentication<br />
-- Require valid certificates for server-to-server connections?<br />
-- If false, other methods such as dialback (DNS) may be used instead.<br />
<br />
s2s_secure_auth = true<br />
<br />
-- Some servers have invalid or self-signed certificates. You can list<br />
-- remote domains here that will not be required to authenticate using<br />
-- certificates. They will be authenticated using other methods instead,<br />
-- even when s2s_secure_auth is enabled.<br />
<br />
--s2s_insecure_domains = { "insecure.example" }<br />
<br />
-- Even if you disable s2s_secure_auth, you can still require valid<br />
-- certificates for some domains by specifying a list here.<br />
<br />
--s2s_secure_domains = { "jabber.org" }<br />
<br />
<br />
-- Rate limits<br />
-- Enable rate limits for incoming client and server connections. These help<br />
-- protect from excessive resource consumption and denial-of-service attacks.<br />
<br />
limits = {<br />
c2s = {<br />
rate = "3kb/s";<br />
};<br />
s2sin = {<br />
rate = "50kb/s";<br />
};<br />
}<br />
<br />
-- Authentication<br />
-- Select the authentication backend to use. The 'internal' providers<br />
-- use Prosody's configured data storage to store the authentication data.<br />
-- For more information see https://prosody.im/doc/authentication<br />
<br />
authentication = "internal_hashed"<br />
<br />
-- Many authentication providers, including the default one, allow you to<br />
-- create user accounts via Prosody's admin interfaces. For details, see the<br />
-- documentation at https://prosody.im/doc/creating_accounts<br />
<br />
<br />
-- Storage<br />
-- Select the storage backend to use. By default Prosody uses flat files<br />
-- in its configured data directory, but it also supports more backends<br />
-- through modules. An "sql" backend is included by default, but requires<br />
-- additional dependencies. See https://prosody.im/doc/storage for more info.<br />
<br />
storage = "sql" -- Default is "internal" (Debian: "sql" requires one of the<br />
-- lua-dbi-sqlite3, lua-dbi-mysql or lua-dbi-postgresql packages to work)<br />
<br />
-- For the "sql" backend, you can uncomment *one* of the below to configure:<br />
--sql = { driver = "SQLite3", database = "prosody.sqlite" } -- Default. 'database' is the filename.<br />
sql = { driver = "MySQL", database = "jabber_example_com", username = "jabberuser", password = "MYSECRETPASSWORD", host = "localhost" }<br />
--sql = { driver = "PostgreSQL", database = "prosody", username = "prosody", password = "secret", host = "localhost" }<br />
<br />
<br />
-- Archiving configuration<br />
-- If mod_mam is enabled, Prosody will store a copy of every message. This<br />
-- is used to synchronize conversations between multiple clients, even if<br />
-- they are offline. This setting controls how long Prosody will keep<br />
-- messages in the archive before removing them.<br />
<br />
archive_expires_after = "1w" -- Remove archived messages after 1 week<br />
max_archive_query_results = 20;<br />
<br />
-- You can also configure messages to be stored in-memory only. For more<br />
-- archiving options, see https://prosody.im/doc/modules/mod_mam<br />
<br />
<br />
-- Audio/video call relay (STUN/TURN)<br />
-- To ensure clients connected to the server can establish connections for<br />
-- low-latency media streaming (such as audio and video calls), it is<br />
-- recommended to run a STUN/TURN server for clients to use. If you do this,<br />
-- specify the details here so clients can discover it.<br />
-- Find more information at https://prosody.im/doc/turn<br />
<br />
-- Specify the address of the TURN service (you may use the same domain as XMPP)<br />
turn_external_host = "xmpp.EXAMPLE.COM"<br />
<br />
-- This secret must be set to the same value in both Prosody and the TURN server<br />
turn_external_secret = "MYSUPERSECRETKEY"<br />
<br />
<br />
-- Logging configuration<br />
-- For advanced logging see https://prosody.im/doc/logging<br />
--<br />
-- Debian:<br />
-- Logs info and higher to /var/log<br />
-- Logs errors to syslog also<br />
log = {<br />
-- Log files (change 'info' to 'debug' for debug logs):<br />
info = "/var/log/prosody/prosody.log";<br />
error = "/var/log/prosody/prosody.err";<br />
-- Syslog:<br />
{ levels = { "error" }; to = "syslog"; };<br />
}<br />
<br />
<br />
-- Uncomment to enable statistics<br />
-- For more info see https://prosody.im/doc/statistics<br />
statistics = "internal"<br />
<br />
<br />
-- Certificates<br />
-- Every virtual host and component needs a certificate so that clients and<br />
-- servers can securely verify its identity. Prosody will automatically load<br />
-- certificates/keys from the directory specified here.<br />
-- For more information, including how to use 'prosodyctl' to auto-import certificates<br />
-- (from e.g. Let's Encrypt) see https://prosody.im/doc/certificates<br />
<br />
-- Location of directory to find certificates in (relative to main config file):<br />
certificates = "certs"<br />
<br />
c2s_direct_tls_ports = { 5223 }<br />
s2s_direct_tls_ports = { 5270 }<br />
c2s_require_encryption = true<br />
s2s_require_encryption = true<br />
tls_profile = "intermediate" -- "modern" if you don't need TLS 1.2<br />
<br />
contact_info = {<br />
abuse = { "xmpp:admin@EXAMPLE.COM" };<br />
admin = { "xmpp:admin@EXAMPLE.COM" };<br />
feedback = { "xmpp:admin@EXAMPLE.COM" };<br />
support = { "https://EXAMPLE.COM", "xmpp:admin@EXAMPLE.COM" };<br />
}<br />
<br />
external_services = {<br />
{<br />
type = "stun",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "stun",<br />
transport = "udp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "turn",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "turn",<br />
transport = "udp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "stuns",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 5349<br />
}, {<br />
type = "turns",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 5349<br />
}<br />
}<br />
<br />
consider_websocket_secure = true<br />
consider_bosh_secure = true<br />
<br />
----------- Virtual hosts -----------<br />
-- You need to add a VirtualHost entry for each domain you wish Prosody to serve.<br />
-- Settings under each VirtualHost entry apply *only* to that host.<br />
-- It's customary to maintain VirtualHost entries in separate config files<br />
-- under /etc/prosody/conf.d/ directory. Examples of such config files can<br />
-- be found in /etc/prosody/conf.avail/ directory.<br />
<br />
------ Additional config files ------<br />
-- For organizational purposes you may prefer to add VirtualHost and<br />
-- Component definitions in their own config files. This line includes<br />
-- all config files in /etc/prosody/conf.d/<br />
<br />
-- VirtualHost "localhost"<br />
-- Prosody requires at least one enabled VirtualHost to function. You can<br />
-- safely remove or disable 'localhost' once you have added another.<br />
<br />
<br />
--VirtualHost "example.com"<br />
<br />
------ Components ------<br />
-- You can specify components to add hosts that provide special services,<br />
-- like multi-user conferences, and transports.<br />
-- For more information on components, see https://prosody.im/doc/components<br />
<br />
---Set up a MUC (multi-user chat) room server on conference.example.com:<br />
--Component "conference.example.com" "muc"<br />
--- Store MUC messages in an archive and allow users to access it<br />
--modules_enabled = { "muc_mam" }<br />
<br />
---Set up a file sharing component<br />
--Component "share.example.com" "http_file_share"<br />
<br />
---Set up an external component (default component port is 5347)<br />
--<br />
-- External components allow adding various services, such as gateways/<br />
-- bridges to non-XMPP networks and services. For more info<br />
-- see: https://prosody.im/doc/components#adding_an_external_component<br />
--<br />
--Component "gateway.example.com"<br />
-- component_secret = "password"<br />
<br />
Include "conf.d/*.cfg.lua"<br />
<br />
---------- End of the Prosody Configuration file ----------<br />
-- You usually **DO NOT** want to add settings here at the end, as they would<br />
-- only apply to the last defined VirtualHost or Component.<br />
--<br />
-- Settings for the global section should go higher up, before the first<br />
-- VirtualHost or Component line, while settings intended for specific hosts<br />
-- should go under the corresponding VirtualHost or Component line.<br />
--<br />
-- For more information see https://prosody.im/doc/configure<br />
<br />
</pre><br />
}}<br />
<br />
{{Hider hiding<br />
|title=Виртуал хост /etc/prosody/conf.avail/EXAMPLE.COM.cfg.lua<br />
|content=<pre><br />
-- Section for example.com<br />
<br />
VirtualHost "EXAMPLE.COM"<br />
enabled = true<br />
<br />
-- Assign this host a certificate for TLS, otherwise it would use the one<br />
-- set in the global section (if any).<br />
-- Note that old-style SSL on port 5223 only supports one certificate, and will always<br />
-- use the global one.<br />
ssl = {<br />
key = "/etc/prosody/certs/EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
<br />
modules_enabled = {<br />
"admin_web"<br />
--"invites"; -- Create and manage invites<br />
--"invites_adhoc"; -- Allow admins/users to create invitations via their client<br />
--"invites_register"; -- Allows invited users to create accounts<br />
}<br />
allow_registration = false -- Allow users to register new accounts via in-band<br />
<br />
------ Components ------<br />
-- You can specify components to add hosts that provide special services,<br />
-- like multi-user conferences, and transports.<br />
-- For more information on components, see http://prosody.im/doc/components<br />
<br />
<br />
-- Set up a SOCKS5 bytestream proxy for server-proxied file transfers:<br />
Component "proxy.EXAMPLE.COM" "proxy65"<br />
ssl = {<br />
key = "/etc/prosody/certs/proxy.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/proxy.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
-- proxy65_address = "proxy.EXAMPLE.COM"<br />
proxy65_acl = { "EXAMPLE.COM" }<br />
<br />
-- Set up a MUC (multi-user chat) room server on conference.example.com:<br />
Component "conference.EXAMPLE.COM" "muc"<br />
modules_enabled = {<br />
"muc_mam",<br />
"vcard_muc",<br />
"muc_moderation"<br />
}<br />
ssl = {<br />
key = "/etc/prosody/certs/conference.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/conference.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
muc_log_by_default = true<br />
muc_log_presences = false<br />
log_all_rooms = false<br />
muc_log_expires_after = "1w"<br />
muc_log_cleanup_interval = 4 * 60 * 60<br />
restrict_room_creation = "local"<br />
<br />
Component "upload.EXAMPLE.COM" "http_file_share"<br />
ssl = {<br />
key = "/etc/prosody/certs/upload.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/upload.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
<br />
http_file_share_size_limit = 100*1024*1024 -- 100 MB per file<br />
http_file_share_expires_after = 7*86400 -- file expiration - 1 week<br />
http_file_share_global_quota = 1024*1024*1024*10 -- 10 GiB total<br />
<br />
Component "pubsub.EXAMPLE.COM" "pubsub"<br />
ssl = {<br />
key = "/etc/prosody/certs/pubsub.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/pubsub.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
</pre><br />
}}<br />
<br />
Файл конфигурации Prosody очень хорошо комментирован, поэтому рассмотрим ключевые моменты, а также опции, добавленные для дополнительно установленных модулей.<br />
<br />
* Первым в конфиг-файле идет [[Jabber ID]] будущего администратора - ему будут доступны команды управления сервером, а также будут присылаться различные уведомления.<br />
* В '''plugin_paths''' добавляется путь к каталогу с устанавливаемыми плагинами.<br />
* Далее идет обширный список модулей. Рассмотрим некоторые:<br />
** '''turn_external''' позволит нам подключить настроенный ранее Coturn к Prosody для работы звонков.<br />
** '''cloud_notify''' включит поддержку PUSH-уведомлений.<br />
** '''register_web''' включает регистрацию через веб-страницу. Она доступна по адресу https://EXAMPLE.COM:5281/register_web. Штатно тут включена простенькая CAPTCHA, но можно использовать reCaptcha, для этого дополнительно необходимо будет указать ключи для этого сервиса.<br />
** '''admin_adhoc''' позволит выполнять ряд команд на сервере с JID'а администратора из тех клиентов, которые умеют [[Ad-Hoc]].<br />
* Далее следуют настройки, в которых можно усилить или ослабить проверки сертификатов для других серверов.<br />
* Следующей ключевой настройкой будет указание сервера баз данных. Как мы уже условились выше, для хранения данных сервера [[Свой сервер: подготовка базы данных|будем использовать MySQL или MariaDB]]. Prosody имеет весьма простую структуру базы и встроенную схему, поэтому дополнительных действий не требуется.<br />
* В '''archive_expires_after''' можем указать, как скоро нужно чистить архив сообщений для MAM. Для конференций есть отдельная настройка, она будет описана ниже.<br />
* В '''turn_external_host''' и '''turn_external_secret''' указывается адрес Coturn и тот самый ключ, который прописывали в '''/etc/turnserver.conf'''.<br />
* Далее - несколько опций касательно безопасности:<br />
** '''c2s_direct_tls_ports''' и '''s2s_direct_tls_ports''' включает работу с TLS-портами - они должны быть те же, что указывались в SRV-записях в DNS.<br />
** '''c2s_require_encryption''' и '''s2s_require_encryption''' означает использование исключительно шифрованных соединений между серверами, а также между сервером и клиентом.<br />
** '''tls_profile''' настраивает перечень шифров и протоколов, которые может использовать Prosody.<br />
* В '''contact_info''' можно перечислить контакты администратора и, например, адрес конференции поддержки сервера.<br />
* '''external_services''' описывает сервисы, которые предоставляет Coturn.<br />
<br />
На этом настройка основной части завершена и далее идет настройка виртуальных хостов и их сервисов:<br />
<br />
* В секции VirtualHost идет указание SSL-сертификатов для домена, а также разрешение регистрации через jabber-клиент и включение веб-интерфейса для управления сервером, который доступен по адресу https://example.com:5281/admin.<br />
* '''invites''' и сопутствующие ему модули позволяют сделать регистрацию по приглашениям. Однако есть одно но (на сейчас): это отключит обычную регистрацию. Поэтому какой вариант оставить - решайте сами.<br />
<br />
Далее перечисляется несколько компонентов - сервисов для данного сервера. В показанном примере это [[конференции]], [[Передача файлов|proxy]], [[Передача файлов|HTTP Upload]] и [[PEP|pubsub]]. Для каждого из них указывается своя пара сертификатов и ключей.<br />
<br />
* Для '''proxy''' можно указать субдомен, на котором он будет доступен, а опция '''proxy65_acl''' перечисляет домены, которые смогут передавать файлы через этот прокси.<br />
* Для конференций включается поддержка MAM и модерирования. В опциях задается включение MAM по-умолчанию, время устаревания MAM-архива, а также правила доступа на создание новых конференций.<br />
* Для модуля '''http_file_share''' перечисляются лимиты на размеры одиночных файлов, а также общий размер хранилища и время устаревания загруженных файлов. Для Prosody сделано несколько реализаций HTTP Upload - например, можно переключиться на '''mod_http_upload''', если mod_http_file_share чем-то не устроит или вообще использовать [https://github.com/horazont/xmpp-http-upload внешний сервис] через '''http_upload_external'''.<br />
<br />
Закончив правку файлов конфигурации - перезапустите Prosody:<br />
<br />
systemctl restart prosody<br />
<br />
Теперь можете создать пользователя-администратора:<br />
<br />
prosodyctl adduser admin@EXAMPLE.COM<br />
<br />
А также проверить корректность конфигурации следующими командами:<br />
<br />
prosodyctl check config<br />
prosodyctl check certs<br />
prosodyctl check turn<br />
<br />
Во всех случаях в конце команда должна возвращать "'''All checks passed, congratulations!'''". Сервер готов к использованию!<br />
<br />
==Сноски==<br />
<br />
<references/><br />
<br />
==Ссылки==<br />
<br />
* https://prosody.im - домашняя страница Prosody и [https://prosody.im/doc ссылка на документацию]<br />
* [https://open-networks.ru/d/67-prosody-im-v012x-ustanovka-i-nastroyka-xmpp-servera-coturn-fail2ban Очень подробное пользовательское руководство по настройке Prosody]<br />
* [https://www.8host.com/blog/ustanovka-prosody-v-ubuntu-18-04/ Еще одно руководство по установке и настройке]<br />
* [https://pingvinus.ru/note/xmmp-prosody ...и еще одно]<br />
<br />
[[Category:Свой сервер]]</div>Rainhttps://jabberworld.info/index.php?title=Prosody&diff=10228Prosody2023-11-03T18:19:05Z<p>Rain: /* Ссылки */</p>
<hr />
<div>'''Prosody''' — относительно молодой проект, тем не менее, быстро завоевавший большую популярность. Это связано с отличительной чертой Prosody — компактностью. Бесспорно, такие проекты, как [[Jabberd|Jabberd14]] и [[Jabberd|Jabberd2]] тоже нетребовательны к ресурсам, но на сегодняшний день их можно считать морально устаревшими. Prosody отвечает всем требованиям, предъявляемым к современному серверу — поддержка современных XEP, модульная архитектура, расширяемость. Как и [[ejabberd]], Prosody может работать с самыми разнообразными внешними хранилищами данных.<br />
<br />
Главным недостатком Prosody, затрудняющим его реальное использование, является низкая нагрузочная способность. В коде присутствует чрезмерное количество блокирующих операций, вследствие чего функционирование сервера сильно замедляется при нагрузке в несколько сотен одновременно подключённых пользователей, а отметка в тысячу онлайнов практически недостижима. Однако, разработчики проекта стремятся решить эту проблему.<br />
<br />
== Ссылки ==<br />
<br />
* [http://prosody.im Официальный сайт]<br />
* [[JRD:Prosody|Описание на JaWiki]]<br />
* [https://prosody.im/doc/xeplist Поддерживаемые расширения]<br />
* [https://xmpp.org/software/servers/prosody-im/ На xmpp.org]<br />
* [[Свой сервер: подробное руководство по установке Prosody]]<br />
<br />
[[Категория: Свой сервер]]</div>Rainhttps://jabberworld.info/index.php?title=%D0%A1%D0%B2%D0%BE%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80:_%D0%BF%D0%BE%D0%B4%D1%80%D0%BE%D0%B1%D0%BD%D0%BE%D0%B5_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B5_Prosody&diff=10227Свой сервер: подробное руководство по установке Prosody2023-11-02T23:22:27Z<p>Rain: +мануал</p>
<hr />
<div>В этой статье приводится пример настройки [[Prosody]] - одного из самых популярных и легковесных jabber-серверов. Для сервера написано просто-таки [https://modules.prosody.im/all.html огромное число модулей] на все случаи жизни, поэтому в руководстве, основанном на версии 0.12.4, будет показано подключение актуальных и популярных функций. В качестве сертификатов будем использовать Let's Encrypt, а в качестве хранилища данных, в том числе архива сообщений - MySQL<ref name="mysql"></ref> - и все это на Debian GNU/Linux.<br />
<br />
Рассмотрим особенности данной конфигурации.<br />
<br />
__TOC__<br />
<br />
== [[ru_wikipedia:DNS|DNS-записи]] ==<br />
<br />
Хотя для базового варианта своего jabber-сервера вполне достаточно [[Регистрация доменного имени|бесплатного DynDNS-домена]], для полноценной конфигурации все же нужно обзавестись собственным доменом, где можно будет добавить все необходимые DNS-записи и сделать субдомены для сервисов. Выбор регистратора и покупка домена остается за рамками данной статьи, тут только приводятся шаги, которые надо сделать после покупки домена в его админке.<br />
<br />
Всего понадобится около 15 записей в DNS:<br />
<br />
# Для удобства, чтобы в случае миграции сервера с одного IP на другой не приходилось переписывать все записи, стоит завести для него субдомен, который будет ссылаться на нужный IP с помощью А-записи (или 2 таких субдомена в случае использования IPv4+IPv6 - один с A-записью, а второй с AAAA), а все остальные записи сделать CNAME-алиасами для него. Например, для данного сервера ('''jabberworld.info''') сделаны 2 субдомена '''xmpp.jabberworld.info''', ссылающиеся на IPv4 и IPv6-адреса.<br />
# Создаем субдомены для необходимых сервисов сервера<ref>Да, если планируется использовать, например, конференции исключительно локально, то можно обойтись и без DNS-записей - сервер и так знает, куда ему подключаться, так как он этот сервис и предоставляет. Но если хочется полноценный сервис, с которым смогут взаимодействовать и другие сервера - то все же потребуются указанные записи в DNS.</ref> - '''conference''' (для [[Конференции|конференций]]), '''proxy''' (прокси для прямой [[Передача файлов|передачи файлов]]), '''pubsub''' (сервисы типа "Публикация/подписка", где может сохраняться самая разная информация) и '''upload''' (сервис для [[Передача файлов|передачи файлов]] через HTTP Upload). Все эти записи создаем как CNAME на наш субдомен из 1-го пункта.<br />
# Создаем ряд SRV-записей для нашего основного домена - они показывают, где именно какой сервис находится. Конечно, если у вас все на одном адресе, то будет работать и так, но мы ведь решили все делать правильно, верно? Итак, нужны такие SRV-записи:<br />
<br />
:: '''_xmpp-client._tcp.EXAMPLE.COM''' (порт '''5222''') - чтобы указать, куда подключаться [[Клиенты Jabber|jabber-клиенту]]<br />
:: '''_xmpps-client._tcp.EXAMPLE.COM''' (порт '''5223''') - аналогичная запись для [https://xmpp.org/extensions/xep-0368.html TLS-подключений клиентов]<br />
:: '''_xmpp-server._tcp.EXAMPLE.COM''' (порт '''5269''') - чтобы указать, куда подключаться [[Публичные серверы Jabber|jabber-серверу]]<br />
:: '''_xmpps-server._tcp.EXAMPLE.COM''' (порт '''5270''') - аналогичная запись для [https://xmpp.org/extensions/xep-0368.html TLS-подключений серверов].<br />
<br />
:: Записи ниже служат для работы сервиса аудио/видеозвонков через jabber<ref name="avcalls">https://prosody.im/doc/turn</ref>. Для максимальной совместимости будем использовать как [[ru_wikipedia:STUN|STUN]], так и [[ru_wikipedia:Traversal Using Relay NAT|TURN]] - все возможные варианты:<br />
<br />
:: '''_stun._tcp.EXAMPLE.COM''' (порт '''3478''') - [[ru_wikipedia:STUN|STUN]] через [[ru_wikipedia:TCP|TCP]]<br />
:: '''_stun._udp.EXAMPLE.COM''' (порт '''3478''') - STUN через UDP<br />
:: '''_stuns._tcp.EXAMPLE.COM''' (порт '''5349''') - шифрованный STUN через TCP<br />
:: '''_turn._tcp.EXAMPLE.COM''' (порт '''3478''') - [[ru_wikipedia:Traversal Using Relay NAT|TURN]] через [[ru_wikipedia:TCP|TCP]]<br />
:: '''_turn._udp.EXAMPLE.COM''' (порт '''3478''') - TURN через UDP<br />
:: '''_turns._tcp.EXAMPLE.COM''' (порт '''5349''') - шифрованный TURN через TCP<br />
<br />
:: Во всех случаях target'ом для записей служит наш алиас из первого пункта.<br />
{{Hider hiding|<br />
|title=Для продвинутых<br />
|content=<br />
:: Самый полный вариант подразумевает в том числе создание SRV-записей для каждого из сервисов-субдоменов - тех, к которым будут подключаться сторонние серверы. Например, для конференций это может выглядеть так:<br />
<br />
:: '''_xmpp-server._tcp.conference.EXAMPLE.COM''' (порт '''5269''')<br />
:: '''_xmpps-server._tcp.conference.EXAMPLE.COM''' (порт '''5270''' для TLS)<br />
<br />
:: Но, как уже говорилось выше, это для совсем уж необычных конфигураций - когда сам домен указывает на один адрес (например, там может работать веб-сервер, предоставляющий чат-логи на сайте https://conference.example.com), а сам jabber-сервер при этом находится совершенно на другом.<br />
}}<br />
Вот как выглядят записи для данного сервера в админке бесплатного DNS-провайдера [https://dns.he.net Hurricane Electric]:<br />
<br />
<center>[[Файл:Jabber srv.png]]</center><br />
<br />
== Сертификаты ==<br />
<br />
<br />
В современном мире стандартной практикой является шифрование соединений, а для этого, в свою очередь, требуются [[ru_wikipedia:Цифровой сертификат|сертификаты]] от доверенных центров сертификации. Можно, конечно, использовать самоподписанный сертификат, но, во-первых, не все серверы будут их принимать - а значит, к ним не получится подключиться и общаться с их пользователями, а во-вторых, в подключающихся клиентах будут появляться сообщения о недоверенном сертификате, что тоже будет доставлять определенные неудобства. Поэтому стоит воспользоваться услугами одного из популярных бесплатных центров сертификации - [https://letsencrypt.org Let's Encrypt].<br />
<br />
Для работы с сертификатами от Let's Encrypt в Debian есть специальный пакет - '''certbot''', поэтому установите его следующей командой:<br />
<br />
sudo apt-get install certbot<br />
<br />
Сертификаты от Let's Encrypt выдаются сроком на 3 месяца, поэтому в конце этого срока их нужно обновлять. Для подтверждения владения доменом, а также для автоматизации обновления сертификатов в дальнейшем со стороны Let's Encrypt делается запрос на веб-сервер для указанного домена, поэтому для полноценной работы стоит установить какой-нибудь популярный вариант и прописать там виртуальные хосты для нашего jabber-сервера, а также сервисов на нем (сертификаты будут делаться в том числе для сервисов). Пример конфигурации веб-сервера Apache для данного сервера:<br />
<br />
{{Hider hiding<br />
|title=apache_to_jabber_service_domains.conf<br />
|content=<pre><br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@jabberworld.info<br />
DocumentRoot /var/www/jabberworld.info/htdocs<br />
ServerName jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@upload.jabberworld.info<br />
DocumentRoot /var/www/upload.jabberworld.info/htdocs<br />
ServerName upload.jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@pubsub.jabberworld.info<br />
DocumentRoot /var/www/pubsub.jabberworld.info/htdocs<br />
ServerName pubsub.jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@conference.jabberworld.info<br />
DocumentRoot /var/www/conference.jabberworld.info/htdocs<br />
ServerName conference.jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@proxy.jabberworld.info<br />
DocumentRoot /var/www/proxy.jabberworld.info/htdocs<br />
ServerName proxy.jabberworld.info<br />
</VirtualHost><br />
</pre><br />
}}<br />
<br />
В каталогах сервера не обязательно должен быть какой-то контент, хотя, например, на основном домене можно разместить какую-то страничку, посвященную jabber-серверу, а на поддомене '''conference''' разместить чат-логи [[Конференции|конференций]]. Субдомен '''upload''' можно приспособить под загружаемые через HTTP Upload файлы, чтобы в дальнейшем их раздавал веб-сервер<ref name="http_upload">В таком случае ему нужно обеспечить доступ к каталогу '''/var/lib/prosody/upload*''', плюс обеспечить нужные права веб-серверу, чтобы он мог читать файлы, загруженные через jabber-сервер. Альтернативный вариант - использовать веб-сервер, обслуживающий домен '''upload.EXAMPLE.COM''' в качестве прокси и заворачивающий все запросы на https://upload.EXAMPLE.COM:5281/file_share/. Такое решение имеет еще одно преимущество: разнообразные клиенты (не только Jabber) будут гораздо охотнее показывать превью для обычных HTTP/HTTPS-ссылок (т.е., на 80 или 443-м порту), а не тех, где контент отдается на "необычном" порту - вроде 5281 в данном примере.</ref>.<br />
<br />
После всех приготовлений<ref>Более подробно можно почитать тут: [[Свой сервер: подготовка веб-сервера и сертификатов]]</ref> создайте все необходимые сертификаты. Для этого воспользуйтесь следующими командами (выполнять надо от пользователя '''root'''):<br />
<br />
certbot certonly --webroot --webroot-path /var/www/EXAMPLE.COM/htdocs/ -d EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/conference.EXAMPLE.COM/htdocs/ -d conference.EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/upload.EXAMPLE.COM/htdocs/ -d upload.EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/pubsub.EXAMPLE.COM/htdocs/ -d pubsub.EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/proxy.EXAMPLE.COM/htdocs/ -d proxy.EXAMPLE.COM --rsa-key-size 4096<br />
<br />
В параметрах после '''--webroot-path''' указывается каталог веб-сервера для данного домена, а после '''-d''' - сам домен.<br />
<br />
После успешного выполнения команд будет выдана информация о созданном сертификате, в том числе 2 файла - цепочка ключей и приватный ключ - сохраните эти пути для дальнейшего использования, они нам еще пригодятся. Всего получится 10 файлов. certbot обновляет сертификаты автоматически, если срок их истечения составляет менее 30 дней - т.е., обновление происходит раз в 2 месяца.<br />
<br />
Так как Prosody работает от своего пользователя и не имеет доступа к сертификатам, созданным certbot от рута, то надо каким-то образом предоставить доступ ejabberd'у к сертификатам. Самым простым и корректным вариантом на сейчас является выполнение следующей команды от рута<ref>https://prosody.im/doc/letsencrypt</ref>:<br />
<br />
prosodyctl --root cert import /etc/letsencrypt/live<br />
<br />
В дальнейшем эту команду можно использовать после каждого обновления сертификатов - например, указав ее в качестве deploy hook для certbot.<br />
<br />
== Установка и настройка Prosody ==<br />
<br />
Все подготовительные процедуры завершены, теперь можно приступать непосредственно к установке и настройке своего jabber-сервера. Для поддержки звонков потребуется еще STUN/TURN-сервер - в качестве него будем использовать Coturn. В Debian установить Prosody с поддержкой MySQL<ref name="mysql">На самом деле выбор MySQL обусловлен с одной стороны ее популярностью на веб-хостингах, с другой - возможностью хранить большие объемы данных, которые могут потребоваться, если вы хотите хранить, например, архив сообщений за длительное время. Однако если таких планов нет и это будет сервер для одного или нескольких человек со скромными запросами - то вполне можно обойтись Sqlite.</ref> и Coturn можно командой<br />
<br />
apt-get install prosody coturn lua-dbi-mysql<br />
<br />
'''Примечание''': на момент написания статьи самая последняя версия Prosody - 0.12.4 - доступна в репозитории '''backports'''. Чтобы установить сервер оттуда - добавьте к команде выше ключ '''-t bookworm-backports''' (само-собой, репозиторий должен быть прописан в '''/etc/apt/sources.list''').<br />
<br />
Настройку начнем с Coturn - она очень простая и сводится к включению сервиса в файле '''/etc/default/coturn''' опции '''TURNSERVER_ENABLED=1''', а также приведению конфиг-файла '''/etc/turnserver.conf''' к такому виду:<br />
<br />
{{Hider hiding<br />
|title=/etc/turnserver.conf<br />
|content=<pre><br />
listening-port=3478<br />
tls-listening-port=5349<br />
verbose<br />
use-auth-secret<br />
static-auth-secret=MYSUPERSECRETKEY<br />
userdb=/var/lib/turn/turndb<br />
realm=EXAMPLE.COM<br />
cert=/etc/turncerts/EXAMPLE.COM.fullchain.pem<br />
pkey=/etc/turncerts/EXAMPLE.COM.privkey.pem<br />
syslog<br />
prod<br />
no-multicast-peers<br />
no-cli<br />
no-tlsv1<br />
no-tlsv1_1<br />
no-rfc5780<br />
no-stun-backward-compatibility<br />
response-origin-only-with-rfc5780<br />
</pre><br />
}}<br />
<br />
Фактически, изменения в конфиге сводятся по-большей части к следующему:<br />
<br />
* Указываем прослушиваемые порты - они должны быть такие же, как были указаны в SRV-записях в DNS.<br />
* Включаем '''use-auth-secret''' и указываем придуманный '''ключ-пароль''' - его мы потом укажем в конфиг-файле у Prosody.<br />
* Указываем '''realm''' - домен и сертификат с ключом для него.<br />
<br />
Да, так как Coturn не может напрямую прочитать сертификаты из каталога Let's Encrypt - для правильной работы можно создать отдельный каталог, куда копировать сертификаты с нужными правами. В примере выше это '''/etc/turncerts'''. Команду копирования и изменения прав можно объединить в одном скрипте с командой копирования сертификатов для Prosody и вызывать этот скрипт в качестве deploy hook для Let's Encrypt (или просто по Cron'у, например, раз в неделю).<br />
<br />
Закончив правку конфиг-файла, перезапускаем TURN-сервер:<br />
<br />
systemctl restart coturn.service<br />
<br />
Теперь переходим к настройке Prosody. Как уже говорилось, под него есть множество разнообразных модулей. Для удобства добавления модулей добавьте следующие пакеты:<br />
<br />
apt-get install luarocks liblua5.4-dev lua-luaossl --no-install-recommends<br />
<br />
После чего можно сразу установить полезные модули:<br />
<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_admin_web # Поддержка WEB-интерфейса для управления сервером<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_vcard_muc # Поддержка vCard для конференций<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_muc_moderation # Модерирование конференций и возможность удалять спам<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_cloud_notify # Поддержка PUSH-уведомлений<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_cloud_notify_extensions # Дополнительные модули для PUSH<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_register_web # Поддержка регистрации через веб-страницу<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_mam_adhoc # Возможность управлять настройками MAM-архива из jabber-клиента<br />
<br />
Конфигурационный файл у Prosody состоит из нескольких секций:<br />
* Общие параметры<br />
* Параметры виртуал-хоста<br />
* Параметры сервисов.<br />
<br />
Для удобства то, что относится к виртуал-хосту и его сервисам, вынесено в отдельный файл. Для включения нужного виртуал-хоста поместите симлинк на его конфиг в '''/etc/prosody/conf.d'''.<br />
<br />
{{Hider hiding<br />
|title=/etc/prosody/prosody.cfg.lua<br />
|content=<pre><br />
-- Prosody Example Configuration File<br />
--<br />
-- Information on configuring Prosody can be found on our<br />
-- website at https://prosody.im/doc/configure<br />
--<br />
-- Tip: You can check that the syntax of this file is correct<br />
-- when you have finished by running this command:<br />
-- prosodyctl check config<br />
-- If there are any errors, it will let you know what and where<br />
-- they are, otherwise it will keep quiet.<br />
--<br />
-- The only thing left to do is rename this file to remove the .dist ending, and fill in the<br />
-- blanks. Good luck, and happy Jabbering!<br />
<br />
<br />
---------- Server-wide settings ----------<br />
-- Settings in this section apply to the whole server and are the default settings<br />
-- for any virtual hosts<br />
<br />
-- This is a (by default, empty) list of accounts that are admins<br />
-- for the server. Note that you must create the accounts separately<br />
-- (see https://prosody.im/doc/creating_accounts for info)<br />
-- Example: admins = { "user1@example.com", "user2@example.net" }<br />
admins = {<br />
"admin@EXAMPLE.COM"<br />
}<br />
<br />
-- This option allows you to specify additional locations where Prosody<br />
-- will search first for modules. For additional modules you can install, see<br />
-- the community module repository at https://modules.prosody.im/<br />
-- For a local administrator it's common to place local modifications<br />
-- under /usr/local/ hierarchy:<br />
plugin_paths = {<br />
"/usr/lib/prosody/modules",<br />
"/var/lib/prosody/custom_plugins/"<br />
}<br />
<br />
-- This is the list of modules Prosody will load on startup.<br />
-- Documentation for bundled modules can be found at: https://prosody.im/doc/modules<br />
modules_enabled = {<br />
<br />
-- Generally required<br />
"disco"; -- Service discovery<br />
"roster"; -- Allow users to have a roster. Recommended ;)<br />
"saslauth"; -- Authentication for clients and servers. Recommended if you want to log in.<br />
"tls"; -- Add support for secure TLS on c2s/s2s connections<br />
<br />
-- Not essential, but recommended<br />
"blocklist"; -- Allow users to block communications with other users<br />
"bookmarks"; -- Synchronise the list of open rooms between clients<br />
"carbons"; -- Keep multiple online clients in sync<br />
"dialback"; -- Support for verifying remote servers using DNS<br />
"limits"; -- Enable bandwidth limiting for XMPP connections<br />
"pep"; -- Allow users to store public and private data in their account<br />
"private"; -- Legacy account storage mechanism (XEP-0049)<br />
"smacks"; -- Stream management and resumption (XEP-0198)<br />
"vcard4"; -- User profiles (stored in PEP)<br />
"vcard_legacy"; -- Conversion between legacy vCard and PEP Avatar, vcard<br />
<br />
-- Nice to have<br />
"csi_simple"; -- Simple but effective traffic optimizations for mobile devices<br />
"ping"; -- Replies to XMPP pings with pongs<br />
"register"; -- Allow users to register on this server using a client and change passwords<br />
"time"; -- Let others know the time here on this server<br />
"uptime"; -- Report how long server has been running<br />
"version"; -- Replies to server version requests<br />
"mam"; -- Store recent messages to allow multi-device synchronization<br />
"turn_external"; -- Provide external STUN/TURN service for e.g. audio/video calls<br />
<br />
-- Admin interfaces<br />
"admin_adhoc"; -- Allows administration via an XMPP client that supports ad-hoc commands<br />
"admin_shell"; -- Allow secure administration via 'prosodyctl shell'<br />
<br />
-- HTTP modules<br />
"bosh"; -- Enable BOSH clients, aka "Jabber over HTTP"<br />
--"http_openmetrics"; -- for exposing metrics to stats collectors<br />
"websocket"; -- XMPP over WebSockets<br />
<br />
-- Other specific functionality<br />
"posix"; -- POSIX functionality, sends server to background, enables syslog, etc.<br />
"announce"; -- Send announcement to all online users<br />
--"groups"; -- Shared roster support<br />
--"legacyauth"; -- Legacy authentication. Only used by some old clients and bots.<br />
--"mimicking"; -- Prevent address spoofing<br />
--"motd"; -- Send a message to users when they log in<br />
"s2s_bidi"; -- Bi-directional server-to-server (XEP-0288)<br />
"server_contact_info"; -- Publish contact information for this service<br />
"tombstones"; -- Prevent registration of deleted accounts<br />
"watchregistrations"; -- Alert admins of registrations<br />
"welcome"; -- Welcome users who register accounts<br />
<br />
"cloud_notify"; -- push support<br />
"cloud_notify_extensions"; -- meta-module that simply enables all the modules required to support Siskin or Snikket iOS on a Prosody server<br />
"register_web"; -- registrations via web interface<br />
"mam_adhoc"; -- allowing clients to change archiving preferences<br />
"throttle_presence"; -- automatically cuts down on presence traffic when clients indicate they are inactive<br />
"external_services"; -- calls<br />
"admin_adhoc"; -- ad-hoc administration of server<br />
}<br />
<br />
-- These modules are auto-loaded, but should you want<br />
-- to disable them then uncomment them here:<br />
modules_disabled = {<br />
-- "offline"; -- Store offline messages<br />
-- "c2s"; -- Handle client connections<br />
-- "s2s"; -- Handle server-to-server connections<br />
}<br />
<br />
-- Debian:<br />
-- Please, don't change this option since /run/prosody/<br />
-- is one of the few directories Prosody is allowed to write to<br />
--<br />
pidfile = "/run/prosody/prosody.pid";<br />
<br />
-- Server-to-server authentication<br />
-- Require valid certificates for server-to-server connections?<br />
-- If false, other methods such as dialback (DNS) may be used instead.<br />
<br />
s2s_secure_auth = true<br />
<br />
-- Some servers have invalid or self-signed certificates. You can list<br />
-- remote domains here that will not be required to authenticate using<br />
-- certificates. They will be authenticated using other methods instead,<br />
-- even when s2s_secure_auth is enabled.<br />
<br />
--s2s_insecure_domains = { "insecure.example" }<br />
<br />
-- Even if you disable s2s_secure_auth, you can still require valid<br />
-- certificates for some domains by specifying a list here.<br />
<br />
--s2s_secure_domains = { "jabber.org" }<br />
<br />
<br />
-- Rate limits<br />
-- Enable rate limits for incoming client and server connections. These help<br />
-- protect from excessive resource consumption and denial-of-service attacks.<br />
<br />
limits = {<br />
c2s = {<br />
rate = "3kb/s";<br />
};<br />
s2sin = {<br />
rate = "50kb/s";<br />
};<br />
}<br />
<br />
-- Authentication<br />
-- Select the authentication backend to use. The 'internal' providers<br />
-- use Prosody's configured data storage to store the authentication data.<br />
-- For more information see https://prosody.im/doc/authentication<br />
<br />
authentication = "internal_hashed"<br />
<br />
-- Many authentication providers, including the default one, allow you to<br />
-- create user accounts via Prosody's admin interfaces. For details, see the<br />
-- documentation at https://prosody.im/doc/creating_accounts<br />
<br />
<br />
-- Storage<br />
-- Select the storage backend to use. By default Prosody uses flat files<br />
-- in its configured data directory, but it also supports more backends<br />
-- through modules. An "sql" backend is included by default, but requires<br />
-- additional dependencies. See https://prosody.im/doc/storage for more info.<br />
<br />
storage = "sql" -- Default is "internal" (Debian: "sql" requires one of the<br />
-- lua-dbi-sqlite3, lua-dbi-mysql or lua-dbi-postgresql packages to work)<br />
<br />
-- For the "sql" backend, you can uncomment *one* of the below to configure:<br />
--sql = { driver = "SQLite3", database = "prosody.sqlite" } -- Default. 'database' is the filename.<br />
sql = { driver = "MySQL", database = "jabber_example_com", username = "jabberuser", password = "MYSECRETPASSWORD", host = "localhost" }<br />
--sql = { driver = "PostgreSQL", database = "prosody", username = "prosody", password = "secret", host = "localhost" }<br />
<br />
<br />
-- Archiving configuration<br />
-- If mod_mam is enabled, Prosody will store a copy of every message. This<br />
-- is used to synchronize conversations between multiple clients, even if<br />
-- they are offline. This setting controls how long Prosody will keep<br />
-- messages in the archive before removing them.<br />
<br />
archive_expires_after = "1w" -- Remove archived messages after 1 week<br />
max_archive_query_results = 20;<br />
<br />
-- You can also configure messages to be stored in-memory only. For more<br />
-- archiving options, see https://prosody.im/doc/modules/mod_mam<br />
<br />
<br />
-- Audio/video call relay (STUN/TURN)<br />
-- To ensure clients connected to the server can establish connections for<br />
-- low-latency media streaming (such as audio and video calls), it is<br />
-- recommended to run a STUN/TURN server for clients to use. If you do this,<br />
-- specify the details here so clients can discover it.<br />
-- Find more information at https://prosody.im/doc/turn<br />
<br />
-- Specify the address of the TURN service (you may use the same domain as XMPP)<br />
turn_external_host = "xmpp.EXAMPLE.COM"<br />
<br />
-- This secret must be set to the same value in both Prosody and the TURN server<br />
turn_external_secret = "MYSUPERSECRETKEY"<br />
<br />
<br />
-- Logging configuration<br />
-- For advanced logging see https://prosody.im/doc/logging<br />
--<br />
-- Debian:<br />
-- Logs info and higher to /var/log<br />
-- Logs errors to syslog also<br />
log = {<br />
-- Log files (change 'info' to 'debug' for debug logs):<br />
info = "/var/log/prosody/prosody.log";<br />
error = "/var/log/prosody/prosody.err";<br />
-- Syslog:<br />
{ levels = { "error" }; to = "syslog"; };<br />
}<br />
<br />
<br />
-- Uncomment to enable statistics<br />
-- For more info see https://prosody.im/doc/statistics<br />
statistics = "internal"<br />
<br />
<br />
-- Certificates<br />
-- Every virtual host and component needs a certificate so that clients and<br />
-- servers can securely verify its identity. Prosody will automatically load<br />
-- certificates/keys from the directory specified here.<br />
-- For more information, including how to use 'prosodyctl' to auto-import certificates<br />
-- (from e.g. Let's Encrypt) see https://prosody.im/doc/certificates<br />
<br />
-- Location of directory to find certificates in (relative to main config file):<br />
certificates = "certs"<br />
<br />
c2s_direct_tls_ports = { 5223 }<br />
s2s_direct_tls_ports = { 5270 }<br />
c2s_require_encryption = true<br />
s2s_require_encryption = true<br />
tls_profile = "intermediate" -- "modern" if you don't need TLS 1.2<br />
<br />
contact_info = {<br />
abuse = { "xmpp:admin@EXAMPLE.COM" };<br />
admin = { "xmpp:admin@EXAMPLE.COM" };<br />
feedback = { "xmpp:admin@EXAMPLE.COM" };<br />
support = { "https://EXAMPLE.COM", "xmpp:admin@EXAMPLE.COM" };<br />
}<br />
<br />
external_services = {<br />
{<br />
type = "stun",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "stun",<br />
transport = "udp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "turn",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "turn",<br />
transport = "udp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "stuns",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 5349<br />
}, {<br />
type = "turns",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 5349<br />
}<br />
}<br />
<br />
consider_websocket_secure = true<br />
consider_bosh_secure = true<br />
<br />
----------- Virtual hosts -----------<br />
-- You need to add a VirtualHost entry for each domain you wish Prosody to serve.<br />
-- Settings under each VirtualHost entry apply *only* to that host.<br />
-- It's customary to maintain VirtualHost entries in separate config files<br />
-- under /etc/prosody/conf.d/ directory. Examples of such config files can<br />
-- be found in /etc/prosody/conf.avail/ directory.<br />
<br />
------ Additional config files ------<br />
-- For organizational purposes you may prefer to add VirtualHost and<br />
-- Component definitions in their own config files. This line includes<br />
-- all config files in /etc/prosody/conf.d/<br />
<br />
-- VirtualHost "localhost"<br />
-- Prosody requires at least one enabled VirtualHost to function. You can<br />
-- safely remove or disable 'localhost' once you have added another.<br />
<br />
<br />
--VirtualHost "example.com"<br />
<br />
------ Components ------<br />
-- You can specify components to add hosts that provide special services,<br />
-- like multi-user conferences, and transports.<br />
-- For more information on components, see https://prosody.im/doc/components<br />
<br />
---Set up a MUC (multi-user chat) room server on conference.example.com:<br />
--Component "conference.example.com" "muc"<br />
--- Store MUC messages in an archive and allow users to access it<br />
--modules_enabled = { "muc_mam" }<br />
<br />
---Set up a file sharing component<br />
--Component "share.example.com" "http_file_share"<br />
<br />
---Set up an external component (default component port is 5347)<br />
--<br />
-- External components allow adding various services, such as gateways/<br />
-- bridges to non-XMPP networks and services. For more info<br />
-- see: https://prosody.im/doc/components#adding_an_external_component<br />
--<br />
--Component "gateway.example.com"<br />
-- component_secret = "password"<br />
<br />
Include "conf.d/*.cfg.lua"<br />
<br />
---------- End of the Prosody Configuration file ----------<br />
-- You usually **DO NOT** want to add settings here at the end, as they would<br />
-- only apply to the last defined VirtualHost or Component.<br />
--<br />
-- Settings for the global section should go higher up, before the first<br />
-- VirtualHost or Component line, while settings intended for specific hosts<br />
-- should go under the corresponding VirtualHost or Component line.<br />
--<br />
-- For more information see https://prosody.im/doc/configure<br />
<br />
</pre><br />
}}<br />
<br />
{{Hider hiding<br />
|title=Виртуал хост /etc/prosody/conf.avail/EXAMPLE.COM.cfg.lua<br />
|content=<pre><br />
-- Section for example.com<br />
<br />
VirtualHost "EXAMPLE.COM"<br />
enabled = true<br />
<br />
-- Assign this host a certificate for TLS, otherwise it would use the one<br />
-- set in the global section (if any).<br />
-- Note that old-style SSL on port 5223 only supports one certificate, and will always<br />
-- use the global one.<br />
ssl = {<br />
key = "/etc/prosody/certs/EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
<br />
modules_enabled = {<br />
"admin_web"<br />
--"invites"; -- Create and manage invites<br />
--"invites_adhoc"; -- Allow admins/users to create invitations via their client<br />
--"invites_register"; -- Allows invited users to create accounts<br />
}<br />
allow_registration = false -- Allow users to register new accounts via in-band<br />
<br />
------ Components ------<br />
-- You can specify components to add hosts that provide special services,<br />
-- like multi-user conferences, and transports.<br />
-- For more information on components, see http://prosody.im/doc/components<br />
<br />
<br />
-- Set up a SOCKS5 bytestream proxy for server-proxied file transfers:<br />
Component "proxy.EXAMPLE.COM" "proxy65"<br />
ssl = {<br />
key = "/etc/prosody/certs/proxy.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/proxy.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
-- proxy65_address = "proxy.EXAMPLE.COM"<br />
proxy65_acl = { "EXAMPLE.COM" }<br />
<br />
-- Set up a MUC (multi-user chat) room server on conference.example.com:<br />
Component "conference.EXAMPLE.COM" "muc"<br />
modules_enabled = {<br />
"muc_mam",<br />
"vcard_muc",<br />
"muc_moderation"<br />
}<br />
ssl = {<br />
key = "/etc/prosody/certs/conference.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/conference.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
muc_log_by_default = true<br />
muc_log_presences = false<br />
log_all_rooms = false<br />
muc_log_expires_after = "1w"<br />
muc_log_cleanup_interval = 4 * 60 * 60<br />
restrict_room_creation = "local"<br />
<br />
Component "upload.EXAMPLE.COM" "http_file_share"<br />
ssl = {<br />
key = "/etc/prosody/certs/upload.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/upload.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
<br />
http_file_share_size_limit = 100*1024*1024 -- 100 MB per file<br />
http_file_share_expires_after = 7*86400 -- file expiration - 1 week<br />
http_file_share_global_quota = 1024*1024*1024*10 -- 10 GiB total<br />
<br />
Component "pubsub.EXAMPLE.COM" "pubsub"<br />
ssl = {<br />
key = "/etc/prosody/certs/pubsub.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/pubsub.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
</pre><br />
}}<br />
<br />
Файл конфигурации Prosody очень хорошо комментирован, поэтому рассмотрим ключевые моменты, а также опции, добавленные для дополнительно установленных модулей.<br />
<br />
* Первым в конфиг-файле идет [[Jabber ID]] будущего администратора - ему будут доступны команды управления сервером, а также будут присылаться различные уведомления.<br />
* В '''plugin_paths''' добавляется путь к каталогу с устанавливаемыми плагинами.<br />
* Далее идет обширный список модулей. Рассмотрим некоторые:<br />
** '''turn_external''' позволит нам подключить настроенный ранее Coturn к Prosody для работы звонков.<br />
** '''cloud_notify''' включит поддержку PUSH-уведомлений.<br />
** '''register_web''' включает регистрацию через веб-страницу. Она доступна по адресу https://EXAMPLE.COM:5281/register_web. Штатно тут включена простенькая CAPTCHA, но можно использовать reCaptcha, для этого дополнительно необходимо будет указать ключи для этого сервиса.<br />
** '''admin_adhoc''' позволит выполнять ряд команд на сервере с JID'а администратора из тех клиентов, которые умеют [[Ad-Hoc]].<br />
* Далее следуют настройки, в которых можно усилить или ослабить проверки сертификатов для других серверов.<br />
* Следующей ключевой настройкой будет указание сервера баз данных. Как мы уже условились выше, для хранения данных сервера [[Свой сервер: подготовка базы данных|будем использовать MySQL или MariaDB]]. Prosody имеет весьма простую структуру базы и встроенную схему, поэтому дополнительных действий не требуется.<br />
* В '''archive_expires_after''' можем указать, как скоро нужно чистить архив сообщений для MAM. Для конференций есть отдельная настройка, она будет описана ниже.<br />
* В '''turn_external_host''' и '''turn_external_secret''' указывается адрес Coturn и тот самый ключ, который прописывали в '''/etc/turnserver.conf'''.<br />
* Далее - несколько опций касательно безопасности:<br />
** '''c2s_direct_tls_ports''' и '''s2s_direct_tls_ports''' включает работу с TLS-портами - они должны быть те же, что указывались в SRV-записях в DNS.<br />
** '''c2s_require_encryption''' и '''s2s_require_encryption''' означает использование исключительно шифрованных соединений между серверами, а также между сервером и клиентом.<br />
** '''tls_profile''' настраивает перечень шифров и протоколов, которые может использовать Prosody.<br />
* В '''contact_info''' можно перечислить контакты администратора и, например, адрес конференции поддержки сервера.<br />
* '''external_services''' описывает сервисы, которые предоставляет Coturn.<br />
<br />
На этом настройка основной части завершена и далее идет настройка виртуальных хостов и их сервисов:<br />
<br />
* В секции VirtualHost идет указание SSL-сертификатов для домена, а также разрешение регистрации через jabber-клиент и включение веб-интерфейса для управления сервером, который доступен по адресу https://example.com:5281/admin.<br />
* '''invites''' и сопутствующие ему модули позволяют сделать регистрацию по приглашениям. Однако есть одно но (на сейчас): это отключит обычную регистрацию. Поэтому какой вариант оставить - решайте сами.<br />
<br />
Далее перечисляется несколько компонентов - сервисов для данного сервера. В показанном примере это [[конференции]], [[Передача файлов|proxy]], [[Передача файлов|HTTP Upload]] и [[PEP|pubsub]]. Для каждого из них указывается своя пара сертификатов и ключей.<br />
<br />
* Для '''proxy''' можно указать субдомен, на котором он будет доступен, а опция '''proxy65_acl''' перечисляет домены, которые смогут передавать файлы через этот прокси.<br />
* Для конференций включается поддержка MAM и модерирования. В опциях задается включение MAM по-умолчанию, время устаревания MAM-архива, а также правила доступа на создание новых конференций.<br />
* Для модуля '''http_file_share''' перечисляются лимиты на размеры одиночных файлов, а также общий размер хранилища и время устаревания загруженных файлов. Для Prosody сделано несколько реализаций HTTP Upload - например, можно переключиться на '''mod_http_upload''', если mod_http_file_share чем-то не устроит или вообще использовать [https://github.com/horazont/xmpp-http-upload внешний сервис] через '''http_upload_external'''.<br />
<br />
Закончив правку файлов конфигурации - перезапустите Prosody:<br />
<br />
systemctl restart prosody<br />
<br />
Теперь можете создать пользователя-администратора:<br />
<br />
prosodyctl adduser admin@EXAMPLE.COM<br />
<br />
А также проверить корректность конфигурации следующими командами:<br />
<br />
prosodyctl check config<br />
prosodyctl check certs<br />
prosodyctl check turn<br />
<br />
Во всех случаях в конце команда должна возвращать "'''All checks passed, congratulations!'''". Сервер готов к использованию!<br />
<br />
==Сноски==<br />
<br />
<references/><br />
<br />
==Ссылки==<br />
<br />
* https://prosody.im - домашняя страница Prosody и [https://prosody.im/doc ссылка на документацию]<br />
* [https://open-networks.ru/d/67-prosody-im-v012x-ustanovka-i-nastroyka-xmpp-servera-coturn-fail2ban Очень подробное пользовательское руководство по настройке Prosody]<br />
* [https://www.8host.com/blog/ustanovka-prosody-v-ubuntu-18-04/ Еще одно руководство по установке и настройке]<br />
* [https://pingvinus.ru/note/xmmp-prosody ...и еще одно]<br />
<br />
[[Category:Свой сервер]]</div>Rainhttps://jabberworld.info/index.php?title=%D0%A1%D0%B2%D0%BE%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80:_%D0%BF%D0%BE%D0%B4%D1%80%D0%BE%D0%B1%D0%BD%D0%BE%D0%B5_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B5_Prosody&diff=10226Свой сервер: подробное руководство по установке Prosody2023-11-02T22:19:36Z<p>Rain: </p>
<hr />
<div>В этой статье приводится пример настройки [[Prosody]] - одного из самых популярных и легковесных jabber-серверов. Для сервера написано просто-таки [https://modules.prosody.im/all.html огромное число модулей] на все случаи жизни, поэтому в руководстве, основанном на версии 0.12.4, будет показано подключение актуальных и популярных функций. В качестве сертификатов будем использовать Let's Encrypt, а в качестве хранилища данных, в том числе архива сообщений - MySQL<ref name="mysql"></ref> - и все это на Debian GNU/Linux.<br />
<br />
Рассмотрим особенности данной конфигурации.<br />
<br />
__TOC__<br />
<br />
== [[ru_wikipedia:DNS|DNS-записи]] ==<br />
<br />
Хотя для базового варианта своего jabber-сервера вполне достаточно [[Регистрация доменного имени|бесплатного DynDNS-домена]], для полноценной конфигурации все же нужно обзавестись собственным доменом, где можно будет добавить все необходимые DNS-записи и сделать субдомены для сервисов. Выбор регистратора и покупка домена остается за рамками данной статьи, тут только приводятся шаги, которые надо сделать после покупки домена в его админке.<br />
<br />
Всего понадобится около 15 записей в DNS:<br />
<br />
# Для удобства, чтобы в случае миграции сервера с одного IP на другой не приходилось переписывать все записи, стоит завести для него субдомен, который будет ссылаться на нужный IP с помощью А-записи (или 2 таких субдомена в случае использования IPv4+IPv6 - один с A-записью, а второй с AAAA), а все остальные записи сделать CNAME-алиасами для него. Например, для данного сервера ('''jabberworld.info''') сделаны 2 субдомена '''xmpp.jabberworld.info''', ссылающиеся на IPv4 и IPv6-адреса.<br />
# Создаем субдомены для необходимых сервисов сервера<ref>Да, если планируется использовать, например, конференции исключительно локально, то можно обойтись и без DNS-записей - сервер и так знает, куда ему подключаться, так как он этот сервис и предоставляет. Но если хочется полноценный сервис, с которым смогут взаимодействовать и другие сервера - то все же потребуются указанные записи в DNS.</ref> - '''conference''' (для [[Конференции|конференций]]), '''proxy''' (прокси для прямой [[Передача файлов|передачи файлов]]), '''pubsub''' (сервисы типа "Публикация/подписка", где может сохраняться самая разная информация) и '''upload''' (сервис для [[Передача файлов|передачи файлов]] через HTTP Upload). Все эти записи создаем как CNAME на наш субдомен из 1-го пункта.<br />
# Создаем ряд SRV-записей для нашего основного домена - они показывают, где именно какой сервис находится. Конечно, если у вас все на одном адресе, то будет работать и так, но мы ведь решили все делать правильно, верно? Итак, нужны такие SRV-записи:<br />
<br />
:: '''_xmpp-client._tcp.EXAMPLE.COM''' (порт '''5222''') - чтобы указать, куда подключаться [[Клиенты Jabber|jabber-клиенту]]<br />
:: '''_xmpps-client._tcp.EXAMPLE.COM''' (порт '''5223''') - аналогичная запись для [https://xmpp.org/extensions/xep-0368.html TLS-подключений клиентов]<br />
:: '''_xmpp-server._tcp.EXAMPLE.COM''' (порт '''5269''') - чтобы указать, куда подключаться [[Публичные серверы Jabber|jabber-серверу]]<br />
:: '''_xmpps-server._tcp.EXAMPLE.COM''' (порт '''5270''') - аналогичная запись для [https://xmpp.org/extensions/xep-0368.html TLS-подключений серверов].<br />
<br />
:: Записи ниже служат для работы сервиса аудио/видеозвонков через jabber<ref name="avcalls">https://prosody.im/doc/turn</ref>. Для максимальной совместимости будем использовать как [[ru_wikipedia:STUN|STUN]], так и [[ru_wikipedia:Traversal Using Relay NAT|TURN]] - все возможные варианты:<br />
<br />
:: '''_stun._tcp.EXAMPLE.COM''' (порт '''3478''') - [[ru_wikipedia:STUN|STUN]] через [[ru_wikipedia:TCP|TCP]]<br />
:: '''_stun._udp.EXAMPLE.COM''' (порт '''3478''') - STUN через UDP<br />
:: '''_stuns._tcp.EXAMPLE.COM''' (порт '''5349''') - шифрованный STUN через TCP<br />
:: '''_turn._tcp.EXAMPLE.COM''' (порт '''3478''') - [[ru_wikipedia:Traversal Using Relay NAT|TURN]] через [[ru_wikipedia:TCP|TCP]]<br />
:: '''_turn._udp.EXAMPLE.COM''' (порт '''3478''') - TURN через UDP<br />
:: '''_turns._tcp.EXAMPLE.COM''' (порт '''5349''') - шифрованный TURN через TCP<br />
<br />
:: Во всех случаях target'ом для записей служит наш алиас из первого пункта.<br />
{{Hider hiding|<br />
|title=Для продвинутых<br />
|content=<br />
:: Самый полный вариант подразумевает в том числе создание SRV-записей для каждого из сервисов-субдоменов - тех, к которым будут подключаться сторонние серверы. Например, для конференций это может выглядеть так:<br />
<br />
:: '''_xmpp-server._tcp.conference.EXAMPLE.COM''' (порт '''5269''')<br />
:: '''_xmpps-server._tcp.conference.EXAMPLE.COM''' (порт '''5270''' для TLS)<br />
<br />
:: Но, как уже говорилось выше, это для совсем уж необычных конфигураций - когда сам домен указывает на один адрес (например, там может работать веб-сервер, предоставляющий чат-логи на сайте https://conference.example.com), а сам jabber-сервер при этом находится совершенно на другом.<br />
}}<br />
Вот как выглядят записи для данного сервера в админке бесплатного DNS-провайдера [https://dns.he.net Hurricane Electric]:<br />
<br />
<center>[[Файл:Jabber srv.png]]</center><br />
<br />
== Сертификаты ==<br />
<br />
<br />
В современном мире стандартной практикой является шифрование соединений, а для этого, в свою очередь, требуются [[ru_wikipedia:Цифровой сертификат|сертификаты]] от доверенных центров сертификации. Можно, конечно, использовать самоподписанный сертификат, но, во-первых, не все серверы будут их принимать - а значит, к ним не получится подключиться и общаться с их пользователями, а во-вторых, в подключающихся клиентах будут появляться сообщения о недоверенном сертификате, что тоже будет доставлять определенные неудобства. Поэтому стоит воспользоваться услугами одного из популярных бесплатных центров сертификации - [https://letsencrypt.org Let's Encrypt].<br />
<br />
Для работы с сертификатами от Let's Encrypt в Debian есть специальный пакет - '''certbot''', поэтому установите его следующей командой:<br />
<br />
sudo apt-get install certbot<br />
<br />
Сертификаты от Let's Encrypt выдаются сроком на 3 месяца, поэтому в конце этого срока их нужно обновлять. Для подтверждения владения доменом, а также для автоматизации обновления сертификатов в дальнейшем со стороны Let's Encrypt делается запрос на веб-сервер для указанного домена, поэтому для полноценной работы стоит установить какой-нибудь популярный вариант и прописать там виртуальные хосты для нашего jabber-сервера, а также сервисов на нем (сертификаты будут делаться в том числе для сервисов). Пример конфигурации веб-сервера Apache для данного сервера:<br />
<br />
{{Hider hiding<br />
|title=apache_to_jabber_service_domains.conf<br />
|content=<pre><br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@jabberworld.info<br />
DocumentRoot /var/www/jabberworld.info/htdocs<br />
ServerName jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@upload.jabberworld.info<br />
DocumentRoot /var/www/upload.jabberworld.info/htdocs<br />
ServerName upload.jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@pubsub.jabberworld.info<br />
DocumentRoot /var/www/pubsub.jabberworld.info/htdocs<br />
ServerName pubsub.jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@conference.jabberworld.info<br />
DocumentRoot /var/www/conference.jabberworld.info/htdocs<br />
ServerName conference.jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@proxy.jabberworld.info<br />
DocumentRoot /var/www/proxy.jabberworld.info/htdocs<br />
ServerName proxy.jabberworld.info<br />
</VirtualHost><br />
</pre><br />
}}<br />
<br />
В каталогах сервера не обязательно должен быть какой-то контент, хотя, например, на основном домене можно разместить какую-то страничку, посвященную jabber-серверу, а на поддомене '''conference''' разместить чат-логи [[Конференции|конференций]]. Субдомен '''upload''' можно приспособить под загружаемые через HTTP Upload файлы, чтобы в дальнейшем их раздавал веб-сервер<ref name="http_upload">В таком случае ему нужно обеспечить доступ к каталогу '''/var/lib/prosody/upload*''', плюс обеспечить нужные права веб-серверу, чтобы он мог читать файлы, загруженные через jabber-сервер. Альтернативный вариант - использовать веб-сервер, обслуживающий домен '''upload.EXAMPLE.COM''' в качестве прокси и заворачивающий все запросы на https://upload.EXAMPLE.COM:5281/file_share/. Такое решение имеет еще одно преимущество: разнообразные клиенты (не только Jabber) будут гораздо охотнее показывать превью для обычных HTTP/HTTPS-ссылок (т.е., на 80 или 443-м порту), а не тех, где контент отдается на "необычном" порту - вроде 5281 в данном примере.</ref>.<br />
<br />
После всех приготовлений<ref>Более подробно можно почитать тут: [[Свой сервер: подготовка веб-сервера и сертификатов]]</ref> создайте все необходимые сертификаты. Для этого воспользуйтесь следующими командами (выполнять надо от пользователя '''root'''):<br />
<br />
certbot certonly --webroot --webroot-path /var/www/EXAMPLE.COM/htdocs/ -d EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/conference.EXAMPLE.COM/htdocs/ -d conference.EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/upload.EXAMPLE.COM/htdocs/ -d upload.EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/pubsub.EXAMPLE.COM/htdocs/ -d pubsub.EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/proxy.EXAMPLE.COM/htdocs/ -d proxy.EXAMPLE.COM --rsa-key-size 4096<br />
<br />
В параметрах после '''--webroot-path''' указывается каталог веб-сервера для данного домена, а после '''-d''' - сам домен.<br />
<br />
После успешного выполнения команд будет выдана информация о созданном сертификате, в том числе 2 файла - цепочка ключей и приватный ключ - сохраните эти пути для дальнейшего использования, они нам еще пригодятся. Всего получится 10 файлов. certbot обновляет сертификаты автоматически, если срок их истечения составляет менее 30 дней - т.е., обновление происходит раз в 2 месяца.<br />
<br />
Так как Prosody работает от своего пользователя и не имеет доступа к сертификатам, созданным certbot от рута, то надо каким-то образом предоставить доступ ejabberd'у к сертификатам. Самым простым и корректным вариантом на сейчас является выполнение следующей команды от рута<ref>https://prosody.im/doc/letsencrypt</ref>:<br />
<br />
prosodyctl --root cert import /etc/letsencrypt/live<br />
<br />
В дальнейшем эту команду можно использовать после каждого обновления сертификатов - например, указав ее в качестве deploy hook для certbot.<br />
<br />
== Установка и настройка Prosody ==<br />
<br />
Все подготовительные процедуры завершены, теперь можно приступать непосредственно к установке и настройке своего jabber-сервера. Для поддержки звонков потребуется еще STUN/TURN-сервер - в качестве него будем использовать Coturn. В Debian установить Prosody с поддержкой MySQL<ref name="mysql">На самом деле выбор MySQL обусловлен с одной стороны ее популярностью на веб-хостингах, с другой - возможностью хранить большие объемы данных, которые могут потребоваться, если вы хотите хранить, например, архив сообщений за длительное время. Однако если таких планов нет и это будет сервер для одного или нескольких человек со скромными запросами - то вполне можно обойтись Sqlite.</ref> и Coturn можно командой<br />
<br />
apt-get install prosody coturn lua-dbi-mysql<br />
<br />
'''Примечание''': на момент написания статьи самая последняя версия Prosody - 0.12.4 - доступна в репозитории '''backports'''. Чтобы установить сервер оттуда - добавьте к команде выше ключ '''-t bookworm-backports''' (само-собой, репозиторий должен быть прописан в '''/etc/apt/sources.list''').<br />
<br />
Настройку начнем с Coturn - она очень простая и сводится к включению сервиса в файле '''/etc/default/coturn''' опции '''TURNSERVER_ENABLED=1''', а также приведению конфиг-файла '''/etc/turnserver.conf''' к такому виду:<br />
<br />
{{Hider hiding<br />
|title=/etc/turnserver.conf<br />
|content=<pre><br />
listening-port=3478<br />
tls-listening-port=5349<br />
verbose<br />
use-auth-secret<br />
static-auth-secret=MYSUPERSECRETKEY<br />
userdb=/var/lib/turn/turndb<br />
realm=EXAMPLE.COM<br />
cert=/etc/turncerts/EXAMPLE.COM.fullchain.pem<br />
pkey=/etc/turncerts/EXAMPLE.COM.privkey.pem<br />
syslog<br />
prod<br />
no-multicast-peers<br />
no-cli<br />
no-tlsv1<br />
no-tlsv1_1<br />
no-rfc5780<br />
no-stun-backward-compatibility<br />
response-origin-only-with-rfc5780<br />
</pre><br />
}}<br />
<br />
Фактически, изменения в конфиге сводятся по-большей части к следующему:<br />
<br />
* Указываем прослушиваемые порты - они должны быть такие же, как были указаны в SRV-записях в DNS.<br />
* Включаем '''use-auth-secret''' и указываем придуманный '''ключ-пароль''' - его мы потом укажем в конфиг-файле у Prosody.<br />
* Указываем '''realm''' - домен и сертификат с ключом для него.<br />
<br />
Да, так как Coturn не может напрямую прочитать сертификаты из каталога Let's Encrypt - для правильной работы можно создать отдельный каталог, куда копировать сертификаты с нужными правами. В примере выше это '''/etc/turncerts'''. Команду копирования и изменения прав можно объединить в одном скрипте с командой копирования сертификатов для Prosody и вызывать этот скрипт в качестве deploy hook для Let's Encrypt (или просто по Cron'у, например, раз в неделю).<br />
<br />
Закончив правку конфиг-файла, перезапускаем TURN-сервер:<br />
<br />
systemctl restart coturn.service<br />
<br />
Теперь переходим к настройке Prosody. Как уже говорилось, под него есть множество разнообразных модулей. Для удобства добавления модулей добавьте следующие пакеты:<br />
<br />
apt-get install luarocks liblua5.4-dev lua-luaossl --no-install-recommends<br />
<br />
После чего можно сразу установить полезные модули:<br />
<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_admin_web # Поддержка WEB-интерфейса для управления сервером<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_vcard_muc # Поддержка vCard для конференций<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_muc_moderation # Модерирование конференций и возможность удалять спам<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_cloud_notify # Поддержка PUSH-уведомлений<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_cloud_notify_extensions # Дополнительные модули для PUSH<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_register_web # Поддержка регистрации через веб-страницу<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_mam_adhoc # Возможность управлять настройками MAM-архива из jabber-клиента<br />
<br />
Конфигурационный файл у Prosody состоит из нескольких секций:<br />
* Общие параметры<br />
* Параметры виртуал-хоста<br />
* Параметры сервисов.<br />
<br />
Для удобства то, что относится к виртуал-хосту и его сервисам, вынесено в отдельный файл. Для включения нужного виртуал-хоста поместите симлинк на его конфиг в '''/etc/prosody/conf.d'''.<br />
<br />
{{Hider hiding<br />
|title=/etc/prosody/prosody.cfg.lua<br />
|content=<pre><br />
-- Prosody Example Configuration File<br />
--<br />
-- Information on configuring Prosody can be found on our<br />
-- website at https://prosody.im/doc/configure<br />
--<br />
-- Tip: You can check that the syntax of this file is correct<br />
-- when you have finished by running this command:<br />
-- prosodyctl check config<br />
-- If there are any errors, it will let you know what and where<br />
-- they are, otherwise it will keep quiet.<br />
--<br />
-- The only thing left to do is rename this file to remove the .dist ending, and fill in the<br />
-- blanks. Good luck, and happy Jabbering!<br />
<br />
<br />
---------- Server-wide settings ----------<br />
-- Settings in this section apply to the whole server and are the default settings<br />
-- for any virtual hosts<br />
<br />
-- This is a (by default, empty) list of accounts that are admins<br />
-- for the server. Note that you must create the accounts separately<br />
-- (see https://prosody.im/doc/creating_accounts for info)<br />
-- Example: admins = { "user1@example.com", "user2@example.net" }<br />
admins = {<br />
"admin@EXAMPLE.COM"<br />
}<br />
<br />
-- This option allows you to specify additional locations where Prosody<br />
-- will search first for modules. For additional modules you can install, see<br />
-- the community module repository at https://modules.prosody.im/<br />
-- For a local administrator it's common to place local modifications<br />
-- under /usr/local/ hierarchy:<br />
plugin_paths = {<br />
"/usr/lib/prosody/modules",<br />
"/var/lib/prosody/custom_plugins/"<br />
}<br />
<br />
-- This is the list of modules Prosody will load on startup.<br />
-- Documentation for bundled modules can be found at: https://prosody.im/doc/modules<br />
modules_enabled = {<br />
<br />
-- Generally required<br />
"disco"; -- Service discovery<br />
"roster"; -- Allow users to have a roster. Recommended ;)<br />
"saslauth"; -- Authentication for clients and servers. Recommended if you want to log in.<br />
"tls"; -- Add support for secure TLS on c2s/s2s connections<br />
<br />
-- Not essential, but recommended<br />
"blocklist"; -- Allow users to block communications with other users<br />
"bookmarks"; -- Synchronise the list of open rooms between clients<br />
"carbons"; -- Keep multiple online clients in sync<br />
"dialback"; -- Support for verifying remote servers using DNS<br />
"limits"; -- Enable bandwidth limiting for XMPP connections<br />
"pep"; -- Allow users to store public and private data in their account<br />
"private"; -- Legacy account storage mechanism (XEP-0049)<br />
"smacks"; -- Stream management and resumption (XEP-0198)<br />
"vcard4"; -- User profiles (stored in PEP)<br />
"vcard_legacy"; -- Conversion between legacy vCard and PEP Avatar, vcard<br />
<br />
-- Nice to have<br />
"csi_simple"; -- Simple but effective traffic optimizations for mobile devices<br />
"ping"; -- Replies to XMPP pings with pongs<br />
"register"; -- Allow users to register on this server using a client and change passwords<br />
"time"; -- Let others know the time here on this server<br />
"uptime"; -- Report how long server has been running<br />
"version"; -- Replies to server version requests<br />
"mam"; -- Store recent messages to allow multi-device synchronization<br />
"turn_external"; -- Provide external STUN/TURN service for e.g. audio/video calls<br />
<br />
-- Admin interfaces<br />
"admin_adhoc"; -- Allows administration via an XMPP client that supports ad-hoc commands<br />
"admin_shell"; -- Allow secure administration via 'prosodyctl shell'<br />
<br />
-- HTTP modules<br />
"bosh"; -- Enable BOSH clients, aka "Jabber over HTTP"<br />
--"http_openmetrics"; -- for exposing metrics to stats collectors<br />
"websocket"; -- XMPP over WebSockets<br />
<br />
-- Other specific functionality<br />
"posix"; -- POSIX functionality, sends server to background, enables syslog, etc.<br />
"announce"; -- Send announcement to all online users<br />
--"groups"; -- Shared roster support<br />
--"legacyauth"; -- Legacy authentication. Only used by some old clients and bots.<br />
--"mimicking"; -- Prevent address spoofing<br />
--"motd"; -- Send a message to users when they log in<br />
"s2s_bidi"; -- Bi-directional server-to-server (XEP-0288)<br />
"server_contact_info"; -- Publish contact information for this service<br />
"tombstones"; -- Prevent registration of deleted accounts<br />
"watchregistrations"; -- Alert admins of registrations<br />
"welcome"; -- Welcome users who register accounts<br />
<br />
"cloud_notify"; -- push support<br />
"cloud_notify_extensions"; -- meta-module that simply enables all the modules required to support Siskin or Snikket iOS on a Prosody server<br />
"register_web"; -- registrations via web interface<br />
"mam_adhoc"; -- allowing clients to change archiving preferences<br />
"throttle_presence"; -- automatically cuts down on presence traffic when clients indicate they are inactive<br />
"external_services"; -- calls<br />
"admin_adhoc"; -- ad-hoc administration of server<br />
}<br />
<br />
-- These modules are auto-loaded, but should you want<br />
-- to disable them then uncomment them here:<br />
modules_disabled = {<br />
-- "offline"; -- Store offline messages<br />
-- "c2s"; -- Handle client connections<br />
-- "s2s"; -- Handle server-to-server connections<br />
}<br />
<br />
-- Debian:<br />
-- Please, don't change this option since /run/prosody/<br />
-- is one of the few directories Prosody is allowed to write to<br />
--<br />
pidfile = "/run/prosody/prosody.pid";<br />
<br />
-- Server-to-server authentication<br />
-- Require valid certificates for server-to-server connections?<br />
-- If false, other methods such as dialback (DNS) may be used instead.<br />
<br />
s2s_secure_auth = true<br />
<br />
-- Some servers have invalid or self-signed certificates. You can list<br />
-- remote domains here that will not be required to authenticate using<br />
-- certificates. They will be authenticated using other methods instead,<br />
-- even when s2s_secure_auth is enabled.<br />
<br />
--s2s_insecure_domains = { "insecure.example" }<br />
<br />
-- Even if you disable s2s_secure_auth, you can still require valid<br />
-- certificates for some domains by specifying a list here.<br />
<br />
--s2s_secure_domains = { "jabber.org" }<br />
<br />
<br />
-- Rate limits<br />
-- Enable rate limits for incoming client and server connections. These help<br />
-- protect from excessive resource consumption and denial-of-service attacks.<br />
<br />
limits = {<br />
c2s = {<br />
rate = "3kb/s";<br />
};<br />
s2sin = {<br />
rate = "50kb/s";<br />
};<br />
}<br />
<br />
-- Authentication<br />
-- Select the authentication backend to use. The 'internal' providers<br />
-- use Prosody's configured data storage to store the authentication data.<br />
-- For more information see https://prosody.im/doc/authentication<br />
<br />
authentication = "internal_hashed"<br />
<br />
-- Many authentication providers, including the default one, allow you to<br />
-- create user accounts via Prosody's admin interfaces. For details, see the<br />
-- documentation at https://prosody.im/doc/creating_accounts<br />
<br />
<br />
-- Storage<br />
-- Select the storage backend to use. By default Prosody uses flat files<br />
-- in its configured data directory, but it also supports more backends<br />
-- through modules. An "sql" backend is included by default, but requires<br />
-- additional dependencies. See https://prosody.im/doc/storage for more info.<br />
<br />
storage = "sql" -- Default is "internal" (Debian: "sql" requires one of the<br />
-- lua-dbi-sqlite3, lua-dbi-mysql or lua-dbi-postgresql packages to work)<br />
<br />
-- For the "sql" backend, you can uncomment *one* of the below to configure:<br />
--sql = { driver = "SQLite3", database = "prosody.sqlite" } -- Default. 'database' is the filename.<br />
sql = { driver = "MySQL", database = "jabber_example_com", username = "jabberuser", password = "MYSECRETPASSWORD", host = "localhost" }<br />
--sql = { driver = "PostgreSQL", database = "prosody", username = "prosody", password = "secret", host = "localhost" }<br />
<br />
<br />
-- Archiving configuration<br />
-- If mod_mam is enabled, Prosody will store a copy of every message. This<br />
-- is used to synchronize conversations between multiple clients, even if<br />
-- they are offline. This setting controls how long Prosody will keep<br />
-- messages in the archive before removing them.<br />
<br />
archive_expires_after = "1w" -- Remove archived messages after 1 week<br />
max_archive_query_results = 20;<br />
<br />
-- You can also configure messages to be stored in-memory only. For more<br />
-- archiving options, see https://prosody.im/doc/modules/mod_mam<br />
<br />
<br />
-- Audio/video call relay (STUN/TURN)<br />
-- To ensure clients connected to the server can establish connections for<br />
-- low-latency media streaming (such as audio and video calls), it is<br />
-- recommended to run a STUN/TURN server for clients to use. If you do this,<br />
-- specify the details here so clients can discover it.<br />
-- Find more information at https://prosody.im/doc/turn<br />
<br />
-- Specify the address of the TURN service (you may use the same domain as XMPP)<br />
turn_external_host = "xmpp.EXAMPLE.COM"<br />
<br />
-- This secret must be set to the same value in both Prosody and the TURN server<br />
turn_external_secret = "MYSUPERSECRETKEY"<br />
<br />
<br />
-- Logging configuration<br />
-- For advanced logging see https://prosody.im/doc/logging<br />
--<br />
-- Debian:<br />
-- Logs info and higher to /var/log<br />
-- Logs errors to syslog also<br />
log = {<br />
-- Log files (change 'info' to 'debug' for debug logs):<br />
info = "/var/log/prosody/prosody.log";<br />
error = "/var/log/prosody/prosody.err";<br />
-- Syslog:<br />
{ levels = { "error" }; to = "syslog"; };<br />
}<br />
<br />
<br />
-- Uncomment to enable statistics<br />
-- For more info see https://prosody.im/doc/statistics<br />
statistics = "internal"<br />
<br />
<br />
-- Certificates<br />
-- Every virtual host and component needs a certificate so that clients and<br />
-- servers can securely verify its identity. Prosody will automatically load<br />
-- certificates/keys from the directory specified here.<br />
-- For more information, including how to use 'prosodyctl' to auto-import certificates<br />
-- (from e.g. Let's Encrypt) see https://prosody.im/doc/certificates<br />
<br />
-- Location of directory to find certificates in (relative to main config file):<br />
certificates = "certs"<br />
<br />
c2s_direct_tls_ports = { 5223 }<br />
s2s_direct_tls_ports = { 5270 }<br />
c2s_require_encryption = true<br />
s2s_require_encryption = true<br />
tls_profile = "intermediate" -- "modern" if you don't need TLS 1.2<br />
<br />
contact_info = {<br />
abuse = { "xmpp:admin@EXAMPLE.COM" };<br />
admin = { "xmpp:admin@EXAMPLE.COM" };<br />
feedback = { "xmpp:admin@EXAMPLE.COM" };<br />
support = { "https://EXAMPLE.COM", "xmpp:admin@EXAMPLE.COM" };<br />
}<br />
<br />
external_services = {<br />
{<br />
type = "stun",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "stun",<br />
transport = "udp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "turn",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "turn",<br />
transport = "udp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "stuns",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 5349<br />
}, {<br />
type = "turns",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 5349<br />
}<br />
}<br />
<br />
consider_websocket_secure = true<br />
consider_bosh_secure = true<br />
<br />
----------- Virtual hosts -----------<br />
-- You need to add a VirtualHost entry for each domain you wish Prosody to serve.<br />
-- Settings under each VirtualHost entry apply *only* to that host.<br />
-- It's customary to maintain VirtualHost entries in separate config files<br />
-- under /etc/prosody/conf.d/ directory. Examples of such config files can<br />
-- be found in /etc/prosody/conf.avail/ directory.<br />
<br />
------ Additional config files ------<br />
-- For organizational purposes you may prefer to add VirtualHost and<br />
-- Component definitions in their own config files. This line includes<br />
-- all config files in /etc/prosody/conf.d/<br />
<br />
-- VirtualHost "localhost"<br />
-- Prosody requires at least one enabled VirtualHost to function. You can<br />
-- safely remove or disable 'localhost' once you have added another.<br />
<br />
<br />
--VirtualHost "example.com"<br />
<br />
------ Components ------<br />
-- You can specify components to add hosts that provide special services,<br />
-- like multi-user conferences, and transports.<br />
-- For more information on components, see https://prosody.im/doc/components<br />
<br />
---Set up a MUC (multi-user chat) room server on conference.example.com:<br />
--Component "conference.example.com" "muc"<br />
--- Store MUC messages in an archive and allow users to access it<br />
--modules_enabled = { "muc_mam" }<br />
<br />
---Set up a file sharing component<br />
--Component "share.example.com" "http_file_share"<br />
<br />
---Set up an external component (default component port is 5347)<br />
--<br />
-- External components allow adding various services, such as gateways/<br />
-- bridges to non-XMPP networks and services. For more info<br />
-- see: https://prosody.im/doc/components#adding_an_external_component<br />
--<br />
--Component "gateway.example.com"<br />
-- component_secret = "password"<br />
<br />
Include "conf.d/*.cfg.lua"<br />
<br />
---------- End of the Prosody Configuration file ----------<br />
-- You usually **DO NOT** want to add settings here at the end, as they would<br />
-- only apply to the last defined VirtualHost or Component.<br />
--<br />
-- Settings for the global section should go higher up, before the first<br />
-- VirtualHost or Component line, while settings intended for specific hosts<br />
-- should go under the corresponding VirtualHost or Component line.<br />
--<br />
-- For more information see https://prosody.im/doc/configure<br />
<br />
</pre><br />
}}<br />
<br />
{{Hider hiding<br />
|title=Виртуал хост /etc/prosody/conf.avail/EXAMPLE.COM.cfg.lua<br />
|content=<pre><br />
-- Section for example.com<br />
<br />
VirtualHost "EXAMPLE.COM"<br />
enabled = true<br />
<br />
-- Assign this host a certificate for TLS, otherwise it would use the one<br />
-- set in the global section (if any).<br />
-- Note that old-style SSL on port 5223 only supports one certificate, and will always<br />
-- use the global one.<br />
ssl = {<br />
key = "/etc/prosody/certs/EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
<br />
modules_enabled = {<br />
"admin_web"<br />
--"invites"; -- Create and manage invites<br />
--"invites_adhoc"; -- Allow admins/users to create invitations via their client<br />
--"invites_register"; -- Allows invited users to create accounts<br />
}<br />
allow_registration = false -- Allow users to register new accounts via in-band<br />
<br />
------ Components ------<br />
-- You can specify components to add hosts that provide special services,<br />
-- like multi-user conferences, and transports.<br />
-- For more information on components, see http://prosody.im/doc/components<br />
<br />
<br />
-- Set up a SOCKS5 bytestream proxy for server-proxied file transfers:<br />
Component "proxy.EXAMPLE.COM" "proxy65"<br />
ssl = {<br />
key = "/etc/prosody/certs/proxy.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/proxy.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
-- proxy65_address = "proxy.EXAMPLE.COM"<br />
proxy65_acl = { "EXAMPLE.COM" }<br />
<br />
-- Set up a MUC (multi-user chat) room server on conference.example.com:<br />
Component "conference.EXAMPLE.COM" "muc"<br />
modules_enabled = {<br />
"muc_mam",<br />
"vcard_muc",<br />
"muc_moderation"<br />
}<br />
ssl = {<br />
key = "/etc/prosody/certs/conference.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/conference.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
muc_log_by_default = true<br />
muc_log_presences = false<br />
log_all_rooms = false<br />
muc_log_expires_after = "1w"<br />
muc_log_cleanup_interval = 4 * 60 * 60<br />
restrict_room_creation = "local"<br />
<br />
Component "upload.EXAMPLE.COM" "http_file_share"<br />
ssl = {<br />
key = "/etc/prosody/certs/upload.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/upload.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
<br />
http_file_share_size_limit = 100*1024*1024 -- 100 MB per file<br />
http_file_share_expires_after = 7*86400 -- file expiration - 1 week<br />
http_file_share_global_quota = 1024*1024*1024*10 -- 10 GiB total<br />
<br />
Component "pubsub.EXAMPLE.COM" "pubsub"<br />
ssl = {<br />
key = "/etc/prosody/certs/pubsub.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/pubsub.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
</pre><br />
}}<br />
<br />
Файл конфигурации Prosody очень хорошо комментирован, поэтому рассмотрим ключевые моменты, а также опции, добавленные для дополнительно установленных модулей.<br />
<br />
* Первым в конфиг-файле идет [[Jabber ID]] будущего администратора - ему будут доступны команды управления сервером, а также будут присылаться различные уведомления.<br />
* В '''plugin_paths''' добавляется путь к каталогу с устанавливаемыми плагинами.<br />
* Далее идет обширный список модулей. Рассмотрим некоторые:<br />
** '''turn_external''' позволит нам подключить настроенный ранее Coturn к Prosody для работы звонков.<br />
** '''cloud_notify''' включит поддержку PUSH-уведомлений.<br />
** '''register_web''' включает регистрацию через веб-страницу. Она доступна по адресу https://EXAMPLE.COM:5281/register_web. Штатно тут включена простенькая CAPTCHA, но можно использовать reCaptcha, для этого дополнительно необходимо будет указать ключи для этого сервиса.<br />
** '''admin_adhoc''' позволит выполнять ряд команд на сервере с JID'а администратора из тех клиентов, которые умеют [[Ad-Hoc]].<br />
* Далее следуют настройки, в которых можно усилить или ослабить проверки сертификатов для других серверов.<br />
* Следующей ключевой настройкой будет указание сервера баз данных. Как мы уже условились выше, для хранения данных сервера [[Свой сервер: подготовка базы данных|будем использовать MySQL или MariaDB]]. Prosody имеет весьма простую структуру базы и встроенную схему, поэтому дополнительных действий не требуется.<br />
* В '''archive_expires_after''' можем указать, как скоро нужно чистить архив сообщений для MAM. Для конференций есть отдельная настройка, она будет описана ниже.<br />
* В '''turn_external_host''' и '''turn_external_secret''' указывается адрес Coturn и тот самый ключ, который прописывали в '''/etc/turnserver.conf'''.<br />
* Далее - несколько опций касательно безопасности:<br />
** '''c2s_direct_tls_ports''' и '''s2s_direct_tls_ports''' включает работу с TLS-портами - они должны быть те же, что указывались в SRV-записях в DNS.<br />
** '''c2s_require_encryption''' и '''s2s_require_encryption''' означает использование исключительно шифрованных соединений между серверами, а также между сервером и клиентом.<br />
** '''tls_profile''' настраивает перечень шифров и протоколов, которые может использовать Prosody.<br />
* В '''contact_info''' можно перечислить контакты администратора и, например, адрес конференции поддержки сервера.<br />
* '''external_services''' описывает сервисы, которые предоставляет Coturn.<br />
<br />
На этом настройка основной части завершена и далее идет настройка виртуальных хостов и их сервисов:<br />
<br />
* В секции VirtualHost идет указание SSL-сертификатов для домена, а также разрешение регистрации через jabber-клиент и включение веб-интерфейса для управления сервером, который доступен по адресу https://example.com:5281/admin.<br />
* '''invites''' и сопутствующие ему модули позволяют сделать регистрацию по приглашениям. Однако есть одно но (на сейчас): это отключит обычную регистрацию. Поэтому какой вариант оставить - решайте сами.<br />
<br />
Далее перечисляется несколько компонентов - сервисов для данного сервера. В показанном примере это [[конференции]], [[Передача файлов|proxy]], [[Передача файлов|HTTP Upload]] и [[PEP|pubsub]]. Для каждого из них указывается своя пара сертификатов и ключей.<br />
<br />
* Для '''proxy''' можно указать субдомен, на котором он будет доступен, а опция '''proxy65_acl''' перечисляет домены, которые смогут передавать файлы через этот прокси.<br />
* Для конференций включается поддержка MAM и модерирования. В опциях задается включение MAM по-умолчанию, время устаревания MAM-архива, а также правила доступа на создание новых конференций.<br />
* Для модуля '''http_file_share''' перечисляются лимиты на размеры одиночных файлов, а также общий размер хранилища и время устаревания загруженных файлов. Для Prosody сделано несколько реализаций HTTP Upload - например, можно переключиться на '''mod_http_upload''', если mod_http_file_share чем-то не устроит или вообще использовать [https://github.com/horazont/xmpp-http-upload внешний сервис] через '''http_upload_external'''.<br />
<br />
Закончив правку файлов конфигурации - перезапустите Prosody:<br />
<br />
systemctl restart prosody<br />
<br />
Теперь можете создать пользователя-администратора:<br />
<br />
prosodyctl adduser admin@EXAMPLE.COM<br />
<br />
А также проверить корректность конфигурации следующими командами:<br />
<br />
prosodyctl check config<br />
prosodyctl check certs<br />
prosodyctl check turn<br />
<br />
Во всех случаях в конце команда должна возвращать "'''All checks passed, congratulations!'''". Сервер готов к использованию!<br />
<br />
==Сноски==<br />
<br />
<references/><br />
<br />
==Ссылки==<br />
<br />
* https://prosody.im - домашняя страница Prosody и [https://prosody.im/doc ссылка на документацию]<br />
* [https://open-networks.ru/d/67-prosody-im-v012x-ustanovka-i-nastroyka-xmpp-servera-coturn-fail2ban Очень подробное пользовательское руководство по настройке Prosody]<br />
* [https://www.8host.com/blog/ustanovka-prosody-v-ubuntu-18-04/ Еще одно руководство по установке и настройке]<br />
<br />
[[Category:Свой сервер]]</div>Rainhttps://jabberworld.info/index.php?title=%D0%A1%D0%B2%D0%BE%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80:_%D0%BF%D0%BE%D0%B4%D1%80%D0%BE%D0%B1%D0%BD%D0%BE%D0%B5_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B5_Prosody&diff=10225Свой сервер: подробное руководство по установке Prosody2023-11-02T22:18:26Z<p>Rain: Ну, как-то так. Не хватает опций.</p>
<hr />
<div>В этой статье приводится пример настройки [[Prosody]] - одного из самых популярных и легковесных jabber-серверов. Для сервера написано просто-таки [https://modules.prosody.im/all.html огромное число модулей] на все случаи жизни, поэтому в руководстве, основанном на версии 0.12.4, будет показано подключение актуальных и популярных функций. В качестве сертификатов будем использовать Let's Encrypt, а в качестве хранилища данных, в том числе архива сообщений - MySQL<ref name="mysql"></ref> - и все это на Debian GNU/Linux.<br />
<br />
Рассмотрим особенности данной конфигурации.<br />
<br />
__TOC__<br />
<br />
== [[ru_wikipedia:DNS|DNS-записи]] ==<br />
<br />
Хотя для базового варианта своего jabber-сервера вполне достаточно [[Регистрация доменного имени|бесплатного DynDNS-домена]], для полноценной конфигурации все же нужно обзавестись собственным доменом, где можно будет добавить все необходимые DNS-записи и сделать субдомены для сервисов. Выбор регистратора и покупка домена остается за рамками данной статьи, тут только приводятся шаги, которые надо сделать после покупки домена в его админке.<br />
<br />
Всего понадобится около 15 записей в DNS:<br />
<br />
# Для удобства, чтобы в случае миграции сервера с одного IP на другой не приходилось переписывать все записи, стоит завести для него субдомен, который будет ссылаться на нужный IP с помощью А-записи (или 2 таких субдомена в случае использования IPv4+IPv6 - один с A-записью, а второй с AAAA), а все остальные записи сделать CNAME-алиасами для него. Например, для данного сервера ('''jabberworld.info''') сделаны 2 субдомена '''xmpp.jabberworld.info''', ссылающиеся на IPv4 и IPv6-адреса.<br />
# Создаем субдомены для необходимых сервисов сервера<ref>Да, если планируется использовать, например, конференции исключительно локально, то можно обойтись и без DNS-записей - сервер и так знает, куда ему подключаться, так как он этот сервис и предоставляет. Но если хочется полноценный сервис, с которым смогут взаимодействовать и другие сервера - то все же потребуются указанные записи в DNS.</ref> - '''conference''' (для [[Конференции|конференций]]), '''proxy''' (прокси для прямой [[Передача файлов|передачи файлов]]), '''pubsub''' (сервисы типа "Публикация/подписка", где может сохраняться самая разная информация) и '''upload''' (сервис для [[Передача файлов|передачи файлов]] через HTTP Upload). Все эти записи создаем как CNAME на наш субдомен из 1-го пункта.<br />
# Создаем ряд SRV-записей для нашего основного домена - они показывают, где именно какой сервис находится. Конечно, если у вас все на одном адресе, то будет работать и так, но мы ведь решили все делать правильно, верно? Итак, нужны такие SRV-записи:<br />
<br />
:: '''_xmpp-client._tcp.EXAMPLE.COM''' (порт '''5222''') - чтобы указать, куда подключаться [[Клиенты Jabber|jabber-клиенту]]<br />
:: '''_xmpps-client._tcp.EXAMPLE.COM''' (порт '''5223''') - аналогичная запись для [https://xmpp.org/extensions/xep-0368.html TLS-подключений клиентов]<br />
:: '''_xmpp-server._tcp.EXAMPLE.COM''' (порт '''5269''') - чтобы указать, куда подключаться [[Публичные серверы Jabber|jabber-серверу]]<br />
:: '''_xmpps-server._tcp.EXAMPLE.COM''' (порт '''5270''') - аналогичная запись для [https://xmpp.org/extensions/xep-0368.html TLS-подключений серверов].<br />
<br />
:: Записи ниже служат для работы сервиса аудио/видеозвонков через jabber<ref name="avcalls">https://prosody.im/doc/turn</ref>. Для максимальной совместимости будем использовать как [[ru_wikipedia:STUN|STUN]], так и [[ru_wikipedia:Traversal Using Relay NAT|TURN]] - все возможные варианты:<br />
<br />
:: '''_stun._tcp.EXAMPLE.COM''' (порт '''3478''') - [[ru_wikipedia:STUN|STUN]] через [[ru_wikipedia:TCP|TCP]]<br />
:: '''_stun._udp.EXAMPLE.COM''' (порт '''3478''') - STUN через UDP<br />
:: '''_stuns._tcp.EXAMPLE.COM''' (порт '''5349''') - шифрованный STUN через TCP<br />
:: '''_turn._tcp.EXAMPLE.COM''' (порт '''3478''') - [[ru_wikipedia:Traversal Using Relay NAT|TURN]] через [[ru_wikipedia:TCP|TCP]]<br />
:: '''_turn._udp.EXAMPLE.COM''' (порт '''3478''') - TURN через UDP<br />
:: '''_turns._tcp.EXAMPLE.COM''' (порт '''5349''') - шифрованный TURN через TCP<br />
<br />
:: Во всех случаях target'ом для записей служит наш алиас из первого пункта.<br />
{{Hider hiding|<br />
|title=Для продвинутых<br />
|content=<br />
:: Самый полный вариант подразумевает в том числе создание SRV-записей для каждого из сервисов-субдоменов - тех, к которым будут подключаться сторонние серверы. Например, для конференций это может выглядеть так:<br />
<br />
:: '''_xmpp-server._tcp.conference.EXAMPLE.COM''' (порт '''5269''')<br />
:: '''_xmpps-server._tcp.conference.EXAMPLE.COM''' (порт '''5270''' для TLS)<br />
<br />
:: Но, как уже говорилось выше, это для совсем уж необычных конфигураций - когда сам домен указывает на один адрес (например, там может работать веб-сервер, предоставляющий чат-логи на сайте https://conference.example.com), а сам jabber-сервер при этом находится совершенно на другом.<br />
}}<br />
Вот как выглядят записи для данного сервера в админке бесплатного DNS-провайдера [https://dns.he.net Hurricane Electric]:<br />
<br />
<center>[[Файл:Jabber srv.png]]</center><br />
<br />
== Сертификаты ==<br />
<br />
<br />
В современном мире стандартной практикой является шифрование соединений, а для этого, в свою очередь, требуются [[ru_wikipedia:Цифровой сертификат|сертификаты]] от доверенных центров сертификации. Можно, конечно, использовать самоподписанный сертификат, но, во-первых, не все серверы будут их принимать - а значит, к ним не получится подключиться и общаться с их пользователями, а во-вторых, в подключающихся клиентах будут появляться сообщения о недоверенном сертификате, что тоже будет доставлять определенные неудобства. Поэтому стоит воспользоваться услугами одного из популярных бесплатных центров сертификации - [https://letsencrypt.org Let's Encrypt].<br />
<br />
Для работы с сертификатами от Let's Encrypt в Debian есть специальный пакет - '''certbot''', поэтому установите его следующей командой:<br />
<br />
sudo apt-get install certbot<br />
<br />
Сертификаты от Let's Encrypt выдаются сроком на 3 месяца, поэтому в конце этого срока их нужно обновлять. Для подтверждения владения доменом, а также для автоматизации обновления сертификатов в дальнейшем со стороны Let's Encrypt делается запрос на веб-сервер для указанного домена, поэтому для полноценной работы стоит установить какой-нибудь популярный вариант и прописать там виртуальные хосты для нашего jabber-сервера, а также сервисов на нем (сертификаты будут делаться в том числе для сервисов). Пример конфигурации веб-сервера Apache для данного сервера:<br />
<br />
{{Hider hiding<br />
|title=apache_to_jabber_service_domains.conf<br />
|content=<pre><br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@jabberworld.info<br />
DocumentRoot /var/www/jabberworld.info/htdocs<br />
ServerName jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@upload.jabberworld.info<br />
DocumentRoot /var/www/upload.jabberworld.info/htdocs<br />
ServerName upload.jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@pubsub.jabberworld.info<br />
DocumentRoot /var/www/pubsub.jabberworld.info/htdocs<br />
ServerName pubsub.jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@conference.jabberworld.info<br />
DocumentRoot /var/www/conference.jabberworld.info/htdocs<br />
ServerName conference.jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@proxy.jabberworld.info<br />
DocumentRoot /var/www/proxy.jabberworld.info/htdocs<br />
ServerName proxy.jabberworld.info<br />
</VirtualHost><br />
</pre><br />
}}<br />
<br />
В каталогах сервера не обязательно должен быть какой-то контент, хотя, например, на основном домене можно разместить какую-то страничку, посвященную jabber-серверу, а на поддомене '''conference''' разместить чат-логи [[Конференции|конференций]]. Субдомен '''upload''' можно приспособить под загружаемые через HTTP Upload файлы, чтобы в дальнейшем их раздавал веб-сервер<ref name="http_upload">В таком случае ему нужно обеспечить доступ к каталогу '''/var/lib/prosody/upload*''', плюс обеспечить нужные права веб-серверу, чтобы он мог читать файлы, загруженные через jabber-сервер. Альтернативный вариант - использовать веб-сервер, обслуживающий домен upload.EXAMPLE.COM в качестве прокси и заворачивающий все запросы на https://upload.EXAMPLE.COM:5281/file_share/. Такое решение имеет еще одно преимущество: разнообразные клиенты (не только Jabber) будут гораздо охотнее показывать превью для обычных HTTP/HTTPS-ссылок (т.е., на 80 или 443-м порту), а не тех, где контент отдается на "необычном" порту - вроде 5281 в данном примере.</ref>.<br />
<br />
После всех приготовлений<ref>Более подробно можно почитать тут: [[Свой сервер: подготовка веб-сервера и сертификатов]]</ref> создайте все необходимые сертификаты. Для этого воспользуйтесь следующими командами (выполнять надо от пользователя '''root'''):<br />
<br />
certbot certonly --webroot --webroot-path /var/www/EXAMPLE.COM/htdocs/ -d EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/conference.EXAMPLE.COM/htdocs/ -d conference.EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/upload.EXAMPLE.COM/htdocs/ -d upload.EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/pubsub.EXAMPLE.COM/htdocs/ -d pubsub.EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/proxy.EXAMPLE.COM/htdocs/ -d proxy.EXAMPLE.COM --rsa-key-size 4096<br />
<br />
В параметрах после '''--webroot-path''' указывается каталог веб-сервера для данного домена, а после '''-d''' - сам домен.<br />
<br />
После успешного выполнения команд будет выдана информация о созданном сертификате, в том числе 2 файла - цепочка ключей и приватный ключ - сохраните эти пути для дальнейшего использования, они нам еще пригодятся. Всего получится 10 файлов. certbot обновляет сертификаты автоматически, если срок их истечения составляет менее 30 дней - т.е., обновление происходит раз в 2 месяца.<br />
<br />
Так как Prosody работает от своего пользователя и не имеет доступа к сертификатам, созданным certbot от рута, то надо каким-то образом предоставить доступ ejabberd'у к сертификатам. Самым простым и корректным вариантом на сейчас является выполнение следующей команды от рута<ref>https://prosody.im/doc/letsencrypt</ref>:<br />
<br />
prosodyctl --root cert import /etc/letsencrypt/live<br />
<br />
В дальнейшем эту команду можно использовать после каждого обновления сертификатов - например, указав ее в качестве deploy hook для certbot.<br />
<br />
== Установка и настройка Prosody ==<br />
<br />
Все подготовительные процедуры завершены, теперь можно приступать непосредственно к установке и настройке своего jabber-сервера. Для поддержки звонков потребуется еще STUN/TURN-сервер - в качестве него будем использовать Coturn. В Debian установить Prosody с поддержкой MySQL<ref name="mysql">На самом деле выбор MySQL обусловлен с одной стороны ее популярностью на веб-хостингах, с другой - возможностью хранить большие объемы данных, которые могут потребоваться, если вы хотите хранить, например, архив сообщений за длительное время. Однако если таких планов нет и это будет сервер для одного или нескольких человек со скромными запросами - то вполне можно обойтись Sqlite.</ref> и Coturn можно командой<br />
<br />
apt-get install prosody coturn lua-dbi-mysql<br />
<br />
'''Примечание''': на момент написания статьи самая последняя версия Prosody - 0.12.4 - доступна в репозитории '''backports'''. Чтобы установить сервер оттуда - добавьте к команде выше ключ '''-t bookworm-backports''' (само-собой, репозиторий должен быть прописан в '''/etc/apt/sources.list''').<br />
<br />
Настройку начнем с Coturn - она очень простая и сводится к включению сервиса в файле '''/etc/default/coturn''' опции '''TURNSERVER_ENABLED=1''', а также приведению конфиг-файла '''/etc/turnserver.conf''' к такому виду:<br />
<br />
{{Hider hiding<br />
|title=/etc/turnserver.conf<br />
|content=<pre><br />
listening-port=3478<br />
tls-listening-port=5349<br />
verbose<br />
use-auth-secret<br />
static-auth-secret=MYSUPERSECRETKEY<br />
userdb=/var/lib/turn/turndb<br />
realm=EXAMPLE.COM<br />
cert=/etc/turncerts/EXAMPLE.COM.fullchain.pem<br />
pkey=/etc/turncerts/EXAMPLE.COM.privkey.pem<br />
syslog<br />
prod<br />
no-multicast-peers<br />
no-cli<br />
no-tlsv1<br />
no-tlsv1_1<br />
no-rfc5780<br />
no-stun-backward-compatibility<br />
response-origin-only-with-rfc5780<br />
</pre><br />
}}<br />
<br />
Фактически, изменения в конфиге сводятся по-большей части к следующему:<br />
<br />
* Указываем прослушиваемые порты - они должны быть такие же, как были указаны в SRV-записях в DNS.<br />
* Включаем '''use-auth-secret''' и указываем придуманный '''ключ-пароль''' - его мы потом укажем в конфиг-файле у Prosody.<br />
* Указываем '''realm''' - домен и сертификат с ключом для него.<br />
<br />
Да, так как Coturn не может напрямую прочитать сертификаты из каталога Let's Encrypt - для правильной работы можно создать отдельный каталог, куда копировать сертификаты с нужными правами. В примере выше это '''/etc/turncerts'''. Команду копирования и изменения прав можно объединить в одном скрипте с командой копирования сертификатов для Prosody и вызывать этот скрипт в качестве deploy hook для Let's Encrypt (или просто по Cron'у, например, раз в неделю).<br />
<br />
Закончив правку конфиг-файла, перезапускаем TURN-сервер:<br />
<br />
systemctl restart coturn.service<br />
<br />
Теперь переходим к настройке Prosody. Как уже говорилось, под него есть множество разнообразных модулей. Для удобства добавления модулей добавьте следующие пакеты:<br />
<br />
apt-get install luarocks liblua5.4-dev lua-luaossl --no-install-recommends<br />
<br />
После чего можно сразу установить полезные модули:<br />
<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_admin_web # Поддержка WEB-интерфейса для управления сервером<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_vcard_muc # Поддержка vCard для конференций<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_muc_moderation # Модерирование конференций и возможность удалять спам<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_cloud_notify # Поддержка PUSH-уведомлений<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_cloud_notify_extensions # Дополнительные модули для PUSH<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_register_web # Поддержка регистрации через веб-страницу<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_mam_adhoc # Возможность управлять настройками MAM-архива из jabber-клиента<br />
<br />
Конфигурационный файл у Prosody состоит из нескольких секций:<br />
* Общие параметры<br />
* Параметры виртуал-хоста<br />
* Параметры сервисов.<br />
<br />
Для удобства то, что относится к виртуал-хосту и его сервисам, вынесено в отдельный файл. Для включения нужного виртуал-хоста поместите симлинк на его конфиг в '''/etc/prosody/conf.d'''.<br />
<br />
{{Hider hiding<br />
|title=/etc/prosody/prosody.cfg.lua<br />
|content=<pre><br />
-- Prosody Example Configuration File<br />
--<br />
-- Information on configuring Prosody can be found on our<br />
-- website at https://prosody.im/doc/configure<br />
--<br />
-- Tip: You can check that the syntax of this file is correct<br />
-- when you have finished by running this command:<br />
-- prosodyctl check config<br />
-- If there are any errors, it will let you know what and where<br />
-- they are, otherwise it will keep quiet.<br />
--<br />
-- The only thing left to do is rename this file to remove the .dist ending, and fill in the<br />
-- blanks. Good luck, and happy Jabbering!<br />
<br />
<br />
---------- Server-wide settings ----------<br />
-- Settings in this section apply to the whole server and are the default settings<br />
-- for any virtual hosts<br />
<br />
-- This is a (by default, empty) list of accounts that are admins<br />
-- for the server. Note that you must create the accounts separately<br />
-- (see https://prosody.im/doc/creating_accounts for info)<br />
-- Example: admins = { "user1@example.com", "user2@example.net" }<br />
admins = {<br />
"admin@EXAMPLE.COM"<br />
}<br />
<br />
-- This option allows you to specify additional locations where Prosody<br />
-- will search first for modules. For additional modules you can install, see<br />
-- the community module repository at https://modules.prosody.im/<br />
-- For a local administrator it's common to place local modifications<br />
-- under /usr/local/ hierarchy:<br />
plugin_paths = {<br />
"/usr/lib/prosody/modules",<br />
"/var/lib/prosody/custom_plugins/"<br />
}<br />
<br />
-- This is the list of modules Prosody will load on startup.<br />
-- Documentation for bundled modules can be found at: https://prosody.im/doc/modules<br />
modules_enabled = {<br />
<br />
-- Generally required<br />
"disco"; -- Service discovery<br />
"roster"; -- Allow users to have a roster. Recommended ;)<br />
"saslauth"; -- Authentication for clients and servers. Recommended if you want to log in.<br />
"tls"; -- Add support for secure TLS on c2s/s2s connections<br />
<br />
-- Not essential, but recommended<br />
"blocklist"; -- Allow users to block communications with other users<br />
"bookmarks"; -- Synchronise the list of open rooms between clients<br />
"carbons"; -- Keep multiple online clients in sync<br />
"dialback"; -- Support for verifying remote servers using DNS<br />
"limits"; -- Enable bandwidth limiting for XMPP connections<br />
"pep"; -- Allow users to store public and private data in their account<br />
"private"; -- Legacy account storage mechanism (XEP-0049)<br />
"smacks"; -- Stream management and resumption (XEP-0198)<br />
"vcard4"; -- User profiles (stored in PEP)<br />
"vcard_legacy"; -- Conversion between legacy vCard and PEP Avatar, vcard<br />
<br />
-- Nice to have<br />
"csi_simple"; -- Simple but effective traffic optimizations for mobile devices<br />
"ping"; -- Replies to XMPP pings with pongs<br />
"register"; -- Allow users to register on this server using a client and change passwords<br />
"time"; -- Let others know the time here on this server<br />
"uptime"; -- Report how long server has been running<br />
"version"; -- Replies to server version requests<br />
"mam"; -- Store recent messages to allow multi-device synchronization<br />
"turn_external"; -- Provide external STUN/TURN service for e.g. audio/video calls<br />
<br />
-- Admin interfaces<br />
"admin_adhoc"; -- Allows administration via an XMPP client that supports ad-hoc commands<br />
"admin_shell"; -- Allow secure administration via 'prosodyctl shell'<br />
<br />
-- HTTP modules<br />
"bosh"; -- Enable BOSH clients, aka "Jabber over HTTP"<br />
--"http_openmetrics"; -- for exposing metrics to stats collectors<br />
"websocket"; -- XMPP over WebSockets<br />
<br />
-- Other specific functionality<br />
"posix"; -- POSIX functionality, sends server to background, enables syslog, etc.<br />
"announce"; -- Send announcement to all online users<br />
--"groups"; -- Shared roster support<br />
--"legacyauth"; -- Legacy authentication. Only used by some old clients and bots.<br />
--"mimicking"; -- Prevent address spoofing<br />
--"motd"; -- Send a message to users when they log in<br />
"s2s_bidi"; -- Bi-directional server-to-server (XEP-0288)<br />
"server_contact_info"; -- Publish contact information for this service<br />
"tombstones"; -- Prevent registration of deleted accounts<br />
"watchregistrations"; -- Alert admins of registrations<br />
"welcome"; -- Welcome users who register accounts<br />
<br />
"cloud_notify"; -- push support<br />
"cloud_notify_extensions"; -- meta-module that simply enables all the modules required to support Siskin or Snikket iOS on a Prosody server<br />
"register_web"; -- registrations via web interface<br />
"mam_adhoc"; -- allowing clients to change archiving preferences<br />
"throttle_presence"; -- automatically cuts down on presence traffic when clients indicate they are inactive<br />
"external_services"; -- calls<br />
"admin_adhoc"; -- ad-hoc administration of server<br />
}<br />
<br />
-- These modules are auto-loaded, but should you want<br />
-- to disable them then uncomment them here:<br />
modules_disabled = {<br />
-- "offline"; -- Store offline messages<br />
-- "c2s"; -- Handle client connections<br />
-- "s2s"; -- Handle server-to-server connections<br />
}<br />
<br />
-- Debian:<br />
-- Please, don't change this option since /run/prosody/<br />
-- is one of the few directories Prosody is allowed to write to<br />
--<br />
pidfile = "/run/prosody/prosody.pid";<br />
<br />
-- Server-to-server authentication<br />
-- Require valid certificates for server-to-server connections?<br />
-- If false, other methods such as dialback (DNS) may be used instead.<br />
<br />
s2s_secure_auth = true<br />
<br />
-- Some servers have invalid or self-signed certificates. You can list<br />
-- remote domains here that will not be required to authenticate using<br />
-- certificates. They will be authenticated using other methods instead,<br />
-- even when s2s_secure_auth is enabled.<br />
<br />
--s2s_insecure_domains = { "insecure.example" }<br />
<br />
-- Even if you disable s2s_secure_auth, you can still require valid<br />
-- certificates for some domains by specifying a list here.<br />
<br />
--s2s_secure_domains = { "jabber.org" }<br />
<br />
<br />
-- Rate limits<br />
-- Enable rate limits for incoming client and server connections. These help<br />
-- protect from excessive resource consumption and denial-of-service attacks.<br />
<br />
limits = {<br />
c2s = {<br />
rate = "3kb/s";<br />
};<br />
s2sin = {<br />
rate = "50kb/s";<br />
};<br />
}<br />
<br />
-- Authentication<br />
-- Select the authentication backend to use. The 'internal' providers<br />
-- use Prosody's configured data storage to store the authentication data.<br />
-- For more information see https://prosody.im/doc/authentication<br />
<br />
authentication = "internal_hashed"<br />
<br />
-- Many authentication providers, including the default one, allow you to<br />
-- create user accounts via Prosody's admin interfaces. For details, see the<br />
-- documentation at https://prosody.im/doc/creating_accounts<br />
<br />
<br />
-- Storage<br />
-- Select the storage backend to use. By default Prosody uses flat files<br />
-- in its configured data directory, but it also supports more backends<br />
-- through modules. An "sql" backend is included by default, but requires<br />
-- additional dependencies. See https://prosody.im/doc/storage for more info.<br />
<br />
storage = "sql" -- Default is "internal" (Debian: "sql" requires one of the<br />
-- lua-dbi-sqlite3, lua-dbi-mysql or lua-dbi-postgresql packages to work)<br />
<br />
-- For the "sql" backend, you can uncomment *one* of the below to configure:<br />
--sql = { driver = "SQLite3", database = "prosody.sqlite" } -- Default. 'database' is the filename.<br />
sql = { driver = "MySQL", database = "jabber_example_com", username = "jabberuser", password = "MYSECRETPASSWORD", host = "localhost" }<br />
--sql = { driver = "PostgreSQL", database = "prosody", username = "prosody", password = "secret", host = "localhost" }<br />
<br />
<br />
-- Archiving configuration<br />
-- If mod_mam is enabled, Prosody will store a copy of every message. This<br />
-- is used to synchronize conversations between multiple clients, even if<br />
-- they are offline. This setting controls how long Prosody will keep<br />
-- messages in the archive before removing them.<br />
<br />
archive_expires_after = "1w" -- Remove archived messages after 1 week<br />
max_archive_query_results = 20;<br />
<br />
-- You can also configure messages to be stored in-memory only. For more<br />
-- archiving options, see https://prosody.im/doc/modules/mod_mam<br />
<br />
<br />
-- Audio/video call relay (STUN/TURN)<br />
-- To ensure clients connected to the server can establish connections for<br />
-- low-latency media streaming (such as audio and video calls), it is<br />
-- recommended to run a STUN/TURN server for clients to use. If you do this,<br />
-- specify the details here so clients can discover it.<br />
-- Find more information at https://prosody.im/doc/turn<br />
<br />
-- Specify the address of the TURN service (you may use the same domain as XMPP)<br />
turn_external_host = "xmpp.EXAMPLE.COM"<br />
<br />
-- This secret must be set to the same value in both Prosody and the TURN server<br />
turn_external_secret = "MYSUPERSECRETKEY"<br />
<br />
<br />
-- Logging configuration<br />
-- For advanced logging see https://prosody.im/doc/logging<br />
--<br />
-- Debian:<br />
-- Logs info and higher to /var/log<br />
-- Logs errors to syslog also<br />
log = {<br />
-- Log files (change 'info' to 'debug' for debug logs):<br />
info = "/var/log/prosody/prosody.log";<br />
error = "/var/log/prosody/prosody.err";<br />
-- Syslog:<br />
{ levels = { "error" }; to = "syslog"; };<br />
}<br />
<br />
<br />
-- Uncomment to enable statistics<br />
-- For more info see https://prosody.im/doc/statistics<br />
statistics = "internal"<br />
<br />
<br />
-- Certificates<br />
-- Every virtual host and component needs a certificate so that clients and<br />
-- servers can securely verify its identity. Prosody will automatically load<br />
-- certificates/keys from the directory specified here.<br />
-- For more information, including how to use 'prosodyctl' to auto-import certificates<br />
-- (from e.g. Let's Encrypt) see https://prosody.im/doc/certificates<br />
<br />
-- Location of directory to find certificates in (relative to main config file):<br />
certificates = "certs"<br />
<br />
c2s_direct_tls_ports = { 5223 }<br />
s2s_direct_tls_ports = { 5270 }<br />
c2s_require_encryption = true<br />
s2s_require_encryption = true<br />
tls_profile = "intermediate" -- "modern" if you don't need TLS 1.2<br />
<br />
contact_info = {<br />
abuse = { "xmpp:admin@EXAMPLE.COM" };<br />
admin = { "xmpp:admin@EXAMPLE.COM" };<br />
feedback = { "xmpp:admin@EXAMPLE.COM" };<br />
support = { "https://EXAMPLE.COM", "xmpp:admin@EXAMPLE.COM" };<br />
}<br />
<br />
external_services = {<br />
{<br />
type = "stun",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "stun",<br />
transport = "udp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "turn",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "turn",<br />
transport = "udp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "stuns",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 5349<br />
}, {<br />
type = "turns",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 5349<br />
}<br />
}<br />
<br />
consider_websocket_secure = true<br />
consider_bosh_secure = true<br />
<br />
----------- Virtual hosts -----------<br />
-- You need to add a VirtualHost entry for each domain you wish Prosody to serve.<br />
-- Settings under each VirtualHost entry apply *only* to that host.<br />
-- It's customary to maintain VirtualHost entries in separate config files<br />
-- under /etc/prosody/conf.d/ directory. Examples of such config files can<br />
-- be found in /etc/prosody/conf.avail/ directory.<br />
<br />
------ Additional config files ------<br />
-- For organizational purposes you may prefer to add VirtualHost and<br />
-- Component definitions in their own config files. This line includes<br />
-- all config files in /etc/prosody/conf.d/<br />
<br />
-- VirtualHost "localhost"<br />
-- Prosody requires at least one enabled VirtualHost to function. You can<br />
-- safely remove or disable 'localhost' once you have added another.<br />
<br />
<br />
--VirtualHost "example.com"<br />
<br />
------ Components ------<br />
-- You can specify components to add hosts that provide special services,<br />
-- like multi-user conferences, and transports.<br />
-- For more information on components, see https://prosody.im/doc/components<br />
<br />
---Set up a MUC (multi-user chat) room server on conference.example.com:<br />
--Component "conference.example.com" "muc"<br />
--- Store MUC messages in an archive and allow users to access it<br />
--modules_enabled = { "muc_mam" }<br />
<br />
---Set up a file sharing component<br />
--Component "share.example.com" "http_file_share"<br />
<br />
---Set up an external component (default component port is 5347)<br />
--<br />
-- External components allow adding various services, such as gateways/<br />
-- bridges to non-XMPP networks and services. For more info<br />
-- see: https://prosody.im/doc/components#adding_an_external_component<br />
--<br />
--Component "gateway.example.com"<br />
-- component_secret = "password"<br />
<br />
Include "conf.d/*.cfg.lua"<br />
<br />
---------- End of the Prosody Configuration file ----------<br />
-- You usually **DO NOT** want to add settings here at the end, as they would<br />
-- only apply to the last defined VirtualHost or Component.<br />
--<br />
-- Settings for the global section should go higher up, before the first<br />
-- VirtualHost or Component line, while settings intended for specific hosts<br />
-- should go under the corresponding VirtualHost or Component line.<br />
--<br />
-- For more information see https://prosody.im/doc/configure<br />
<br />
</pre><br />
}}<br />
<br />
{{Hider hiding<br />
|title=Виртуал хост /etc/prosody/conf.avail/EXAMPLE.COM.cfg.lua<br />
|content=<pre><br />
-- Section for example.com<br />
<br />
VirtualHost "EXAMPLE.COM"<br />
enabled = true<br />
<br />
-- Assign this host a certificate for TLS, otherwise it would use the one<br />
-- set in the global section (if any).<br />
-- Note that old-style SSL on port 5223 only supports one certificate, and will always<br />
-- use the global one.<br />
ssl = {<br />
key = "/etc/prosody/certs/EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
<br />
modules_enabled = {<br />
"admin_web"<br />
--"invites"; -- Create and manage invites<br />
--"invites_adhoc"; -- Allow admins/users to create invitations via their client<br />
--"invites_register"; -- Allows invited users to create accounts<br />
}<br />
allow_registration = false -- Allow users to register new accounts via in-band<br />
<br />
------ Components ------<br />
-- You can specify components to add hosts that provide special services,<br />
-- like multi-user conferences, and transports.<br />
-- For more information on components, see http://prosody.im/doc/components<br />
<br />
<br />
-- Set up a SOCKS5 bytestream proxy for server-proxied file transfers:<br />
Component "proxy.EXAMPLE.COM" "proxy65"<br />
ssl = {<br />
key = "/etc/prosody/certs/proxy.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/proxy.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
-- proxy65_address = "proxy.EXAMPLE.COM"<br />
proxy65_acl = { "EXAMPLE.COM" }<br />
<br />
-- Set up a MUC (multi-user chat) room server on conference.example.com:<br />
Component "conference.EXAMPLE.COM" "muc"<br />
modules_enabled = {<br />
"muc_mam",<br />
"vcard_muc",<br />
"muc_moderation"<br />
}<br />
ssl = {<br />
key = "/etc/prosody/certs/conference.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/conference.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
muc_log_by_default = true<br />
muc_log_presences = false<br />
log_all_rooms = false<br />
muc_log_expires_after = "1w"<br />
muc_log_cleanup_interval = 4 * 60 * 60<br />
restrict_room_creation = "local"<br />
<br />
Component "upload.EXAMPLE.COM" "http_file_share"<br />
ssl = {<br />
key = "/etc/prosody/certs/upload.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/upload.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
<br />
http_file_share_size_limit = 100*1024*1024 -- 100 MB per file<br />
http_file_share_expires_after = 7*86400 -- file expiration - 1 week<br />
http_file_share_global_quota = 1024*1024*1024*10 -- 10 GiB total<br />
<br />
Component "pubsub.EXAMPLE.COM" "pubsub"<br />
ssl = {<br />
key = "/etc/prosody/certs/pubsub.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/pubsub.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
</pre><br />
}}<br />
<br />
Файл конфигурации Prosody очень хорошо комментирован, поэтому рассмотрим ключевые моменты, а также опции, добавленные для дополнительно установленных модулей.<br />
<br />
* Первым в конфиг-файле идет [[Jabber ID]] будущего администратора - ему будут доступны команды управления сервером, а также будут присылаться различные уведомления.<br />
* В '''plugin_paths''' добавляется путь к каталогу с устанавливаемыми плагинами.<br />
* Далее идет обширный список модулей. Рассмотрим некоторые:<br />
** '''turn_external''' позволит нам подключить настроенный ранее Coturn к Prosody для работы звонков.<br />
** '''cloud_notify''' включит поддержку PUSH-уведомлений.<br />
** '''register_web''' включает регистрацию через веб-страницу. Она доступна по адресу https://EXAMPLE.COM:5281/register_web. Штатно тут включена простенькая CAPTCHA, но можно использовать reCaptcha, для этого дополнительно необходимо будет указать ключи для этого сервиса.<br />
** '''admin_adhoc''' позволит выполнять ряд команд на сервере с JID'а администратора из тех клиентов, которые умеют [[Ad-Hoc]].<br />
* Далее следуют настройки, в которых можно усилить или ослабить проверки сертификатов для других серверов.<br />
* Следующей ключевой настройкой будет указание сервера баз данных. Как мы уже условились выше, для хранения данных сервера [[Свой сервер: подготовка базы данных|будем использовать MySQL или MariaDB]]. Prosody имеет весьма простую структуру базы и встроенную схему, поэтому дополнительных действий не требуется.<br />
* В '''archive_expires_after''' можем указать, как скоро нужно чистить архив сообщений для MAM. Для конференций есть отдельная настройка, она будет описана ниже.<br />
* В '''turn_external_host''' и '''turn_external_secret''' указывается адрес Coturn и тот самый ключ, который прописывали в '''/etc/turnserver.conf'''.<br />
* Далее - несколько опций касательно безопасности:<br />
** '''c2s_direct_tls_ports''' и '''s2s_direct_tls_ports''' включает работу с TLS-портами - они должны быть те же, что указывались в SRV-записях в DNS.<br />
** '''c2s_require_encryption''' и '''s2s_require_encryption''' означает использование исключительно шифрованных соединений между серверами, а также между сервером и клиентом.<br />
** '''tls_profile''' настраивает перечень шифров и протоколов, которые может использовать Prosody.<br />
* В '''contact_info''' можно перечислить контакты администратора и, например, адрес конференции поддержки сервера.<br />
* '''external_services''' описывает сервисы, которые предоставляет Coturn.<br />
<br />
На этом настройка основной части завершена и далее идет настройка виртуальных хостов и их сервисов:<br />
<br />
* В секции VirtualHost идет указание SSL-сертификатов для домена, а также разрешение регистрации через jabber-клиент и включение веб-интерфейса для управления сервером, который доступен по адресу https://example.com:5281/admin.<br />
* '''invites''' и сопутствующие ему модули позволяют сделать регистрацию по приглашениям. Однако есть одно но (на сейчас): это отключит обычную регистрацию. Поэтому какой вариант оставить - решайте сами.<br />
<br />
Далее перечисляется несколько компонентов - сервисов для данного сервера. В показанном примере это [[конференции]], [[Передача файлов|proxy]], [[Передача файлов|HTTP Upload]] и [[PEP|pubsub]]. Для каждого из них указывается своя пара сертификатов и ключей.<br />
<br />
* Для '''proxy''' можно указать субдомен, на котором он будет доступен, а опция '''proxy65_acl''' перечисляет домены, которые смогут передавать файлы через этот прокси.<br />
* Для конференций включается поддержка MAM и модерирования. В опциях задается включение MAM по-умолчанию, время устаревания MAM-архива, а также правила доступа на создание новых конференций.<br />
* Для модуля '''http_file_share''' перечисляются лимиты на размеры одиночных файлов, а также общий размер хранилища и время устаревания загруженных файлов. Для Prosody сделано несколько реализаций HTTP Upload - например, можно переключиться на '''mod_http_upload''', если mod_http_file_share чем-то не устроит или вообще использовать [https://github.com/horazont/xmpp-http-upload внешний сервис] через '''http_upload_external'''.<br />
<br />
Закончив правку файлов конфигурации - перезапустите Prosody:<br />
<br />
systemctl restart prosody<br />
<br />
Теперь можете создать пользователя-администратора:<br />
<br />
prosodyctl adduser admin@EXAMPLE.COM<br />
<br />
А также проверить корректность конфигурации следующими командами:<br />
<br />
prosodyctl check config<br />
prosodyctl check certs<br />
prosodyctl check turn<br />
<br />
Во всех случаях в конце команда должна возвращать "'''All checks passed, congratulations!'''". Сервер готов к использованию!<br />
<br />
==Сноски==<br />
<br />
<references/><br />
<br />
==Ссылки==<br />
<br />
* https://prosody.im - домашняя страница Prosody и [https://prosody.im/doc ссылка на документацию]<br />
* [https://open-networks.ru/d/67-prosody-im-v012x-ustanovka-i-nastroyka-xmpp-servera-coturn-fail2ban Очень подробное пользовательское руководство по настройке Prosody]<br />
* [https://www.8host.com/blog/ustanovka-prosody-v-ubuntu-18-04/ Еще одно руководство по установке и настройке]<br />
<br />
[[Category:Свой сервер]]</div>Rainhttps://jabberworld.info/index.php?title=%D0%A1%D0%B2%D0%BE%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80:_%D0%BF%D0%BE%D0%B4%D1%80%D0%BE%D0%B1%D0%BD%D0%BE%D0%B5_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B5_Prosody&diff=10224Свой сервер: подробное руководство по установке Prosody2023-11-02T22:05:50Z<p>Rain: +маркер</p>
<hr />
<div>В этой статье приводится пример настройки [[Prosody]] - одного из самых популярных и легковесных jabber-серверов. Для сервера написано просто-таки [https://modules.prosody.im/all.html огромное число модулей] на все случаи жизни, поэтому в руководстве, основанном на версии 0.12.4, будет показано подключение актуальных и популярных функций. В качестве сертификатов будем использовать Let's Encrypt, а в качестве хранилища данных, в том числе архива сообщений - MySQL<ref name="mysql"></ref> - и все это на Debian GNU/Linux.<br />
<br />
Рассмотрим особенности данной конфигурации.<br />
<br />
__TOC__<br />
<br />
== [[ru_wikipedia:DNS|DNS-записи]] ==<br />
<br />
Хотя для базового варианта своего jabber-сервера вполне достаточно [[Регистрация доменного имени|бесплатного DynDNS-домена]], для полноценной конфигурации все же нужно обзавестись собственным доменом, где можно будет добавить все необходимые DNS-записи и сделать субдомены для сервисов. Выбор регистратора и покупка домена остается за рамками данной статьи, тут только приводятся шаги, которые надо сделать после покупки домена в его админке.<br />
<br />
Всего понадобится около 15 записей в DNS:<br />
<br />
# Для удобства, чтобы в случае миграции сервера с одного IP на другой не приходилось переписывать все записи, стоит завести для него субдомен, который будет ссылаться на нужный IP с помощью А-записи (или 2 таких субдомена в случае использования IPv4+IPv6 - один с A-записью, а второй с AAAA), а все остальные записи сделать CNAME-алиасами для него. Например, для данного сервера ('''jabberworld.info''') сделаны 2 субдомена '''xmpp.jabberworld.info''', ссылающиеся на IPv4 и IPv6-адреса.<br />
# Создаем субдомены для необходимых сервисов сервера<ref>Да, если планируется использовать, например, конференции исключительно локально, то можно обойтись и без DNS-записей - сервер и так знает, куда ему подключаться, так как он этот сервис и предоставляет. Но если хочется полноценный сервис, с которым смогут взаимодействовать и другие сервера - то все же потребуются указанные записи в DNS.</ref> - '''conference''' (для [[Конференции|конференций]]), '''proxy''' (прокси для прямой [[Передача файлов|передачи файлов]]), '''pubsub''' (сервисы типа "Публикация/подписка", где может сохраняться самая разная информация) и '''upload''' (сервис для [[Передача файлов|передачи файлов]] через HTTP Upload). Все эти записи создаем как CNAME на наш субдомен из 1-го пункта.<br />
# Создаем ряд SRV-записей для нашего основного домена - они показывают, где именно какой сервис находится. Конечно, если у вас все на одном адресе, то будет работать и так, но мы ведь решили все делать правильно, верно? Итак, нужны такие SRV-записи:<br />
<br />
:: '''_xmpp-client._tcp.EXAMPLE.COM''' (порт '''5222''') - чтобы указать, куда подключаться [[Клиенты Jabber|jabber-клиенту]]<br />
:: '''_xmpps-client._tcp.EXAMPLE.COM''' (порт '''5223''') - аналогичная запись для [https://xmpp.org/extensions/xep-0368.html TLS-подключений клиентов]<br />
:: '''_xmpp-server._tcp.EXAMPLE.COM''' (порт '''5269''') - чтобы указать, куда подключаться [[Публичные серверы Jabber|jabber-серверу]]<br />
:: '''_xmpps-server._tcp.EXAMPLE.COM''' (порт '''5270''') - аналогичная запись для [https://xmpp.org/extensions/xep-0368.html TLS-подключений серверов].<br />
<br />
:: Записи ниже служат для работы сервиса аудио/видеозвонков через jabber<ref name="avcalls">https://prosody.im/doc/turn</ref>. Для максимальной совместимости будем использовать как [[ru_wikipedia:STUN|STUN]], так и [[ru_wikipedia:Traversal Using Relay NAT|TURN]] - все возможные варианты:<br />
<br />
:: '''_stun._tcp.EXAMPLE.COM''' (порт '''3478''') - [[ru_wikipedia:STUN|STUN]] через [[ru_wikipedia:TCP|TCP]]<br />
:: '''_stun._udp.EXAMPLE.COM''' (порт '''3478''') - STUN через UDP<br />
:: '''_stuns._tcp.EXAMPLE.COM''' (порт '''5349''') - шифрованный STUN через TCP<br />
:: '''_turn._tcp.EXAMPLE.COM''' (порт '''3478''') - [[ru_wikipedia:Traversal Using Relay NAT|TURN]] через [[ru_wikipedia:TCP|TCP]]<br />
:: '''_turn._udp.EXAMPLE.COM''' (порт '''3478''') - TURN через UDP<br />
:: '''_turns._tcp.EXAMPLE.COM''' (порт '''5349''') - шифрованный TURN через TCP<br />
<br />
:: Во всех случаях target'ом для записей служит наш алиас из первого пункта.<br />
{{Hider hiding|<br />
|title=Для продвинутых<br />
|content=<br />
:: Самый полный вариант подразумевает в том числе создание SRV-записей для каждого из сервисов-субдоменов - тех, к которым будут подключаться сторонние серверы. Например, для конференций это может выглядеть так:<br />
<br />
:: '''_xmpp-server._tcp.conference.EXAMPLE.COM''' (порт '''5269''')<br />
:: '''_xmpps-server._tcp.conference.EXAMPLE.COM''' (порт '''5270''' для TLS)<br />
<br />
:: Но, как уже говорилось выше, это для совсем уж необычных конфигураций - когда сам домен указывает на один адрес (например, там может работать веб-сервер, предоставляющий чат-логи на сайте https://conference.example.com), а сам jabber-сервер при этом находится совершенно на другом.<br />
}}<br />
Вот как выглядят записи для данного сервера в админке бесплатного DNS-провайдера [https://dns.he.net Hurricane Electric]:<br />
<br />
<center>[[Файл:Jabber srv.png]]</center><br />
<br />
== Сертификаты ==<br />
<br />
<br />
В современном мире стандартной практикой является шифрование соединений, а для этого, в свою очередь, требуются [[ru_wikipedia:Цифровой сертификат|сертификаты]] от доверенных центров сертификации. Можно, конечно, использовать самоподписанный сертификат, но, во-первых, не все серверы будут их принимать - а значит, к ним не получится подключиться и общаться с их пользователями, а во-вторых, в подключающихся клиентах будут появляться сообщения о недоверенном сертификате, что тоже будет доставлять определенные неудобства. Поэтому стоит воспользоваться услугами одного из популярных бесплатных центров сертификации - [https://letsencrypt.org Let's Encrypt].<br />
<br />
Для работы с сертификатами от Let's Encrypt в Debian есть специальный пакет - '''certbot''', поэтому установите его следующей командой:<br />
<br />
sudo apt-get install certbot<br />
<br />
Сертификаты от Let's Encrypt выдаются сроком на 3 месяца, поэтому в конце этого срока их нужно обновлять. Для подтверждения владения доменом, а также для автоматизации обновления сертификатов в дальнейшем со стороны Let's Encrypt делается запрос на веб-сервер для указанного домена, поэтому для полноценной работы стоит установить какой-нибудь популярный вариант и прописать там виртуальные хосты для нашего jabber-сервера, а также сервисов на нем (сертификаты будут делаться в том числе для сервисов). Пример конфигурации веб-сервера Apache для данного сервера:<br />
<br />
{{Hider hiding<br />
|title=apache_to_jabber_service_domains.conf<br />
|content=<pre><br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@jabberworld.info<br />
DocumentRoot /var/www/jabberworld.info/htdocs<br />
ServerName jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@upload.jabberworld.info<br />
DocumentRoot /var/www/upload.jabberworld.info/htdocs<br />
ServerName upload.jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@pubsub.jabberworld.info<br />
DocumentRoot /var/www/pubsub.jabberworld.info/htdocs<br />
ServerName pubsub.jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@conference.jabberworld.info<br />
DocumentRoot /var/www/conference.jabberworld.info/htdocs<br />
ServerName conference.jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@proxy.jabberworld.info<br />
DocumentRoot /var/www/proxy.jabberworld.info/htdocs<br />
ServerName proxy.jabberworld.info<br />
</VirtualHost><br />
</pre><br />
}}<br />
<br />
В каталогах сервера не обязательно должен быть какой-то контент, хотя, например, на основном домене можно разместить какую-то страничку, посвященную jabber-серверу, а на поддомене '''conference''' разместить чат-логи [[Конференции|конференций]]. Субдомен '''upload''' можно приспособить под загружаемые через HTTP Upload файлы, чтобы в дальнейшем их раздавал веб-сервер<ref name="http_upload">В таком случае ему нужно обеспечить доступ к каталогу '''/var/lib/prosody/http_upload/''' - а лучше указать опцию '''http_upload_path''' с путем за пределами домашнего каталога Prosody, плюс обеспечить нужные права веб-серверу, чтобы он мог читать файлы, загруженные через jabber-сервер. Такое решение имеет еще одно преимущество: разнообразные клиенты (не только Jabber) будут гораздо охотнее показывать превью для обычных HTTP/HTTPS-ссылок (т.е., на 80 или 443-м порту), а не тех, где контент отдается на "необычном" порту - вроде 5281 в данном примере.</ref>.<br />
<br />
После всех приготовлений<ref>Более подробно можно почитать тут: [[Свой сервер: подготовка веб-сервера и сертификатов]]</ref> создайте все необходимые сертификаты. Для этого воспользуйтесь следующими командами (выполнять надо от пользователя '''root'''):<br />
<br />
certbot certonly --webroot --webroot-path /var/www/EXAMPLE.COM/htdocs/ -d EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/conference.EXAMPLE.COM/htdocs/ -d conference.EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/upload.EXAMPLE.COM/htdocs/ -d upload.EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/pubsub.EXAMPLE.COM/htdocs/ -d pubsub.EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/proxy.EXAMPLE.COM/htdocs/ -d proxy.EXAMPLE.COM --rsa-key-size 4096<br />
<br />
В параметрах после '''--webroot-path''' указывается каталог веб-сервера для данного домена, а после '''-d''' - сам домен.<br />
<br />
После успешного выполнения команд будет выдана информация о созданном сертификате, в том числе 2 файла - цепочка ключей и приватный ключ - сохраните эти пути для дальнейшего использования, они нам еще пригодятся. Всего получится 10 файлов. certbot обновляет сертификаты автоматически, если срок их истечения составляет менее 30 дней - т.е., обновление происходит раз в 2 месяца.<br />
<br />
Так как Prosody работает от своего пользователя и не имеет доступа к сертификатам, созданным certbot от рута, то надо каким-то образом предоставить доступ ejabberd'у к сертификатам. Самым простым и корректным вариантом на сейчас является выполнение следующей команды от рута<ref>https://prosody.im/doc/letsencrypt</ref>:<br />
<br />
prosodyctl --root cert import /etc/letsencrypt/live<br />
<br />
В дальнейшем эту команду можно использовать после каждого обновления сертификатов - например, указав ее в качестве deploy hook для certbot.<br />
<br />
== Установка и настройка Prosody ==<br />
<br />
Все подготовительные процедуры завершены, теперь можно приступать непосредственно к установке и настройке своего jabber-сервера. Для поддержки звонков потребуется еще STUN/TURN-сервер - в качестве него будем использовать Coturn. В Debian установить Prosody с поддержкой MySQL<ref name="mysql">На самом деле выбор MySQL обусловлен с одной стороны ее популярностью на веб-хостингах, с другой - возможностью хранить большие объемы данных, которые могут потребоваться, если вы хотите хранить, например, архив сообщений за длительное время. Однако если таких планов нет и это будет сервер для одного или нескольких человек со скромными запросами - то вполне можно обойтись Sqlite.</ref> и Coturn можно командой<br />
<br />
apt-get install prosody coturn lua-dbi-mysql<br />
<br />
'''Примечание''': на момент написания статьи самая последняя версия Prosody - 0.12.4 - доступна в репозитории '''backports'''. Чтобы установить сервер оттуда - добавьте к команде выше ключ '''-t bookworm-backports''' (само-собой, репозиторий должен быть прописан в '''/etc/apt/sources.list''').<br />
<br />
Настройку начнем с Coturn - она очень простая и сводится к включению сервиса в файле '''/etc/default/coturn''' опции '''TURNSERVER_ENABLED=1''', а также приведению конфиг-файла '''/etc/turnserver.conf''' к такому виду:<br />
<br />
{{Hider hiding<br />
|title=/etc/turnserver.conf<br />
|content=<pre><br />
listening-port=3478<br />
tls-listening-port=5349<br />
verbose<br />
use-auth-secret<br />
static-auth-secret=MYSUPERSECRETKEY<br />
userdb=/var/lib/turn/turndb<br />
realm=EXAMPLE.COM<br />
cert=/etc/turncerts/EXAMPLE.COM.fullchain.pem<br />
pkey=/etc/turncerts/EXAMPLE.COM.privkey.pem<br />
syslog<br />
prod<br />
no-multicast-peers<br />
no-cli<br />
no-tlsv1<br />
no-tlsv1_1<br />
no-rfc5780<br />
no-stun-backward-compatibility<br />
response-origin-only-with-rfc5780<br />
</pre><br />
}}<br />
<br />
Фактически, изменения в конфиге сводятся по-большей части к следующему:<br />
<br />
* Указываем прослушиваемые порты - они должны быть такие же, как были указаны в SRV-записях в DNS.<br />
* Включаем '''use-auth-secret''' и указываем придуманный '''ключ-пароль''' - его мы потом укажем в конфиг-файле у Prosody.<br />
* Указываем '''realm''' - домен и сертификат с ключом для него.<br />
<br />
Да, так как Coturn не может напрямую прочитать сертификаты из каталога Let's Encrypt - для правильной работы можно создать отдельный каталог, куда копировать сертификаты с нужными правами. В примере выше это '''/etc/turncerts'''. Команду копирования и изменения прав можно объединить в одном скрипте с командой копирования сертификатов для Prosody и вызывать этот скрипт в качестве deploy hook для Let's Encrypt (или просто по Cron'у, например, раз в неделю).<br />
<br />
Закончив правку конфиг-файла, перезапускаем TURN-сервер:<br />
<br />
systemctl restart coturn.service<br />
<br />
Теперь переходим к настройке Prosody. Как уже говорилось, под него есть множество разнообразных модулей. Для удобства добавления модулей добавьте следующие пакеты:<br />
<br />
apt-get install luarocks liblua5.4-dev lua-luaossl --no-install-recommends<br />
<br />
После чего можно сразу установить полезные модули:<br />
<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_admin_web # Поддержка WEB-интерфейса для управления сервером<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_vcard_muc # Поддержка vCard для конференций<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_muc_moderation # Модерирование конференций и возможность удалять спам<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_cloud_notify # Поддержка PUSH-уведомлений<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_cloud_notify_extensions # Дополнительные модули для PUSH<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_register_web # Поддержка регистрации через веб-страницу<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_mam_adhoc # Возможность управлять настройками MAM-архива из jabber-клиента<br />
<br />
Конфигурационный файл у Prosody состоит из нескольких секций:<br />
* Общие параметры<br />
* Параметры виртуал-хоста<br />
* Параметры сервисов.<br />
<br />
Для удобства то, что относится к виртуал-хосту и его сервисам, вынесено в отдельный файл. Для включения нужного виртуал-хоста поместите симлинк на его конфиг в '''/etc/prosody/conf.d'''.<br />
<br />
{{Hider hiding<br />
|title=/etc/prosody/prosody.cfg.lua<br />
|content=<pre><br />
-- Prosody Example Configuration File<br />
--<br />
-- Information on configuring Prosody can be found on our<br />
-- website at https://prosody.im/doc/configure<br />
--<br />
-- Tip: You can check that the syntax of this file is correct<br />
-- when you have finished by running this command:<br />
-- prosodyctl check config<br />
-- If there are any errors, it will let you know what and where<br />
-- they are, otherwise it will keep quiet.<br />
--<br />
-- The only thing left to do is rename this file to remove the .dist ending, and fill in the<br />
-- blanks. Good luck, and happy Jabbering!<br />
<br />
<br />
---------- Server-wide settings ----------<br />
-- Settings in this section apply to the whole server and are the default settings<br />
-- for any virtual hosts<br />
<br />
-- This is a (by default, empty) list of accounts that are admins<br />
-- for the server. Note that you must create the accounts separately<br />
-- (see https://prosody.im/doc/creating_accounts for info)<br />
-- Example: admins = { "user1@example.com", "user2@example.net" }<br />
admins = {<br />
"admin@EXAMPLE.COM"<br />
}<br />
<br />
-- This option allows you to specify additional locations where Prosody<br />
-- will search first for modules. For additional modules you can install, see<br />
-- the community module repository at https://modules.prosody.im/<br />
-- For a local administrator it's common to place local modifications<br />
-- under /usr/local/ hierarchy:<br />
plugin_paths = {<br />
"/usr/lib/prosody/modules",<br />
"/var/lib/prosody/custom_plugins/"<br />
}<br />
<br />
-- This is the list of modules Prosody will load on startup.<br />
-- Documentation for bundled modules can be found at: https://prosody.im/doc/modules<br />
modules_enabled = {<br />
<br />
-- Generally required<br />
"disco"; -- Service discovery<br />
"roster"; -- Allow users to have a roster. Recommended ;)<br />
"saslauth"; -- Authentication for clients and servers. Recommended if you want to log in.<br />
"tls"; -- Add support for secure TLS on c2s/s2s connections<br />
<br />
-- Not essential, but recommended<br />
"blocklist"; -- Allow users to block communications with other users<br />
"bookmarks"; -- Synchronise the list of open rooms between clients<br />
"carbons"; -- Keep multiple online clients in sync<br />
"dialback"; -- Support for verifying remote servers using DNS<br />
"limits"; -- Enable bandwidth limiting for XMPP connections<br />
"pep"; -- Allow users to store public and private data in their account<br />
"private"; -- Legacy account storage mechanism (XEP-0049)<br />
"smacks"; -- Stream management and resumption (XEP-0198)<br />
"vcard4"; -- User profiles (stored in PEP)<br />
"vcard_legacy"; -- Conversion between legacy vCard and PEP Avatar, vcard<br />
<br />
-- Nice to have<br />
"csi_simple"; -- Simple but effective traffic optimizations for mobile devices<br />
"ping"; -- Replies to XMPP pings with pongs<br />
"register"; -- Allow users to register on this server using a client and change passwords<br />
"time"; -- Let others know the time here on this server<br />
"uptime"; -- Report how long server has been running<br />
"version"; -- Replies to server version requests<br />
"mam"; -- Store recent messages to allow multi-device synchronization<br />
"turn_external"; -- Provide external STUN/TURN service for e.g. audio/video calls<br />
<br />
-- Admin interfaces<br />
"admin_adhoc"; -- Allows administration via an XMPP client that supports ad-hoc commands<br />
"admin_shell"; -- Allow secure administration via 'prosodyctl shell'<br />
<br />
-- HTTP modules<br />
"bosh"; -- Enable BOSH clients, aka "Jabber over HTTP"<br />
--"http_openmetrics"; -- for exposing metrics to stats collectors<br />
"websocket"; -- XMPP over WebSockets<br />
<br />
-- Other specific functionality<br />
"posix"; -- POSIX functionality, sends server to background, enables syslog, etc.<br />
"announce"; -- Send announcement to all online users<br />
--"groups"; -- Shared roster support<br />
--"legacyauth"; -- Legacy authentication. Only used by some old clients and bots.<br />
--"mimicking"; -- Prevent address spoofing<br />
--"motd"; -- Send a message to users when they log in<br />
"s2s_bidi"; -- Bi-directional server-to-server (XEP-0288)<br />
"server_contact_info"; -- Publish contact information for this service<br />
"tombstones"; -- Prevent registration of deleted accounts<br />
"watchregistrations"; -- Alert admins of registrations<br />
"welcome"; -- Welcome users who register accounts<br />
<br />
"cloud_notify"; -- push support<br />
"cloud_notify_extensions"; -- meta-module that simply enables all the modules required to support Siskin or Snikket iOS on a Prosody server<br />
"register_web"; -- registrations via web interface<br />
"mam_adhoc"; -- allowing clients to change archiving preferences<br />
"throttle_presence"; -- automatically cuts down on presence traffic when clients indicate they are inactive<br />
"external_services"; -- calls<br />
"admin_adhoc"; -- ad-hoc administration of server<br />
}<br />
<br />
-- These modules are auto-loaded, but should you want<br />
-- to disable them then uncomment them here:<br />
modules_disabled = {<br />
-- "offline"; -- Store offline messages<br />
-- "c2s"; -- Handle client connections<br />
-- "s2s"; -- Handle server-to-server connections<br />
}<br />
<br />
-- Debian:<br />
-- Please, don't change this option since /run/prosody/<br />
-- is one of the few directories Prosody is allowed to write to<br />
--<br />
pidfile = "/run/prosody/prosody.pid";<br />
<br />
-- Server-to-server authentication<br />
-- Require valid certificates for server-to-server connections?<br />
-- If false, other methods such as dialback (DNS) may be used instead.<br />
<br />
s2s_secure_auth = true<br />
<br />
-- Some servers have invalid or self-signed certificates. You can list<br />
-- remote domains here that will not be required to authenticate using<br />
-- certificates. They will be authenticated using other methods instead,<br />
-- even when s2s_secure_auth is enabled.<br />
<br />
--s2s_insecure_domains = { "insecure.example" }<br />
<br />
-- Even if you disable s2s_secure_auth, you can still require valid<br />
-- certificates for some domains by specifying a list here.<br />
<br />
--s2s_secure_domains = { "jabber.org" }<br />
<br />
<br />
-- Rate limits<br />
-- Enable rate limits for incoming client and server connections. These help<br />
-- protect from excessive resource consumption and denial-of-service attacks.<br />
<br />
limits = {<br />
c2s = {<br />
rate = "3kb/s";<br />
};<br />
s2sin = {<br />
rate = "50kb/s";<br />
};<br />
}<br />
<br />
-- Authentication<br />
-- Select the authentication backend to use. The 'internal' providers<br />
-- use Prosody's configured data storage to store the authentication data.<br />
-- For more information see https://prosody.im/doc/authentication<br />
<br />
authentication = "internal_hashed"<br />
<br />
-- Many authentication providers, including the default one, allow you to<br />
-- create user accounts via Prosody's admin interfaces. For details, see the<br />
-- documentation at https://prosody.im/doc/creating_accounts<br />
<br />
<br />
-- Storage<br />
-- Select the storage backend to use. By default Prosody uses flat files<br />
-- in its configured data directory, but it also supports more backends<br />
-- through modules. An "sql" backend is included by default, but requires<br />
-- additional dependencies. See https://prosody.im/doc/storage for more info.<br />
<br />
storage = "sql" -- Default is "internal" (Debian: "sql" requires one of the<br />
-- lua-dbi-sqlite3, lua-dbi-mysql or lua-dbi-postgresql packages to work)<br />
<br />
-- For the "sql" backend, you can uncomment *one* of the below to configure:<br />
--sql = { driver = "SQLite3", database = "prosody.sqlite" } -- Default. 'database' is the filename.<br />
sql = { driver = "MySQL", database = "jabber_example_com", username = "jabberuser", password = "MYSECRETPASSWORD", host = "localhost" }<br />
--sql = { driver = "PostgreSQL", database = "prosody", username = "prosody", password = "secret", host = "localhost" }<br />
<br />
<br />
-- Archiving configuration<br />
-- If mod_mam is enabled, Prosody will store a copy of every message. This<br />
-- is used to synchronize conversations between multiple clients, even if<br />
-- they are offline. This setting controls how long Prosody will keep<br />
-- messages in the archive before removing them.<br />
<br />
archive_expires_after = "1w" -- Remove archived messages after 1 week<br />
max_archive_query_results = 20;<br />
<br />
-- You can also configure messages to be stored in-memory only. For more<br />
-- archiving options, see https://prosody.im/doc/modules/mod_mam<br />
<br />
<br />
-- Audio/video call relay (STUN/TURN)<br />
-- To ensure clients connected to the server can establish connections for<br />
-- low-latency media streaming (such as audio and video calls), it is<br />
-- recommended to run a STUN/TURN server for clients to use. If you do this,<br />
-- specify the details here so clients can discover it.<br />
-- Find more information at https://prosody.im/doc/turn<br />
<br />
-- Specify the address of the TURN service (you may use the same domain as XMPP)<br />
turn_external_host = "xmpp.EXAMPLE.COM"<br />
<br />
-- This secret must be set to the same value in both Prosody and the TURN server<br />
turn_external_secret = "MYSUPERSECRETKEY"<br />
<br />
<br />
-- Logging configuration<br />
-- For advanced logging see https://prosody.im/doc/logging<br />
--<br />
-- Debian:<br />
-- Logs info and higher to /var/log<br />
-- Logs errors to syslog also<br />
log = {<br />
-- Log files (change 'info' to 'debug' for debug logs):<br />
info = "/var/log/prosody/prosody.log";<br />
error = "/var/log/prosody/prosody.err";<br />
-- Syslog:<br />
{ levels = { "error" }; to = "syslog"; };<br />
}<br />
<br />
<br />
-- Uncomment to enable statistics<br />
-- For more info see https://prosody.im/doc/statistics<br />
statistics = "internal"<br />
<br />
<br />
-- Certificates<br />
-- Every virtual host and component needs a certificate so that clients and<br />
-- servers can securely verify its identity. Prosody will automatically load<br />
-- certificates/keys from the directory specified here.<br />
-- For more information, including how to use 'prosodyctl' to auto-import certificates<br />
-- (from e.g. Let's Encrypt) see https://prosody.im/doc/certificates<br />
<br />
-- Location of directory to find certificates in (relative to main config file):<br />
certificates = "certs"<br />
<br />
c2s_direct_tls_ports = { 5223 }<br />
s2s_direct_tls_ports = { 5270 }<br />
c2s_require_encryption = true<br />
s2s_require_encryption = true<br />
tls_profile = "intermediate" -- "modern" if you don't need TLS 1.2<br />
<br />
contact_info = {<br />
abuse = { "xmpp:admin@EXAMPLE.COM" };<br />
admin = { "xmpp:admin@EXAMPLE.COM" };<br />
feedback = { "xmpp:admin@EXAMPLE.COM" };<br />
support = { "https://EXAMPLE.COM", "xmpp:admin@EXAMPLE.COM" };<br />
}<br />
<br />
external_services = {<br />
{<br />
type = "stun",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "stun",<br />
transport = "udp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "turn",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "turn",<br />
transport = "udp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "stuns",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 5349<br />
}, {<br />
type = "turns",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 5349<br />
}<br />
}<br />
<br />
consider_websocket_secure = true<br />
consider_bosh_secure = true<br />
<br />
----------- Virtual hosts -----------<br />
-- You need to add a VirtualHost entry for each domain you wish Prosody to serve.<br />
-- Settings under each VirtualHost entry apply *only* to that host.<br />
-- It's customary to maintain VirtualHost entries in separate config files<br />
-- under /etc/prosody/conf.d/ directory. Examples of such config files can<br />
-- be found in /etc/prosody/conf.avail/ directory.<br />
<br />
------ Additional config files ------<br />
-- For organizational purposes you may prefer to add VirtualHost and<br />
-- Component definitions in their own config files. This line includes<br />
-- all config files in /etc/prosody/conf.d/<br />
<br />
-- VirtualHost "localhost"<br />
-- Prosody requires at least one enabled VirtualHost to function. You can<br />
-- safely remove or disable 'localhost' once you have added another.<br />
<br />
<br />
--VirtualHost "example.com"<br />
<br />
------ Components ------<br />
-- You can specify components to add hosts that provide special services,<br />
-- like multi-user conferences, and transports.<br />
-- For more information on components, see https://prosody.im/doc/components<br />
<br />
---Set up a MUC (multi-user chat) room server on conference.example.com:<br />
--Component "conference.example.com" "muc"<br />
--- Store MUC messages in an archive and allow users to access it<br />
--modules_enabled = { "muc_mam" }<br />
<br />
---Set up a file sharing component<br />
--Component "share.example.com" "http_file_share"<br />
<br />
---Set up an external component (default component port is 5347)<br />
--<br />
-- External components allow adding various services, such as gateways/<br />
-- bridges to non-XMPP networks and services. For more info<br />
-- see: https://prosody.im/doc/components#adding_an_external_component<br />
--<br />
--Component "gateway.example.com"<br />
-- component_secret = "password"<br />
<br />
Include "conf.d/*.cfg.lua"<br />
<br />
---------- End of the Prosody Configuration file ----------<br />
-- You usually **DO NOT** want to add settings here at the end, as they would<br />
-- only apply to the last defined VirtualHost or Component.<br />
--<br />
-- Settings for the global section should go higher up, before the first<br />
-- VirtualHost or Component line, while settings intended for specific hosts<br />
-- should go under the corresponding VirtualHost or Component line.<br />
--<br />
-- For more information see https://prosody.im/doc/configure<br />
<br />
</pre><br />
}}<br />
<br />
{{Hider hiding<br />
|title=Виртуал хост /etc/prosody/conf.avail/EXAMPLE.COM.cfg.lua<br />
|content=<pre><br />
-- Section for example.com<br />
<br />
VirtualHost "EXAMPLE.COM"<br />
enabled = true<br />
<br />
-- Assign this host a certificate for TLS, otherwise it would use the one<br />
-- set in the global section (if any).<br />
-- Note that old-style SSL on port 5223 only supports one certificate, and will always<br />
-- use the global one.<br />
ssl = {<br />
key = "/etc/prosody/certs/EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
<br />
modules_enabled = {<br />
"admin_web"<br />
--"invites"; -- Create and manage invites<br />
--"invites_adhoc"; -- Allow admins/users to create invitations via their client<br />
--"invites_register"; -- Allows invited users to create accounts<br />
}<br />
allow_registration = false -- Allow users to register new accounts via in-band<br />
<br />
------ Components ------<br />
-- You can specify components to add hosts that provide special services,<br />
-- like multi-user conferences, and transports.<br />
-- For more information on components, see http://prosody.im/doc/components<br />
<br />
<br />
-- Set up a SOCKS5 bytestream proxy for server-proxied file transfers:<br />
Component "proxy.EXAMPLE.COM" "proxy65"<br />
ssl = {<br />
key = "/etc/prosody/certs/proxy.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/proxy.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
-- proxy65_address = "proxy.EXAMPLE.COM"<br />
proxy65_acl = { "EXAMPLE.COM" }<br />
<br />
-- Set up a MUC (multi-user chat) room server on conference.example.com:<br />
Component "conference.EXAMPLE.COM" "muc"<br />
modules_enabled = {<br />
"muc_mam",<br />
"vcard_muc",<br />
"muc_moderation"<br />
}<br />
ssl = {<br />
key = "/etc/prosody/certs/conference.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/conference.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
muc_log_by_default = true<br />
muc_log_presences = false<br />
log_all_rooms = false<br />
muc_log_expires_after = "1w"<br />
muc_log_cleanup_interval = 4 * 60 * 60<br />
restrict_room_creation = "local"<br />
<br />
Component "upload.EXAMPLE.COM" "http_file_share"<br />
ssl = {<br />
key = "/etc/prosody/certs/upload.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/upload.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
<br />
http_file_share_size_limit = 100*1024*1024 -- 100 MB per file<br />
http_file_share_expires_after = 7*86400 -- file expiration - 1 week<br />
http_file_share_global_quota = 1024*1024*1024*10 -- 10 GiB total<br />
<br />
Component "pubsub.EXAMPLE.COM" "pubsub"<br />
ssl = {<br />
key = "/etc/prosody/certs/pubsub.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/pubsub.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
</pre><br />
}}<br />
<br />
Файл конфигурации Prosody очень хорошо комментирован, поэтому рассмотрим ключевые моменты, а также опции, добавленные для дополнительно установленных модулей.<br />
<br />
* Первым в конфиг-файле идет [[Jabber ID]] будущего администратора - ему будут доступны команды управления сервером, а также будут присылаться различные уведомления.<br />
* В '''plugin_paths''' добавляется путь к каталогу с устанавливаемыми плагинами.<br />
* Далее идет обширный список модулей. Рассмотрим некоторые:<br />
** '''turn_external''' позволит нам подключить настроенный ранее Coturn к Prosody для работы звонков.<br />
** '''cloud_notify''' включит поддержку PUSH-уведомлений.<br />
** '''register_web''' включает регистрацию через веб-страницу. Она доступна по адресу https://EXAMPLE.COM:5281/register_web. Штатно тут включена простенькая CAPTCHA, но можно использовать reCaptcha, для этого дополнительно необходимо будет указать ключи для этого сервиса.<br />
** '''admin_adhoc''' позволит выполнять ряд команд на сервере с JID'а администратора из тех клиентов, которые умеют [[Ad-Hoc]].<br />
* Далее следуют настройки, в которых можно усилить или ослабить проверки сертификатов для других серверов.<br />
* Следующей ключевой настройкой будет указание сервера баз данных. Как мы уже условились выше, для хранения данных сервера [[Свой сервер: подготовка базы данных|будем использовать MySQL или MariaDB]]. Prosody имеет весьма простую структуру базы и встроенную схему, поэтому дополнительных действий не требуется.<br />
* В '''archive_expires_after''' можем указать, как скоро нужно чистить архив сообщений для MAM. Для конференций есть отдельная настройка, она будет описана ниже.<br />
* В '''turn_external_host''' и '''turn_external_secret''' указывается адрес Coturn и тот самый ключ, который прописывали в '''/etc/turnserver.conf'''.<br />
* Далее - несколько опций касательно безопасности:<br />
** '''c2s_direct_tls_ports''' и '''s2s_direct_tls_ports''' включает работу с TLS-портами - они должны быть те же, что указывались в SRV-записях в DNS.<br />
** '''c2s_require_encryption''' и '''s2s_require_encryption''' означает использование исключительно шифрованных соединений между серверами, а также между сервером и клиентом.<br />
** '''tls_profile''' настраивает перечень шифров и протоколов, которые может использовать Prosody.<br />
* В '''contact_info''' можно перечислить контакты администратора и, например, адрес конференции поддержки сервера.<br />
* '''external_services''' описывает сервисы, которые предоставляет Coturn.<br />
<br />
На этом настройка основной части завершена и далее идет настройка виртуальных хостов и их сервисов:<br />
<br />
* В секции VirtualHost идет указание SSL-сертификатов для домена, а также разрешение регистрации через jabber-клиент и включение веб-интерфейса для управления сервером, который доступен по адресу https://example.com:5281/admin.<br />
* '''invites''' и сопутствующие ему модули позволяют сделать регистрацию по приглашениям. Однако есть одно но (на сейчас): это отключит обычную регистрацию. Поэтому какой вариант оставить - решайте сами.<br />
<br />
Далее перечисляется несколько компонентов - сервисов для данного сервера. В показанном примере это [[конференции]], [[Передача файлов|proxy]], [[Передача файлов|HTTP Upload]] и [[PEP|pubsub]]. Для каждого из них указывается своя пара сертификатов и ключей.<br />
<br />
* Для '''proxy''' можно указать субдомен, на котором он будет доступен, а опция '''proxy65_acl''' перечисляет домены, которые смогут передавать файлы через этот прокси.<br />
* Для конференций включается поддержка MAM и модерирования. В опциях задается включение MAM по-умолчанию, время устаревания MAM-архива, а также правила доступа на создание новых конференций.<br />
* Для модуля '''http_file_share''' перечисляются лимиты на размеры одиночных файлов, а также общий размер хранилища и время устаревания загруженных файлов. Для Prosody сделано несколько реализаций HTTP Upload - например, можно переключиться на '''mod_http_upload''', если mod_http_file_share чем-то не устроит или вообще использовать [https://github.com/horazont/xmpp-http-upload внешний сервис] через '''http_upload_external'''.<br />
<br />
Закончив правку файлов конфигурации - перезапустите Prosody:<br />
<br />
systemctl restart prosody<br />
<br />
Теперь можете создать пользователя-администратора:<br />
<br />
prosodyctl adduser admin@EXAMPLE.COM<br />
<br />
А также проверить корректность конфигурации следующими командами:<br />
<br />
prosodyctl check config<br />
prosodyctl check certs<br />
prosodyctl check turn<br />
<br />
Во всех случаях в конце команда должна возвращать "'''All checks passed, congratulations!'''". Сервер готов к использованию!<br />
<br />
==Сноски==<br />
<br />
<references/><br />
<br />
==Ссылки==<br />
<br />
* https://prosody.im - домашняя страница Prosody и [https://prosody.im/doc ссылка на документацию]<br />
* [https://open-networks.ru/d/67-prosody-im-v012x-ustanovka-i-nastroyka-xmpp-servera-coturn-fail2ban Очень подробное пользовательское руководство по настройке Prosody]<br />
* [https://www.8host.com/blog/ustanovka-prosody-v-ubuntu-18-04/ Еще одно руководство по установке и настройке]<br />
<br />
[[Category:Свой сервер]]</div>Rainhttps://jabberworld.info/index.php?title=%D0%A1%D0%B2%D0%BE%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80:_%D0%BF%D0%BE%D0%B4%D1%80%D0%BE%D0%B1%D0%BD%D0%BE%D0%B5_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B5_Prosody&diff=10223Свой сервер: подробное руководство по установке Prosody2023-11-02T22:04:15Z<p>Rain: маркер</p>
<hr />
<div>В этой статье приводится пример настройки [[Prosody]] - одного из самых популярных и легковесных jabber-серверов. Для сервера написано просто-таки [https://modules.prosody.im/all.html огромное число модулей] на все случаи жизни, поэтому в руководстве, основанном на версии 0.12.4, будет показано подключение актуальных и популярных функций. В качестве сертификатов будем использовать Let's Encrypt - и все это на Debian GNU/Linux.<br />
<br />
Рассмотрим особенности данной конфигурации.<br />
<br />
__TOC__<br />
<br />
== [[ru_wikipedia:DNS|DNS-записи]] ==<br />
<br />
Хотя для базового варианта своего jabber-сервера вполне достаточно [[Регистрация доменного имени|бесплатного DynDNS-домена]], для полноценной конфигурации все же нужно обзавестись собственным доменом, где можно будет добавить все необходимые DNS-записи и сделать субдомены для сервисов. Выбор регистратора и покупка домена остается за рамками данной статьи, тут только приводятся шаги, которые надо сделать после покупки домена в его админке.<br />
<br />
Всего понадобится около 15 записей в DNS:<br />
<br />
# Для удобства, чтобы в случае миграции сервера с одного IP на другой не приходилось переписывать все записи, стоит завести для него субдомен, который будет ссылаться на нужный IP с помощью А-записи (или 2 таких субдомена в случае использования IPv4+IPv6 - один с A-записью, а второй с AAAA), а все остальные записи сделать CNAME-алиасами для него. Например, для данного сервера ('''jabberworld.info''') сделаны 2 субдомена '''xmpp.jabberworld.info''', ссылающиеся на IPv4 и IPv6-адреса.<br />
# Создаем субдомены для необходимых сервисов сервера<ref>Да, если планируется использовать, например, конференции исключительно локально, то можно обойтись и без DNS-записей - сервер и так знает, куда ему подключаться, так как он этот сервис и предоставляет. Но если хочется полноценный сервис, с которым смогут взаимодействовать и другие сервера - то все же потребуются указанные записи в DNS.</ref> - '''conference''' (для [[Конференции|конференций]]), '''proxy''' (прокси для прямой [[Передача файлов|передачи файлов]]), '''pubsub''' (сервисы типа "Публикация/подписка", где может сохраняться самая разная информация) и '''upload''' (сервис для [[Передача файлов|передачи файлов]] через HTTP Upload). Все эти записи создаем как CNAME на наш субдомен из 1-го пункта.<br />
# Создаем ряд SRV-записей для нашего основного домена - они показывают, где именно какой сервис находится. Конечно, если у вас все на одном адресе, то будет работать и так, но мы ведь решили все делать правильно, верно? Итак, нужны такие SRV-записи:<br />
<br />
:: '''_xmpp-client._tcp.EXAMPLE.COM''' (порт '''5222''') - чтобы указать, куда подключаться [[Клиенты Jabber|jabber-клиенту]]<br />
:: '''_xmpps-client._tcp.EXAMPLE.COM''' (порт '''5223''') - аналогичная запись для [https://xmpp.org/extensions/xep-0368.html TLS-подключений клиентов]<br />
:: '''_xmpp-server._tcp.EXAMPLE.COM''' (порт '''5269''') - чтобы указать, куда подключаться [[Публичные серверы Jabber|jabber-серверу]]<br />
:: '''_xmpps-server._tcp.EXAMPLE.COM''' (порт '''5270''') - аналогичная запись для [https://xmpp.org/extensions/xep-0368.html TLS-подключений серверов].<br />
<br />
:: Записи ниже служат для работы сервиса аудио/видеозвонков через jabber<ref name="avcalls">https://prosody.im/doc/turn</ref>. Для максимальной совместимости будем использовать как [[ru_wikipedia:STUN|STUN]], так и [[ru_wikipedia:Traversal Using Relay NAT|TURN]] - все возможные варианты:<br />
<br />
:: '''_stun._tcp.EXAMPLE.COM''' (порт '''3478''') - [[ru_wikipedia:STUN|STUN]] через [[ru_wikipedia:TCP|TCP]]<br />
:: '''_stun._udp.EXAMPLE.COM''' (порт '''3478''') - STUN через UDP<br />
:: '''_stuns._tcp.EXAMPLE.COM''' (порт '''5349''') - шифрованный STUN через TCP<br />
:: '''_turn._tcp.EXAMPLE.COM''' (порт '''3478''') - [[ru_wikipedia:Traversal Using Relay NAT|TURN]] через [[ru_wikipedia:TCP|TCP]]<br />
:: '''_turn._udp.EXAMPLE.COM''' (порт '''3478''') - TURN через UDP<br />
:: '''_turns._tcp.EXAMPLE.COM''' (порт '''5349''') - шифрованный TURN через TCP<br />
<br />
:: Во всех случаях target'ом для записей служит наш алиас из первого пункта.<br />
{{Hider hiding|<br />
|title=Для продвинутых<br />
|content=<br />
:: Самый полный вариант подразумевает в том числе создание SRV-записей для каждого из сервисов-субдоменов - тех, к которым будут подключаться сторонние серверы. Например, для конференций это может выглядеть так:<br />
<br />
:: '''_xmpp-server._tcp.conference.EXAMPLE.COM''' (порт '''5269''')<br />
:: '''_xmpps-server._tcp.conference.EXAMPLE.COM''' (порт '''5270''' для TLS)<br />
<br />
:: Но, как уже говорилось выше, это для совсем уж необычных конфигураций - когда сам домен указывает на один адрес (например, там может работать веб-сервер, предоставляющий чат-логи на сайте https://conference.example.com), а сам jabber-сервер при этом находится совершенно на другом.<br />
}}<br />
Вот как выглядят записи для данного сервера в админке бесплатного DNS-провайдера [https://dns.he.net Hurricane Electric]:<br />
<br />
<center>[[Файл:Jabber srv.png]]</center><br />
<br />
== Сертификаты ==<br />
<br />
<br />
В современном мире стандартной практикой является шифрование соединений, а для этого, в свою очередь, требуются [[ru_wikipedia:Цифровой сертификат|сертификаты]] от доверенных центров сертификации. Можно, конечно, использовать самоподписанный сертификат, но, во-первых, не все серверы будут их принимать - а значит, к ним не получится подключиться и общаться с их пользователями, а во-вторых, в подключающихся клиентах будут появляться сообщения о недоверенном сертификате, что тоже будет доставлять определенные неудобства. Поэтому стоит воспользоваться услугами одного из популярных бесплатных центров сертификации - [https://letsencrypt.org Let's Encrypt].<br />
<br />
Для работы с сертификатами от Let's Encrypt в Debian есть специальный пакет - '''certbot''', поэтому установите его следующей командой:<br />
<br />
sudo apt-get install certbot<br />
<br />
Сертификаты от Let's Encrypt выдаются сроком на 3 месяца, поэтому в конце этого срока их нужно обновлять. Для подтверждения владения доменом, а также для автоматизации обновления сертификатов в дальнейшем со стороны Let's Encrypt делается запрос на веб-сервер для указанного домена, поэтому для полноценной работы стоит установить какой-нибудь популярный вариант и прописать там виртуальные хосты для нашего jabber-сервера, а также сервисов на нем (сертификаты будут делаться в том числе для сервисов). Пример конфигурации веб-сервера Apache для данного сервера:<br />
<br />
{{Hider hiding<br />
|title=apache_to_jabber_service_domains.conf<br />
|content=<pre><br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@jabberworld.info<br />
DocumentRoot /var/www/jabberworld.info/htdocs<br />
ServerName jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@upload.jabberworld.info<br />
DocumentRoot /var/www/upload.jabberworld.info/htdocs<br />
ServerName upload.jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@pubsub.jabberworld.info<br />
DocumentRoot /var/www/pubsub.jabberworld.info/htdocs<br />
ServerName pubsub.jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@conference.jabberworld.info<br />
DocumentRoot /var/www/conference.jabberworld.info/htdocs<br />
ServerName conference.jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@proxy.jabberworld.info<br />
DocumentRoot /var/www/proxy.jabberworld.info/htdocs<br />
ServerName proxy.jabberworld.info<br />
</VirtualHost><br />
</pre><br />
}}<br />
<br />
В каталогах сервера не обязательно должен быть какой-то контент, хотя, например, на основном домене можно разместить какую-то страничку, посвященную jabber-серверу, а на поддомене '''conference''' разместить чат-логи [[Конференции|конференций]]. Субдомен '''upload''' можно приспособить под загружаемые через HTTP Upload файлы, чтобы в дальнейшем их раздавал веб-сервер<ref name="http_upload">В таком случае ему нужно обеспечить доступ к каталогу '''/var/lib/prosody/http_upload/''' - а лучше указать опцию '''http_upload_path''' с путем за пределами домашнего каталога Prosody, плюс обеспечить нужные права веб-серверу, чтобы он мог читать файлы, загруженные через jabber-сервер. Такое решение имеет еще одно преимущество: разнообразные клиенты (не только Jabber) будут гораздо охотнее показывать превью для обычных HTTP/HTTPS-ссылок (т.е., на 80 или 443-м порту), а не тех, где контент отдается на "необычном" порту - вроде 5281 в данном примере.</ref>.<br />
<br />
После всех приготовлений<ref>Более подробно можно почитать тут: [[Свой сервер: подготовка веб-сервера и сертификатов]]</ref> создайте все необходимые сертификаты. Для этого воспользуйтесь следующими командами (выполнять надо от пользователя '''root'''):<br />
<br />
certbot certonly --webroot --webroot-path /var/www/EXAMPLE.COM/htdocs/ -d EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/conference.EXAMPLE.COM/htdocs/ -d conference.EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/upload.EXAMPLE.COM/htdocs/ -d upload.EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/pubsub.EXAMPLE.COM/htdocs/ -d pubsub.EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/proxy.EXAMPLE.COM/htdocs/ -d proxy.EXAMPLE.COM --rsa-key-size 4096<br />
<br />
В параметрах после '''--webroot-path''' указывается каталог веб-сервера для данного домена, а после '''-d''' - сам домен.<br />
<br />
После успешного выполнения команд будет выдана информация о созданном сертификате, в том числе 2 файла - цепочка ключей и приватный ключ - сохраните эти пути для дальнейшего использования, они нам еще пригодятся. Всего получится 10 файлов. certbot обновляет сертификаты автоматически, если срок их истечения составляет менее 30 дней - т.е., обновление происходит раз в 2 месяца.<br />
<br />
Так как Prosody работает от своего пользователя и не имеет доступа к сертификатам, созданным certbot от рута, то надо каким-то образом предоставить доступ ejabberd'у к сертификатам. Самым простым и корректным вариантом на сейчас является выполнение следующей команды от рута<ref>https://prosody.im/doc/letsencrypt</ref>:<br />
<br />
prosodyctl --root cert import /etc/letsencrypt/live<br />
<br />
В дальнейшем эту команду можно использовать после каждого обновления сертификатов - например, указав ее в качестве deploy hook для certbot.<br />
<br />
== Установка и настройка Prosody ==<br />
<br />
Все подготовительные процедуры завершены, теперь можно приступать непосредственно к установке и настройке своего jabber-сервера. Для поддержки звонков потребуется еще STUN/TURN-сервер - в качестве него будем использовать Coturn. В Debian установить Prosody с поддержкой MySQL<ref name="mysql">На самом деле выбор MySQL обусловлен с одной стороны ее популярностью на веб-хостингах, с другой - возможностью хранить большие объемы данных, которые могут потребоваться, если вы хотите хранить, например, архив сообщений за длительное время. Однако если таких планов нет и это будет сервер для одного или нескольких человек со скромными запросами - то вполне можно обойтись Sqlite.</ref> и Coturn можно командой<br />
<br />
apt-get install prosody coturn lua-dbi-mysql<br />
<br />
'''Примечание''': на момент написания статьи самая последняя версия Prosody - 0.12.4 - доступна в репозитории '''backports'''. Чтобы установить сервер оттуда - добавьте к команде выше ключ '''-t bookworm-backports''' (само-собой, репозиторий должен быть прописан в '''/etc/apt/sources.list''').<br />
<br />
Настройку начнем с Coturn - она очень простая и сводится к включению сервиса в файле '''/etc/default/coturn''' опции '''TURNSERVER_ENABLED=1''', а также приведению конфиг-файла '''/etc/turnserver.conf''' к такому виду:<br />
<br />
{{Hider hiding<br />
|title=/etc/turnserver.conf<br />
|content=<pre><br />
listening-port=3478<br />
tls-listening-port=5349<br />
verbose<br />
use-auth-secret<br />
static-auth-secret=MYSUPERSECRETKEY<br />
userdb=/var/lib/turn/turndb<br />
realm=EXAMPLE.COM<br />
cert=/etc/turncerts/EXAMPLE.COM.fullchain.pem<br />
pkey=/etc/turncerts/EXAMPLE.COM.privkey.pem<br />
syslog<br />
prod<br />
no-multicast-peers<br />
no-cli<br />
no-tlsv1<br />
no-tlsv1_1<br />
no-rfc5780<br />
no-stun-backward-compatibility<br />
response-origin-only-with-rfc5780<br />
</pre><br />
}}<br />
<br />
Фактически, изменения в конфиге сводятся по-большей части к следующему:<br />
<br />
* Указываем прослушиваемые порты - они должны быть такие же, как были указаны в SRV-записях в DNS.<br />
* Включаем '''use-auth-secret''' и указываем придуманный '''ключ-пароль''' - его мы потом укажем в конфиг-файле у Prosody.<br />
* Указываем '''realm''' - домен и сертификат с ключом для него.<br />
<br />
Да, так как Coturn не может напрямую прочитать сертификаты из каталога Let's Encrypt - для правильной работы можно создать отдельный каталог, куда копировать сертификаты с нужными правами. В примере выше это '''/etc/turncerts'''. Команду копирования и изменения прав можно объединить в одном скрипте с командой копирования сертификатов для Prosody и вызывать этот скрипт в качестве deploy hook для Let's Encrypt (или просто по Cron'у, например, раз в неделю).<br />
<br />
Закончив правку конфиг-файла, перезапускаем TURN-сервер:<br />
<br />
systemctl restart coturn.service<br />
<br />
Теперь переходим к настройке Prosody. Как уже говорилось, под него есть множество разнообразных модулей. Для удобства добавления модулей добавьте следующие пакеты:<br />
<br />
apt-get install luarocks liblua5.4-dev lua-luaossl --no-install-recommends<br />
<br />
После чего можно сразу установить полезные модули:<br />
<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_admin_web # Поддержка WEB-интерфейса для управления сервером<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_vcard_muc # Поддержка vCard для конференций<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_muc_moderation # Модерирование конференций и возможность удалять спам<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_cloud_notify # Поддержка PUSH-уведомлений<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_cloud_notify_extensions # Дополнительные модули для PUSH<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_register_web # Поддержка регистрации через веб-страницу<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_mam_adhoc # Возможность управлять настройками MAM-архива из jabber-клиента<br />
<br />
Конфигурационный файл у Prosody состоит из нескольких секций:<br />
* Общие параметры<br />
* Параметры виртуал-хоста<br />
* Параметры сервисов.<br />
<br />
Для удобства то, что относится к виртуал-хосту и его сервисам, вынесено в отдельный файл. Для включения нужного виртуал-хоста поместите симлинк на его конфиг в '''/etc/prosody/conf.d'''.<br />
<br />
{{Hider hiding<br />
|title=/etc/prosody/prosody.cfg.lua<br />
|content=<pre><br />
-- Prosody Example Configuration File<br />
--<br />
-- Information on configuring Prosody can be found on our<br />
-- website at https://prosody.im/doc/configure<br />
--<br />
-- Tip: You can check that the syntax of this file is correct<br />
-- when you have finished by running this command:<br />
-- prosodyctl check config<br />
-- If there are any errors, it will let you know what and where<br />
-- they are, otherwise it will keep quiet.<br />
--<br />
-- The only thing left to do is rename this file to remove the .dist ending, and fill in the<br />
-- blanks. Good luck, and happy Jabbering!<br />
<br />
<br />
---------- Server-wide settings ----------<br />
-- Settings in this section apply to the whole server and are the default settings<br />
-- for any virtual hosts<br />
<br />
-- This is a (by default, empty) list of accounts that are admins<br />
-- for the server. Note that you must create the accounts separately<br />
-- (see https://prosody.im/doc/creating_accounts for info)<br />
-- Example: admins = { "user1@example.com", "user2@example.net" }<br />
admins = {<br />
"admin@EXAMPLE.COM"<br />
}<br />
<br />
-- This option allows you to specify additional locations where Prosody<br />
-- will search first for modules. For additional modules you can install, see<br />
-- the community module repository at https://modules.prosody.im/<br />
-- For a local administrator it's common to place local modifications<br />
-- under /usr/local/ hierarchy:<br />
plugin_paths = {<br />
"/usr/lib/prosody/modules",<br />
"/var/lib/prosody/custom_plugins/"<br />
}<br />
<br />
-- This is the list of modules Prosody will load on startup.<br />
-- Documentation for bundled modules can be found at: https://prosody.im/doc/modules<br />
modules_enabled = {<br />
<br />
-- Generally required<br />
"disco"; -- Service discovery<br />
"roster"; -- Allow users to have a roster. Recommended ;)<br />
"saslauth"; -- Authentication for clients and servers. Recommended if you want to log in.<br />
"tls"; -- Add support for secure TLS on c2s/s2s connections<br />
<br />
-- Not essential, but recommended<br />
"blocklist"; -- Allow users to block communications with other users<br />
"bookmarks"; -- Synchronise the list of open rooms between clients<br />
"carbons"; -- Keep multiple online clients in sync<br />
"dialback"; -- Support for verifying remote servers using DNS<br />
"limits"; -- Enable bandwidth limiting for XMPP connections<br />
"pep"; -- Allow users to store public and private data in their account<br />
"private"; -- Legacy account storage mechanism (XEP-0049)<br />
"smacks"; -- Stream management and resumption (XEP-0198)<br />
"vcard4"; -- User profiles (stored in PEP)<br />
"vcard_legacy"; -- Conversion between legacy vCard and PEP Avatar, vcard<br />
<br />
-- Nice to have<br />
"csi_simple"; -- Simple but effective traffic optimizations for mobile devices<br />
"ping"; -- Replies to XMPP pings with pongs<br />
"register"; -- Allow users to register on this server using a client and change passwords<br />
"time"; -- Let others know the time here on this server<br />
"uptime"; -- Report how long server has been running<br />
"version"; -- Replies to server version requests<br />
"mam"; -- Store recent messages to allow multi-device synchronization<br />
"turn_external"; -- Provide external STUN/TURN service for e.g. audio/video calls<br />
<br />
-- Admin interfaces<br />
"admin_adhoc"; -- Allows administration via an XMPP client that supports ad-hoc commands<br />
"admin_shell"; -- Allow secure administration via 'prosodyctl shell'<br />
<br />
-- HTTP modules<br />
"bosh"; -- Enable BOSH clients, aka "Jabber over HTTP"<br />
--"http_openmetrics"; -- for exposing metrics to stats collectors<br />
"websocket"; -- XMPP over WebSockets<br />
<br />
-- Other specific functionality<br />
"posix"; -- POSIX functionality, sends server to background, enables syslog, etc.<br />
"announce"; -- Send announcement to all online users<br />
--"groups"; -- Shared roster support<br />
--"legacyauth"; -- Legacy authentication. Only used by some old clients and bots.<br />
--"mimicking"; -- Prevent address spoofing<br />
--"motd"; -- Send a message to users when they log in<br />
"s2s_bidi"; -- Bi-directional server-to-server (XEP-0288)<br />
"server_contact_info"; -- Publish contact information for this service<br />
"tombstones"; -- Prevent registration of deleted accounts<br />
"watchregistrations"; -- Alert admins of registrations<br />
"welcome"; -- Welcome users who register accounts<br />
<br />
"cloud_notify"; -- push support<br />
"cloud_notify_extensions"; -- meta-module that simply enables all the modules required to support Siskin or Snikket iOS on a Prosody server<br />
"register_web"; -- registrations via web interface<br />
"mam_adhoc"; -- allowing clients to change archiving preferences<br />
"throttle_presence"; -- automatically cuts down on presence traffic when clients indicate they are inactive<br />
"external_services"; -- calls<br />
"admin_adhoc"; -- ad-hoc administration of server<br />
}<br />
<br />
-- These modules are auto-loaded, but should you want<br />
-- to disable them then uncomment them here:<br />
modules_disabled = {<br />
-- "offline"; -- Store offline messages<br />
-- "c2s"; -- Handle client connections<br />
-- "s2s"; -- Handle server-to-server connections<br />
}<br />
<br />
-- Debian:<br />
-- Please, don't change this option since /run/prosody/<br />
-- is one of the few directories Prosody is allowed to write to<br />
--<br />
pidfile = "/run/prosody/prosody.pid";<br />
<br />
-- Server-to-server authentication<br />
-- Require valid certificates for server-to-server connections?<br />
-- If false, other methods such as dialback (DNS) may be used instead.<br />
<br />
s2s_secure_auth = true<br />
<br />
-- Some servers have invalid or self-signed certificates. You can list<br />
-- remote domains here that will not be required to authenticate using<br />
-- certificates. They will be authenticated using other methods instead,<br />
-- even when s2s_secure_auth is enabled.<br />
<br />
--s2s_insecure_domains = { "insecure.example" }<br />
<br />
-- Even if you disable s2s_secure_auth, you can still require valid<br />
-- certificates for some domains by specifying a list here.<br />
<br />
--s2s_secure_domains = { "jabber.org" }<br />
<br />
<br />
-- Rate limits<br />
-- Enable rate limits for incoming client and server connections. These help<br />
-- protect from excessive resource consumption and denial-of-service attacks.<br />
<br />
limits = {<br />
c2s = {<br />
rate = "3kb/s";<br />
};<br />
s2sin = {<br />
rate = "50kb/s";<br />
};<br />
}<br />
<br />
-- Authentication<br />
-- Select the authentication backend to use. The 'internal' providers<br />
-- use Prosody's configured data storage to store the authentication data.<br />
-- For more information see https://prosody.im/doc/authentication<br />
<br />
authentication = "internal_hashed"<br />
<br />
-- Many authentication providers, including the default one, allow you to<br />
-- create user accounts via Prosody's admin interfaces. For details, see the<br />
-- documentation at https://prosody.im/doc/creating_accounts<br />
<br />
<br />
-- Storage<br />
-- Select the storage backend to use. By default Prosody uses flat files<br />
-- in its configured data directory, but it also supports more backends<br />
-- through modules. An "sql" backend is included by default, but requires<br />
-- additional dependencies. See https://prosody.im/doc/storage for more info.<br />
<br />
storage = "sql" -- Default is "internal" (Debian: "sql" requires one of the<br />
-- lua-dbi-sqlite3, lua-dbi-mysql or lua-dbi-postgresql packages to work)<br />
<br />
-- For the "sql" backend, you can uncomment *one* of the below to configure:<br />
--sql = { driver = "SQLite3", database = "prosody.sqlite" } -- Default. 'database' is the filename.<br />
sql = { driver = "MySQL", database = "jabber_example_com", username = "jabberuser", password = "MYSECRETPASSWORD", host = "localhost" }<br />
--sql = { driver = "PostgreSQL", database = "prosody", username = "prosody", password = "secret", host = "localhost" }<br />
<br />
<br />
-- Archiving configuration<br />
-- If mod_mam is enabled, Prosody will store a copy of every message. This<br />
-- is used to synchronize conversations between multiple clients, even if<br />
-- they are offline. This setting controls how long Prosody will keep<br />
-- messages in the archive before removing them.<br />
<br />
archive_expires_after = "1w" -- Remove archived messages after 1 week<br />
max_archive_query_results = 20;<br />
<br />
-- You can also configure messages to be stored in-memory only. For more<br />
-- archiving options, see https://prosody.im/doc/modules/mod_mam<br />
<br />
<br />
-- Audio/video call relay (STUN/TURN)<br />
-- To ensure clients connected to the server can establish connections for<br />
-- low-latency media streaming (such as audio and video calls), it is<br />
-- recommended to run a STUN/TURN server for clients to use. If you do this,<br />
-- specify the details here so clients can discover it.<br />
-- Find more information at https://prosody.im/doc/turn<br />
<br />
-- Specify the address of the TURN service (you may use the same domain as XMPP)<br />
turn_external_host = "xmpp.EXAMPLE.COM"<br />
<br />
-- This secret must be set to the same value in both Prosody and the TURN server<br />
turn_external_secret = "MYSUPERSECRETKEY"<br />
<br />
<br />
-- Logging configuration<br />
-- For advanced logging see https://prosody.im/doc/logging<br />
--<br />
-- Debian:<br />
-- Logs info and higher to /var/log<br />
-- Logs errors to syslog also<br />
log = {<br />
-- Log files (change 'info' to 'debug' for debug logs):<br />
info = "/var/log/prosody/prosody.log";<br />
error = "/var/log/prosody/prosody.err";<br />
-- Syslog:<br />
{ levels = { "error" }; to = "syslog"; };<br />
}<br />
<br />
<br />
-- Uncomment to enable statistics<br />
-- For more info see https://prosody.im/doc/statistics<br />
statistics = "internal"<br />
<br />
<br />
-- Certificates<br />
-- Every virtual host and component needs a certificate so that clients and<br />
-- servers can securely verify its identity. Prosody will automatically load<br />
-- certificates/keys from the directory specified here.<br />
-- For more information, including how to use 'prosodyctl' to auto-import certificates<br />
-- (from e.g. Let's Encrypt) see https://prosody.im/doc/certificates<br />
<br />
-- Location of directory to find certificates in (relative to main config file):<br />
certificates = "certs"<br />
<br />
c2s_direct_tls_ports = { 5223 }<br />
s2s_direct_tls_ports = { 5270 }<br />
c2s_require_encryption = true<br />
s2s_require_encryption = true<br />
tls_profile = "intermediate" -- "modern" if you don't need TLS 1.2<br />
<br />
contact_info = {<br />
abuse = { "xmpp:admin@EXAMPLE.COM" };<br />
admin = { "xmpp:admin@EXAMPLE.COM" };<br />
feedback = { "xmpp:admin@EXAMPLE.COM" };<br />
support = { "https://EXAMPLE.COM", "xmpp:admin@EXAMPLE.COM" };<br />
}<br />
<br />
external_services = {<br />
{<br />
type = "stun",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "stun",<br />
transport = "udp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "turn",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "turn",<br />
transport = "udp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "stuns",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 5349<br />
}, {<br />
type = "turns",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 5349<br />
}<br />
}<br />
<br />
consider_websocket_secure = true<br />
consider_bosh_secure = true<br />
<br />
----------- Virtual hosts -----------<br />
-- You need to add a VirtualHost entry for each domain you wish Prosody to serve.<br />
-- Settings under each VirtualHost entry apply *only* to that host.<br />
-- It's customary to maintain VirtualHost entries in separate config files<br />
-- under /etc/prosody/conf.d/ directory. Examples of such config files can<br />
-- be found in /etc/prosody/conf.avail/ directory.<br />
<br />
------ Additional config files ------<br />
-- For organizational purposes you may prefer to add VirtualHost and<br />
-- Component definitions in their own config files. This line includes<br />
-- all config files in /etc/prosody/conf.d/<br />
<br />
-- VirtualHost "localhost"<br />
-- Prosody requires at least one enabled VirtualHost to function. You can<br />
-- safely remove or disable 'localhost' once you have added another.<br />
<br />
<br />
--VirtualHost "example.com"<br />
<br />
------ Components ------<br />
-- You can specify components to add hosts that provide special services,<br />
-- like multi-user conferences, and transports.<br />
-- For more information on components, see https://prosody.im/doc/components<br />
<br />
---Set up a MUC (multi-user chat) room server on conference.example.com:<br />
--Component "conference.example.com" "muc"<br />
--- Store MUC messages in an archive and allow users to access it<br />
--modules_enabled = { "muc_mam" }<br />
<br />
---Set up a file sharing component<br />
--Component "share.example.com" "http_file_share"<br />
<br />
---Set up an external component (default component port is 5347)<br />
--<br />
-- External components allow adding various services, such as gateways/<br />
-- bridges to non-XMPP networks and services. For more info<br />
-- see: https://prosody.im/doc/components#adding_an_external_component<br />
--<br />
--Component "gateway.example.com"<br />
-- component_secret = "password"<br />
<br />
Include "conf.d/*.cfg.lua"<br />
<br />
---------- End of the Prosody Configuration file ----------<br />
-- You usually **DO NOT** want to add settings here at the end, as they would<br />
-- only apply to the last defined VirtualHost or Component.<br />
--<br />
-- Settings for the global section should go higher up, before the first<br />
-- VirtualHost or Component line, while settings intended for specific hosts<br />
-- should go under the corresponding VirtualHost or Component line.<br />
--<br />
-- For more information see https://prosody.im/doc/configure<br />
<br />
</pre><br />
}}<br />
<br />
{{Hider hiding<br />
|title=Виртуал хост /etc/prosody/conf.avail/EXAMPLE.COM.cfg.lua<br />
|content=<pre><br />
-- Section for example.com<br />
<br />
VirtualHost "EXAMPLE.COM"<br />
enabled = true<br />
<br />
-- Assign this host a certificate for TLS, otherwise it would use the one<br />
-- set in the global section (if any).<br />
-- Note that old-style SSL on port 5223 only supports one certificate, and will always<br />
-- use the global one.<br />
ssl = {<br />
key = "/etc/prosody/certs/EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
<br />
modules_enabled = {<br />
"admin_web"<br />
--"invites"; -- Create and manage invites<br />
--"invites_adhoc"; -- Allow admins/users to create invitations via their client<br />
--"invites_register"; -- Allows invited users to create accounts<br />
}<br />
allow_registration = false -- Allow users to register new accounts via in-band<br />
<br />
------ Components ------<br />
-- You can specify components to add hosts that provide special services,<br />
-- like multi-user conferences, and transports.<br />
-- For more information on components, see http://prosody.im/doc/components<br />
<br />
<br />
-- Set up a SOCKS5 bytestream proxy for server-proxied file transfers:<br />
Component "proxy.EXAMPLE.COM" "proxy65"<br />
ssl = {<br />
key = "/etc/prosody/certs/proxy.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/proxy.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
-- proxy65_address = "proxy.EXAMPLE.COM"<br />
proxy65_acl = { "EXAMPLE.COM" }<br />
<br />
-- Set up a MUC (multi-user chat) room server on conference.example.com:<br />
Component "conference.EXAMPLE.COM" "muc"<br />
modules_enabled = {<br />
"muc_mam",<br />
"vcard_muc",<br />
"muc_moderation"<br />
}<br />
ssl = {<br />
key = "/etc/prosody/certs/conference.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/conference.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
muc_log_by_default = true<br />
muc_log_presences = false<br />
log_all_rooms = false<br />
muc_log_expires_after = "1w"<br />
muc_log_cleanup_interval = 4 * 60 * 60<br />
restrict_room_creation = "local"<br />
<br />
Component "upload.EXAMPLE.COM" "http_file_share"<br />
ssl = {<br />
key = "/etc/prosody/certs/upload.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/upload.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
<br />
http_file_share_size_limit = 100*1024*1024 -- 100 MB per file<br />
http_file_share_expires_after = 7*86400 -- file expiration - 1 week<br />
http_file_share_global_quota = 1024*1024*1024*10 -- 10 GiB total<br />
<br />
Component "pubsub.EXAMPLE.COM" "pubsub"<br />
ssl = {<br />
key = "/etc/prosody/certs/pubsub.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/pubsub.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
</pre><br />
}}<br />
<br />
Файл конфигурации Prosody очень хорошо комментирован, поэтому рассмотрим ключевые моменты, а также опции, добавленные для дополнительно установленных модулей.<br />
<br />
* Первым в конфиг-файле идет [[Jabber ID]] будущего администратора - ему будут доступны команды управления сервером, а также будут присылаться различные уведомления.<br />
* В '''plugin_paths''' добавляется путь к каталогу с устанавливаемыми плагинами.<br />
* Далее идет обширный список модулей. Рассмотрим некоторые:<br />
** '''turn_external''' позволит нам подключить настроенный ранее Coturn к Prosody для работы звонков.<br />
** '''cloud_notify''' включит поддержку PUSH-уведомлений.<br />
** '''register_web''' включает регистрацию через веб-страницу. Она доступна по адресу https://EXAMPLE.COM:5281/register_web. Штатно тут включена простенькая CAPTCHA, но можно использовать reCaptcha, для этого дополнительно необходимо будет указать ключи для этого сервиса.<br />
** '''admin_adhoc''' позволит выполнять ряд команд на сервере с JID'а администратора из тех клиентов, которые умеют [[Ad-Hoc]].<br />
* Далее следуют настройки, в которых можно усилить или ослабить проверки сертификатов для других серверов.<br />
* Следующей ключевой настройкой будет указание сервера баз данных. Как мы уже условились выше, для хранения данных сервера [[Свой сервер: подготовка базы данных|будем использовать MySQL или MariaDB]]. Prosody имеет весьма простую структуру базы и встроенную схему, поэтому дополнительных действий не требуется.<br />
* В '''archive_expires_after''' можем указать, как скоро нужно чистить архив сообщений для MAM. Для конференций есть отдельная настройка, она будет описана ниже.<br />
* В '''turn_external_host''' и '''turn_external_secret''' указывается адрес Coturn и тот самый ключ, который прописывали в '''/etc/turnserver.conf'''.<br />
* Далее - несколько опций касательно безопасности:<br />
** '''c2s_direct_tls_ports''' и '''s2s_direct_tls_ports''' включает работу с TLS-портами - они должны быть те же, что указывались в SRV-записях в DNS.<br />
** '''c2s_require_encryption''' и '''s2s_require_encryption''' означает использование исключительно шифрованных соединений между серверами, а также между сервером и клиентом.<br />
** '''tls_profile''' настраивает перечень шифров и протоколов, которые может использовать Prosody.<br />
* В '''contact_info''' можно перечислить контакты администратора и, например, адрес конференции поддержки сервера.<br />
* '''external_services''' описывает сервисы, которые предоставляет Coturn.<br />
<br />
На этом настройка основной части завершена и далее идет настройка виртуальных хостов и их сервисов:<br />
<br />
* В секции VirtualHost идет указание SSL-сертификатов для домена, а также разрешение регистрации через jabber-клиент и включение веб-интерфейса для управления сервером, который доступен по адресу https://example.com:5281/admin.<br />
* '''invites''' и сопутствующие ему модули позволяют сделать регистрацию по приглашениям. Однако есть одно но (на сейчас): это отключит обычную регистрацию. Поэтому какой вариант оставить - решайте сами.<br />
<br />
Далее перечисляется несколько компонентов - сервисов для данного сервера. В показанном примере это [[конференции]], [[Передача файлов|proxy]], [[Передача файлов|HTTP Upload]] и [[PEP|pubsub]]. Для каждого из них указывается своя пара сертификатов и ключей.<br />
<br />
* Для '''proxy''' можно указать субдомен, на котором он будет доступен, а опция '''proxy65_acl''' перечисляет домены, которые смогут передавать файлы через этот прокси.<br />
* Для конференций включается поддержка MAM и модерирования. В опциях задается включение MAM по-умолчанию, время устаревания MAM-архива, а также правила доступа на создание новых конференций.<br />
* Для модуля '''http_file_share''' перечисляются лимиты на размеры одиночных файлов, а также общий размер хранилища и время устаревания загруженных файлов. Для Prosody сделано несколько реализаций HTTP Upload - например, можно переключиться на '''mod_http_upload''', если mod_http_file_share чем-то не устроит или вообще использовать [https://github.com/horazont/xmpp-http-upload внешний сервис] через '''http_upload_external'''.<br />
<br />
Закончив правку файлов конфигурации - перезапустите Prosody:<br />
<br />
systemctl restart prosody<br />
<br />
Теперь можете создать пользователя-администратора:<br />
<br />
prosodyctl adduser admin@EXAMPLE.COM<br />
<br />
А также проверить корректность конфигурации следующими командами:<br />
<br />
prosodyctl check config<br />
prosodyctl check certs<br />
prosodyctl check turn<br />
<br />
Во всех случаях в конце команда должна возвращать "'''All checks passed, congratulations!'''". Сервер готов к использованию!<br />
<br />
==Сноски==<br />
<br />
<references/><br />
<br />
==Ссылки==<br />
<br />
* https://prosody.im - домашняя страница Prosody и [https://prosody.im/doc ссылка на документацию]<br />
* [https://open-networks.ru/d/67-prosody-im-v012x-ustanovka-i-nastroyka-xmpp-servera-coturn-fail2ban Очень подробное пользовательское руководство по настройке Prosody]<br />
* [https://www.8host.com/blog/ustanovka-prosody-v-ubuntu-18-04/ Еще одно руководство по установке и настройке]<br />
<br />
[[Category:Свой сервер]]</div>Rainhttps://jabberworld.info/index.php?title=%D0%A1%D0%B2%D0%BE%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80:_%D0%BF%D0%BE%D0%B4%D1%80%D0%BE%D0%B1%D0%BD%D0%BE%D0%B5_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B5_Prosody&diff=10222Свой сервер: подробное руководство по установке Prosody2023-11-02T21:53:06Z<p>Rain: http_upload->http_fileshare, лесом шапки.</p>
<hr />
<div>В этой статье приводится пример настройки [[Prosody]] - одного из самых популярных и легковесных jabber-серверов. Для сервера написано просто-таки [https://modules.prosody.im/all.html огромное число модулей] на все случаи жизни, поэтому в руководстве, основанном на версии 0.12.4, будет показано подключение актуальных и популярных функций. В качестве сертификатов будем использовать Let's Encrypt - и все это на Debian GNU/Linux.<br />
<br />
Рассмотрим особенности данной конфигурации.<br />
<br />
__TOC__<br />
<br />
== [[ru_wikipedia:DNS|DNS-записи]] ==<br />
<br />
Хотя для базового варианта своего jabber-сервера вполне достаточно [[Регистрация доменного имени|бесплатного DynDNS-домена]], для полноценной конфигурации все же нужно обзавестись собственным доменом, где можно будет добавить все необходимые DNS-записи и сделать субдомены для сервисов. Выбор регистратора и покупка домена остается за рамками данной статьи, тут только приводятся шаги, которые надо сделать после покупки домена в его админке.<br />
<br />
Всего понадобится около 15 записей в DNS:<br />
<br />
# Для удобства, чтобы в случае миграции сервера с одного IP на другой не приходилось переписывать все записи, стоит завести для него субдомен, который будет ссылаться на нужный IP с помощью А-записи (или 2 таких субдомена в случае использования IPv4+IPv6 - один с A-записью, а второй с AAAA), а все остальные записи сделать CNAME-алиасами для него. Например, для данного сервера ('''jabberworld.info''') сделаны 2 субдомена '''xmpp.jabberworld.info''', ссылающиеся на IPv4 и IPv6-адреса.<br />
# Создаем субдомены для необходимых сервисов сервера<ref>Да, если планируется использовать, например, конференции исключительно локально, то можно обойтись и без DNS-записей - сервер и так знает, куда ему подключаться, так как он этот сервис и предоставляет. Но если хочется полноценный сервис, с которым смогут взаимодействовать и другие сервера - то все же потребуются указанные записи в DNS.</ref> - '''conference''' (для [[Конференции|конференций]]), '''proxy''' (прокси для прямой [[Передача файлов|передачи файлов]]), '''pubsub''' (сервисы типа "Публикация/подписка", где может сохраняться самая разная информация) и '''upload''' (сервис для [[Передача файлов|передачи файлов]] через HTTP Upload). Все эти записи создаем как CNAME на наш субдомен из 1-го пункта.<br />
# Создаем ряд SRV-записей для нашего основного домена - они показывают, где именно какой сервис находится. Конечно, если у вас все на одном адресе, то будет работать и так, но мы ведь решили все делать правильно, верно? Итак, нужны такие SRV-записи:<br />
<br />
:: '''_xmpp-client._tcp.EXAMPLE.COM''' (порт '''5222''') - чтобы указать, куда подключаться [[Клиенты Jabber|jabber-клиенту]]<br />
:: '''_xmpps-client._tcp.EXAMPLE.COM''' (порт '''5223''') - аналогичная запись для [https://xmpp.org/extensions/xep-0368.html TLS-подключений клиентов]<br />
:: '''_xmpp-server._tcp.EXAMPLE.COM''' (порт '''5269''') - чтобы указать, куда подключаться [[Публичные серверы Jabber|jabber-серверу]]<br />
:: '''_xmpps-server._tcp.EXAMPLE.COM''' (порт '''5270''') - аналогичная запись для [https://xmpp.org/extensions/xep-0368.html TLS-подключений серверов].<br />
<br />
:: Записи ниже служат для работы сервиса аудио/видеозвонков через jabber<ref name="avcalls">https://prosody.im/doc/turn</ref>. Для максимальной совместимости будем использовать как [[ru_wikipedia:STUN|STUN]], так и [[ru_wikipedia:Traversal Using Relay NAT|TURN]] - все возможные варианты:<br />
<br />
:: '''_stun._tcp.EXAMPLE.COM''' (порт '''3478''') - [[ru_wikipedia:STUN|STUN]] через [[ru_wikipedia:TCP|TCP]]<br />
:: '''_stun._udp.EXAMPLE.COM''' (порт '''3478''') - STUN через UDP<br />
:: '''_stuns._tcp.EXAMPLE.COM''' (порт '''5349''') - шифрованный STUN через TCP<br />
:: '''_turn._tcp.EXAMPLE.COM''' (порт '''3478''') - [[ru_wikipedia:Traversal Using Relay NAT|TURN]] через [[ru_wikipedia:TCP|TCP]]<br />
:: '''_turn._udp.EXAMPLE.COM''' (порт '''3478''') - TURN через UDP<br />
:: '''_turns._tcp.EXAMPLE.COM''' (порт '''5349''') - шифрованный TURN через TCP<br />
<br />
:: Во всех случаях target'ом для записей служит наш алиас из первого пункта.<br />
{{Hider hiding|<br />
|title=Для продвинутых<br />
|content=<br />
:: Самый полный вариант подразумевает в том числе создание SRV-записей для каждого из сервисов-субдоменов - тех, к которым будут подключаться сторонние серверы. Например, для конференций это может выглядеть так:<br />
<br />
:: '''_xmpp-server._tcp.conference.EXAMPLE.COM''' (порт '''5269''')<br />
:: '''_xmpps-server._tcp.conference.EXAMPLE.COM''' (порт '''5270''' для TLS)<br />
<br />
:: Но, как уже говорилось выше, это для совсем уж необычных конфигураций - когда сам домен указывает на один адрес (например, там может работать веб-сервер, предоставляющий чат-логи на сайте https://conference.example.com), а сам jabber-сервер при этом находится совершенно на другом.<br />
}}<br />
Вот как выглядят записи для данного сервера в админке бесплатного DNS-провайдера [https://dns.he.net Hurricane Electric]:<br />
<br />
<center>[[Файл:Jabber srv.png]]</center><br />
<br />
== Сертификаты ==<br />
<br />
<br />
В современном мире стандартной практикой является шифрование соединений, а для этого, в свою очередь, требуются [[ru_wikipedia:Цифровой сертификат|сертификаты]] от доверенных центров сертификации. Можно, конечно, использовать самоподписанный сертификат, но, во-первых, не все серверы будут их принимать - а значит, к ним не получится подключиться и общаться с их пользователями, а во-вторых, в подключающихся клиентах будут появляться сообщения о недоверенном сертификате, что тоже будет доставлять определенные неудобства. Поэтому стоит воспользоваться услугами одного из популярных бесплатных центров сертификации - [https://letsencrypt.org Let's Encrypt].<br />
<br />
Для работы с сертификатами от Let's Encrypt в Debian есть специальный пакет - '''certbot''', поэтому установите его следующей командой:<br />
<br />
sudo apt-get install certbot<br />
<br />
Сертификаты от Let's Encrypt выдаются сроком на 3 месяца, поэтому в конце этого срока их нужно обновлять. Для подтверждения владения доменом, а также для автоматизации обновления сертификатов в дальнейшем со стороны Let's Encrypt делается запрос на веб-сервер для указанного домена, поэтому для полноценной работы стоит установить какой-нибудь популярный вариант и прописать там виртуальные хосты для нашего jabber-сервера, а также сервисов на нем (сертификаты будут делаться в том числе для сервисов). Пример конфигурации веб-сервера Apache для данного сервера:<br />
<br />
{{Hider hiding<br />
|title=apache_to_jabber_service_domains.conf<br />
|content=<pre><br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@jabberworld.info<br />
DocumentRoot /var/www/jabberworld.info/htdocs<br />
ServerName jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@upload.jabberworld.info<br />
DocumentRoot /var/www/upload.jabberworld.info/htdocs<br />
ServerName upload.jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@pubsub.jabberworld.info<br />
DocumentRoot /var/www/pubsub.jabberworld.info/htdocs<br />
ServerName pubsub.jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@conference.jabberworld.info<br />
DocumentRoot /var/www/conference.jabberworld.info/htdocs<br />
ServerName conference.jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@proxy.jabberworld.info<br />
DocumentRoot /var/www/proxy.jabberworld.info/htdocs<br />
ServerName proxy.jabberworld.info<br />
</VirtualHost><br />
</pre><br />
}}<br />
<br />
В каталогах сервера не обязательно должен быть какой-то контент, хотя, например, на основном домене можно разместить какую-то страничку, посвященную jabber-серверу, а на поддомене '''conference''' разместить чат-логи [[Конференции|конференций]]. Субдомен '''upload''' можно приспособить под загружаемые через HTTP Upload файлы, чтобы в дальнейшем их раздавал веб-сервер<ref name="http_upload">В таком случае ему нужно обеспечить доступ к каталогу '''/var/lib/prosody/http_upload/''' - а лучше указать опцию '''http_upload_path''' с путем за пределами домашнего каталога Prosody, плюс обеспечить нужные права веб-серверу, чтобы он мог читать файлы, загруженные через jabber-сервер. Такое решение имеет еще одно преимущество: разнообразные клиенты (не только Jabber) будут гораздо охотнее показывать превью для обычных HTTP/HTTPS-ссылок (т.е., на 80 или 443-м порту), а не тех, где контент отдается на "необычном" порту - вроде 5281 в данном примере.</ref>.<br />
<br />
После всех приготовлений<ref>Более подробно можно почитать тут: [[Свой сервер: подготовка веб-сервера и сертификатов]]</ref> создайте все необходимые сертификаты. Для этого воспользуйтесь следующими командами (выполнять надо от пользователя '''root'''):<br />
<br />
certbot certonly --webroot --webroot-path /var/www/EXAMPLE.COM/htdocs/ -d EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/conference.EXAMPLE.COM/htdocs/ -d conference.EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/upload.EXAMPLE.COM/htdocs/ -d upload.EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/pubsub.EXAMPLE.COM/htdocs/ -d pubsub.EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/proxy.EXAMPLE.COM/htdocs/ -d proxy.EXAMPLE.COM --rsa-key-size 4096<br />
<br />
В параметрах после '''--webroot-path''' указывается каталог веб-сервера для данного домена, а после '''-d''' - сам домен.<br />
<br />
После успешного выполнения команд будет выдана информация о созданном сертификате, в том числе 2 файла - цепочка ключей и приватный ключ - сохраните эти пути для дальнейшего использования, они нам еще пригодятся. Всего получится 10 файлов. certbot обновляет сертификаты автоматически, если срок их истечения составляет менее 30 дней - т.е., обновление происходит раз в 2 месяца.<br />
<br />
Так как Prosody работает от своего пользователя и не имеет доступа к сертификатам, созданным certbot от рута, то надо каким-то образом предоставить доступ ejabberd'у к сертификатам. Самым простым и корректным вариантом на сейчас является выполнение следующей команды от рута<ref>https://prosody.im/doc/letsencrypt</ref>:<br />
<br />
prosodyctl --root cert import /etc/letsencrypt/live<br />
<br />
В дальнейшем эту команду можно использовать после каждого обновления сертификатов - например, указав ее в качестве deploy hook для certbot.<br />
<br />
== Установка и настройка Prosody ==<br />
<br />
Все подготовительные процедуры завершены, теперь можно приступать непосредственно к установке и настройке своего jabber-сервера. Для поддержки звонков потребуется еще STUN/TURN-сервер - в качестве него будем использовать Coturn. В Debian установить Prosody с поддержкой MySQL<ref>На самом деле выбор MySQL обусловлен с одной стороны ее популярностью на веб-хостингах, с другой - возможностью хранить большие объемы данных, которые могут потребоваться, если вы хотите хранить, например, архив сообщений за длительное время. Однако если таких планов нет и это будет сервер для одного или нескольких человек со скромными запросами - то вполне можно обойтись Sqlite.</ref> и Coturn можно командой<br />
<br />
apt-get install prosody coturn lua-dbi-mysql<br />
<br />
'''Примечание''': на момент написания статьи самая последняя версия Prosody - 0.12.4 - доступна в репозитории '''backports'''. Чтобы установить сервер оттуда - добавьте к команде выше ключ '''-t bookworm-backports''' (само-собой, репозиторий должен быть прописан в '''/etc/apt/sources.list''').<br />
<br />
Настройку начнем с Coturn - она очень простая и сводится к включению сервиса в файле '''/etc/default/coturn''' опции '''TURNSERVER_ENABLED=1''', а также приведению конфиг-файла '''/etc/turnserver.conf''' к такому виду:<br />
<br />
{{Hider hiding<br />
|title=/etc/turnserver.conf<br />
|content=<pre><br />
listening-port=3478<br />
tls-listening-port=5349<br />
verbose<br />
use-auth-secret<br />
static-auth-secret=MYSUPERSECRETKEY<br />
userdb=/var/lib/turn/turndb<br />
realm=EXAMPLE.COM<br />
cert=/etc/turncerts/EXAMPLE.COM.fullchain.pem<br />
pkey=/etc/turncerts/EXAMPLE.COM.privkey.pem<br />
syslog<br />
prod<br />
no-multicast-peers<br />
no-cli<br />
no-tlsv1<br />
no-tlsv1_1<br />
no-rfc5780<br />
no-stun-backward-compatibility<br />
response-origin-only-with-rfc5780<br />
</pre><br />
}}<br />
<br />
Фактически, изменения в конфиге сводятся по-большей части к следующему:<br />
<br />
* Указываем прослушиваемые порты - они должны быть такие же, как были указаны в SRV-записях в DNS.<br />
* Включаем '''use-auth-secret''' и указываем придуманный '''ключ-пароль''' - его мы потом укажем в конфиг-файле у Prosody.<br />
* Указываем '''realm''' - домен и сертификат с ключом для него.<br />
<br />
Да, так как Coturn не может напрямую прочитать сертификаты из каталога Let's Encrypt - для правильной работы можно создать отдельный каталог, куда копировать сертификаты с нужными правами. В примере выше это '''/etc/turncerts'''. Команду копирования и изменения прав можно объединить в одном скрипте с командой копирования сертификатов для Prosody и вызывать этот скрипт в качестве deploy hook для Let's Encrypt (или просто по Cron'у, например, раз в неделю).<br />
<br />
Закончив правку конфиг-файла, перезапускаем TURN-сервер:<br />
<br />
systemctl restart coturn.service<br />
<br />
Теперь переходим к настройке Prosody. Как уже говорилось, под него есть множество разнообразных модулей. Для удобства добавления модулей добавьте следующие пакеты:<br />
<br />
apt-get install luarocks liblua5.4-dev lua-luaossl --no-install-recommends<br />
<br />
После чего можно сразу установить полезные модули:<br />
<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_admin_web # Поддержка WEB-интерфейса для управления сервером<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_vcard_muc # Поддержка vCard для конференций<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_muc_moderation # Модерирование конференций и возможность удалять спам<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_cloud_notify # Поддержка PUSH-уведомлений<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_cloud_notify_extensions # Дополнительные модули для PUSH<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_register_web # Поддержка регистрации через веб-страницу<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_mam_adhoc # Возможность управлять настройками MAM-архива из jabber-клиента<br />
<br />
Конфигурационный файл у Prosody состоит из нескольких секций:<br />
* Общие параметры<br />
* Параметры виртуал-хоста<br />
* Параметры сервисов.<br />
<br />
Для удобства то, что относится к виртуал-хосту и его сервисам, вынесено в отдельный файл. Для включения нужного виртуал-хоста поместите симлинк на его конфиг в '''/etc/prosody/conf.d'''.<br />
<br />
{{Hider hiding<br />
|title=/etc/prosody/prosody.cfg.lua<br />
|content=<pre><br />
-- Prosody Example Configuration File<br />
--<br />
-- Information on configuring Prosody can be found on our<br />
-- website at https://prosody.im/doc/configure<br />
--<br />
-- Tip: You can check that the syntax of this file is correct<br />
-- when you have finished by running this command:<br />
-- prosodyctl check config<br />
-- If there are any errors, it will let you know what and where<br />
-- they are, otherwise it will keep quiet.<br />
--<br />
-- The only thing left to do is rename this file to remove the .dist ending, and fill in the<br />
-- blanks. Good luck, and happy Jabbering!<br />
<br />
<br />
---------- Server-wide settings ----------<br />
-- Settings in this section apply to the whole server and are the default settings<br />
-- for any virtual hosts<br />
<br />
-- This is a (by default, empty) list of accounts that are admins<br />
-- for the server. Note that you must create the accounts separately<br />
-- (see https://prosody.im/doc/creating_accounts for info)<br />
-- Example: admins = { "user1@example.com", "user2@example.net" }<br />
admins = {<br />
"admin@EXAMPLE.COM"<br />
}<br />
<br />
-- This option allows you to specify additional locations where Prosody<br />
-- will search first for modules. For additional modules you can install, see<br />
-- the community module repository at https://modules.prosody.im/<br />
-- For a local administrator it's common to place local modifications<br />
-- under /usr/local/ hierarchy:<br />
plugin_paths = {<br />
"/usr/lib/prosody/modules",<br />
"/var/lib/prosody/custom_plugins/"<br />
}<br />
<br />
-- This is the list of modules Prosody will load on startup.<br />
-- Documentation for bundled modules can be found at: https://prosody.im/doc/modules<br />
modules_enabled = {<br />
<br />
-- Generally required<br />
"disco"; -- Service discovery<br />
"roster"; -- Allow users to have a roster. Recommended ;)<br />
"saslauth"; -- Authentication for clients and servers. Recommended if you want to log in.<br />
"tls"; -- Add support for secure TLS on c2s/s2s connections<br />
<br />
-- Not essential, but recommended<br />
"blocklist"; -- Allow users to block communications with other users<br />
"bookmarks"; -- Synchronise the list of open rooms between clients<br />
"carbons"; -- Keep multiple online clients in sync<br />
"dialback"; -- Support for verifying remote servers using DNS<br />
"limits"; -- Enable bandwidth limiting for XMPP connections<br />
"pep"; -- Allow users to store public and private data in their account<br />
"private"; -- Legacy account storage mechanism (XEP-0049)<br />
"smacks"; -- Stream management and resumption (XEP-0198)<br />
"vcard4"; -- User profiles (stored in PEP)<br />
"vcard_legacy"; -- Conversion between legacy vCard and PEP Avatar, vcard<br />
<br />
-- Nice to have<br />
"csi_simple"; -- Simple but effective traffic optimizations for mobile devices<br />
"ping"; -- Replies to XMPP pings with pongs<br />
"register"; -- Allow users to register on this server using a client and change passwords<br />
"time"; -- Let others know the time here on this server<br />
"uptime"; -- Report how long server has been running<br />
"version"; -- Replies to server version requests<br />
"mam"; -- Store recent messages to allow multi-device synchronization<br />
"turn_external"; -- Provide external STUN/TURN service for e.g. audio/video calls<br />
<br />
-- Admin interfaces<br />
"admin_adhoc"; -- Allows administration via an XMPP client that supports ad-hoc commands<br />
"admin_shell"; -- Allow secure administration via 'prosodyctl shell'<br />
<br />
-- HTTP modules<br />
"bosh"; -- Enable BOSH clients, aka "Jabber over HTTP"<br />
--"http_openmetrics"; -- for exposing metrics to stats collectors<br />
"websocket"; -- XMPP over WebSockets<br />
<br />
-- Other specific functionality<br />
"posix"; -- POSIX functionality, sends server to background, enables syslog, etc.<br />
"announce"; -- Send announcement to all online users<br />
--"groups"; -- Shared roster support<br />
--"legacyauth"; -- Legacy authentication. Only used by some old clients and bots.<br />
--"mimicking"; -- Prevent address spoofing<br />
--"motd"; -- Send a message to users when they log in<br />
"s2s_bidi"; -- Bi-directional server-to-server (XEP-0288)<br />
"server_contact_info"; -- Publish contact information for this service<br />
"tombstones"; -- Prevent registration of deleted accounts<br />
"watchregistrations"; -- Alert admins of registrations<br />
"welcome"; -- Welcome users who register accounts<br />
<br />
"cloud_notify"; -- push support<br />
"cloud_notify_extensions"; -- meta-module that simply enables all the modules required to support Siskin or Snikket iOS on a Prosody server<br />
"register_web"; -- registrations via web interface<br />
"mam_adhoc"; -- allowing clients to change archiving preferences<br />
"throttle_presence"; -- automatically cuts down on presence traffic when clients indicate they are inactive<br />
"external_services"; -- calls<br />
"admin_adhoc"; -- ad-hoc administration of server<br />
}<br />
<br />
-- These modules are auto-loaded, but should you want<br />
-- to disable them then uncomment them here:<br />
modules_disabled = {<br />
-- "offline"; -- Store offline messages<br />
-- "c2s"; -- Handle client connections<br />
-- "s2s"; -- Handle server-to-server connections<br />
}<br />
<br />
-- Debian:<br />
-- Please, don't change this option since /run/prosody/<br />
-- is one of the few directories Prosody is allowed to write to<br />
--<br />
pidfile = "/run/prosody/prosody.pid";<br />
<br />
-- Server-to-server authentication<br />
-- Require valid certificates for server-to-server connections?<br />
-- If false, other methods such as dialback (DNS) may be used instead.<br />
<br />
s2s_secure_auth = true<br />
<br />
-- Some servers have invalid or self-signed certificates. You can list<br />
-- remote domains here that will not be required to authenticate using<br />
-- certificates. They will be authenticated using other methods instead,<br />
-- even when s2s_secure_auth is enabled.<br />
<br />
--s2s_insecure_domains = { "insecure.example" }<br />
<br />
-- Even if you disable s2s_secure_auth, you can still require valid<br />
-- certificates for some domains by specifying a list here.<br />
<br />
--s2s_secure_domains = { "jabber.org" }<br />
<br />
<br />
-- Rate limits<br />
-- Enable rate limits for incoming client and server connections. These help<br />
-- protect from excessive resource consumption and denial-of-service attacks.<br />
<br />
limits = {<br />
c2s = {<br />
rate = "3kb/s";<br />
};<br />
s2sin = {<br />
rate = "50kb/s";<br />
};<br />
}<br />
<br />
-- Authentication<br />
-- Select the authentication backend to use. The 'internal' providers<br />
-- use Prosody's configured data storage to store the authentication data.<br />
-- For more information see https://prosody.im/doc/authentication<br />
<br />
authentication = "internal_hashed"<br />
<br />
-- Many authentication providers, including the default one, allow you to<br />
-- create user accounts via Prosody's admin interfaces. For details, see the<br />
-- documentation at https://prosody.im/doc/creating_accounts<br />
<br />
<br />
-- Storage<br />
-- Select the storage backend to use. By default Prosody uses flat files<br />
-- in its configured data directory, but it also supports more backends<br />
-- through modules. An "sql" backend is included by default, but requires<br />
-- additional dependencies. See https://prosody.im/doc/storage for more info.<br />
<br />
storage = "sql" -- Default is "internal" (Debian: "sql" requires one of the<br />
-- lua-dbi-sqlite3, lua-dbi-mysql or lua-dbi-postgresql packages to work)<br />
<br />
-- For the "sql" backend, you can uncomment *one* of the below to configure:<br />
--sql = { driver = "SQLite3", database = "prosody.sqlite" } -- Default. 'database' is the filename.<br />
sql = { driver = "MySQL", database = "jabber_example_com", username = "jabberuser", password = "MYSECRETPASSWORD", host = "localhost" }<br />
--sql = { driver = "PostgreSQL", database = "prosody", username = "prosody", password = "secret", host = "localhost" }<br />
<br />
<br />
-- Archiving configuration<br />
-- If mod_mam is enabled, Prosody will store a copy of every message. This<br />
-- is used to synchronize conversations between multiple clients, even if<br />
-- they are offline. This setting controls how long Prosody will keep<br />
-- messages in the archive before removing them.<br />
<br />
archive_expires_after = "1w" -- Remove archived messages after 1 week<br />
max_archive_query_results = 20;<br />
<br />
-- You can also configure messages to be stored in-memory only. For more<br />
-- archiving options, see https://prosody.im/doc/modules/mod_mam<br />
<br />
<br />
-- Audio/video call relay (STUN/TURN)<br />
-- To ensure clients connected to the server can establish connections for<br />
-- low-latency media streaming (such as audio and video calls), it is<br />
-- recommended to run a STUN/TURN server for clients to use. If you do this,<br />
-- specify the details here so clients can discover it.<br />
-- Find more information at https://prosody.im/doc/turn<br />
<br />
-- Specify the address of the TURN service (you may use the same domain as XMPP)<br />
turn_external_host = "xmpp.EXAMPLE.COM"<br />
<br />
-- This secret must be set to the same value in both Prosody and the TURN server<br />
turn_external_secret = "MYSUPERSECRETKEY"<br />
<br />
<br />
-- Logging configuration<br />
-- For advanced logging see https://prosody.im/doc/logging<br />
--<br />
-- Debian:<br />
-- Logs info and higher to /var/log<br />
-- Logs errors to syslog also<br />
log = {<br />
-- Log files (change 'info' to 'debug' for debug logs):<br />
info = "/var/log/prosody/prosody.log";<br />
error = "/var/log/prosody/prosody.err";<br />
-- Syslog:<br />
{ levels = { "error" }; to = "syslog"; };<br />
}<br />
<br />
<br />
-- Uncomment to enable statistics<br />
-- For more info see https://prosody.im/doc/statistics<br />
statistics = "internal"<br />
<br />
<br />
-- Certificates<br />
-- Every virtual host and component needs a certificate so that clients and<br />
-- servers can securely verify its identity. Prosody will automatically load<br />
-- certificates/keys from the directory specified here.<br />
-- For more information, including how to use 'prosodyctl' to auto-import certificates<br />
-- (from e.g. Let's Encrypt) see https://prosody.im/doc/certificates<br />
<br />
-- Location of directory to find certificates in (relative to main config file):<br />
certificates = "certs"<br />
<br />
c2s_direct_tls_ports = { 5223 }<br />
s2s_direct_tls_ports = { 5270 }<br />
c2s_require_encryption = true<br />
s2s_require_encryption = true<br />
tls_profile = "intermediate" -- "modern" if you don't need TLS 1.2<br />
<br />
contact_info = {<br />
abuse = { "xmpp:admin@EXAMPLE.COM" };<br />
admin = { "xmpp:admin@EXAMPLE.COM" };<br />
feedback = { "xmpp:admin@EXAMPLE.COM" };<br />
support = { "https://EXAMPLE.COM", "xmpp:admin@EXAMPLE.COM" };<br />
}<br />
<br />
external_services = {<br />
{<br />
type = "stun",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "stun",<br />
transport = "udp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "turn",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "turn",<br />
transport = "udp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "stuns",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 5349<br />
}, {<br />
type = "turns",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 5349<br />
}<br />
}<br />
<br />
consider_websocket_secure = true<br />
consider_bosh_secure = true<br />
<br />
----------- Virtual hosts -----------<br />
-- You need to add a VirtualHost entry for each domain you wish Prosody to serve.<br />
-- Settings under each VirtualHost entry apply *only* to that host.<br />
-- It's customary to maintain VirtualHost entries in separate config files<br />
-- under /etc/prosody/conf.d/ directory. Examples of such config files can<br />
-- be found in /etc/prosody/conf.avail/ directory.<br />
<br />
------ Additional config files ------<br />
-- For organizational purposes you may prefer to add VirtualHost and<br />
-- Component definitions in their own config files. This line includes<br />
-- all config files in /etc/prosody/conf.d/<br />
<br />
-- VirtualHost "localhost"<br />
-- Prosody requires at least one enabled VirtualHost to function. You can<br />
-- safely remove or disable 'localhost' once you have added another.<br />
<br />
<br />
--VirtualHost "example.com"<br />
<br />
------ Components ------<br />
-- You can specify components to add hosts that provide special services,<br />
-- like multi-user conferences, and transports.<br />
-- For more information on components, see https://prosody.im/doc/components<br />
<br />
---Set up a MUC (multi-user chat) room server on conference.example.com:<br />
--Component "conference.example.com" "muc"<br />
--- Store MUC messages in an archive and allow users to access it<br />
--modules_enabled = { "muc_mam" }<br />
<br />
---Set up a file sharing component<br />
--Component "share.example.com" "http_file_share"<br />
<br />
---Set up an external component (default component port is 5347)<br />
--<br />
-- External components allow adding various services, such as gateways/<br />
-- bridges to non-XMPP networks and services. For more info<br />
-- see: https://prosody.im/doc/components#adding_an_external_component<br />
--<br />
--Component "gateway.example.com"<br />
-- component_secret = "password"<br />
<br />
Include "conf.d/*.cfg.lua"<br />
<br />
---------- End of the Prosody Configuration file ----------<br />
-- You usually **DO NOT** want to add settings here at the end, as they would<br />
-- only apply to the last defined VirtualHost or Component.<br />
--<br />
-- Settings for the global section should go higher up, before the first<br />
-- VirtualHost or Component line, while settings intended for specific hosts<br />
-- should go under the corresponding VirtualHost or Component line.<br />
--<br />
-- For more information see https://prosody.im/doc/configure<br />
<br />
</pre><br />
}}<br />
<br />
{{Hider hiding<br />
|title=Виртуал хост /etc/prosody/conf.avail/EXAMPLE.COM.cfg.lua<br />
|content=<pre><br />
-- Section for example.com<br />
<br />
VirtualHost "EXAMPLE.COM"<br />
enabled = true<br />
<br />
-- Assign this host a certificate for TLS, otherwise it would use the one<br />
-- set in the global section (if any).<br />
-- Note that old-style SSL on port 5223 only supports one certificate, and will always<br />
-- use the global one.<br />
ssl = {<br />
key = "/etc/prosody/certs/EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
<br />
modules_enabled = {<br />
"admin_web"<br />
--"invites"; -- Create and manage invites<br />
--"invites_adhoc"; -- Allow admins/users to create invitations via their client<br />
--"invites_register"; -- Allows invited users to create accounts<br />
}<br />
allow_registration = false -- Allow users to register new accounts via in-band<br />
<br />
------ Components ------<br />
-- You can specify components to add hosts that provide special services,<br />
-- like multi-user conferences, and transports.<br />
-- For more information on components, see http://prosody.im/doc/components<br />
<br />
<br />
-- Set up a SOCKS5 bytestream proxy for server-proxied file transfers:<br />
Component "proxy.EXAMPLE.COM" "proxy65"<br />
ssl = {<br />
key = "/etc/prosody/certs/proxy.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/proxy.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
-- proxy65_address = "proxy.EXAMPLE.COM"<br />
proxy65_acl = { "EXAMPLE.COM" }<br />
<br />
-- Set up a MUC (multi-user chat) room server on conference.example.com:<br />
Component "conference.EXAMPLE.COM" "muc"<br />
modules_enabled = {<br />
"muc_mam",<br />
"vcard_muc",<br />
"muc_moderation"<br />
}<br />
ssl = {<br />
key = "/etc/prosody/certs/conference.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/conference.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
muc_log_by_default = true<br />
muc_log_presences = false<br />
log_all_rooms = false<br />
muc_log_expires_after = "1w"<br />
muc_log_cleanup_interval = 4 * 60 * 60<br />
restrict_room_creation = "local"<br />
<br />
Component "upload.EXAMPLE.COM" "http_file_share"<br />
ssl = {<br />
key = "/etc/prosody/certs/upload.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/upload.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
<br />
http_file_share_size_limit = 100*1024*1024 -- 100 MB per file<br />
http_file_share_expires_after = 7*86400 -- file expiration - 1 week<br />
http_file_share_global_quota = 1024*1024*1024*10 -- 10 GiB total<br />
<br />
Component "pubsub.EXAMPLE.COM" "pubsub"<br />
ssl = {<br />
key = "/etc/prosody/certs/pubsub.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/pubsub.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
</pre><br />
}}<br />
<br />
Файл конфигурации Prosody очень хорошо комментирован, поэтому рассмотрим ключевые моменты, а также опции, добавленные для дополнительно установленных модулей.<br />
<br />
* Первым в конфиг-файле идет [[Jabber ID]] будущего администратора - ему будут доступны команды управления сервером, а также будут присылаться различные уведомления.<br />
* В '''plugin_paths''' добавляется путь к каталогу с устанавливаемыми плагинами.<br />
* Далее идет обширный список модулей. Рассмотрим некоторые:<br />
** '''turn_external''' позволит нам подключить настроенный ранее Coturn к Prosody для работы звонков.<br />
** '''cloud_notify''' включит поддержку PUSH-уведомлений.<br />
** '''register_web''' включает регистрацию через веб-страницу. Она доступна по адресу https://EXAMPLE.COM:5281/register_web. Штатно тут включена простенькая CAPTCHA, но можно использовать reCaptcha, для этого дополнительно необходимо будет указать ключи для этого сервиса.<br />
** '''admin_adhoc''' позволит выполнять ряд команд на сервере с JID'а администратора из тех клиентов, которые умеют [[Ad-Hoc]].<br />
* Далее следуют настройки, в которых можно усилить или ослабить проверки сертификатов для других серверов.<br />
* Следующей ключевой настройкой будет указание сервера баз данных. Как мы уже условились выше, для хранения данных сервера [[Свой сервер: подготовка базы данных|будем использовать MySQL или MariaDB]]. Prosody имеет весьма простую структуру базы и встроенную схему, поэтому дополнительных действий не требуется.<br />
* В '''archive_expires_after''' можем указать, как скоро нужно чистить архив сообщений для MAM. Для конференций есть отдельная настройка, она будет описана ниже.<br />
* В '''turn_external_host''' и '''turn_external_secret''' указывается адрес Coturn и тот самый ключ, который прописывали в '''/etc/turnserver.conf'''.<br />
* Далее - несколько опций касательно безопасности:<br />
** '''c2s_direct_tls_ports''' и '''s2s_direct_tls_ports''' включает работу с TLS-портами - они должны быть те же, что указывались в SRV-записях в DNS.<br />
** '''c2s_require_encryption''' и '''s2s_require_encryption''' означает использование исключительно шифрованных соединений между серверами, а также между сервером и клиентом.<br />
** '''tls_profile''' настраивает перечень шифров и протоколов, которые может использовать Prosody.<br />
* В '''contact_info''' можно перечислить контакты администратора и, например, адрес конференции поддержки сервера.<br />
* '''external_services''' описывает сервисы, которые предоставляет Coturn.<br />
<br />
На этом настройка основной части завершена и далее идет настройка виртуальных хостов и их сервисов:<br />
<br />
* В секции VirtualHost идет указание SSL-сертификатов для домена, а также разрешение регистрации через jabber-клиент и включение веб-интерфейса для управления сервером, который доступен по адресу https://example.com:5281/admin.<br />
* '''invites''' и сопутствующие ему модули позволяют сделать регистрацию по приглашениям. Однако есть одно но (на сейчас): это отключит обычную регистрацию. Поэтому какой вариант оставить - решайте сами.<br />
<br />
Далее перечисляется несколько компонентов - сервисов для данного сервера. В показанном примере это [[конференции]], [[Передача файлов|proxy]], [[Передача файлов|HTTP Upload]] и [[PEP|pubsub]]. Для каждого из них указывается своя пара сертификатов и ключей.<br />
<br />
* Для '''proxy''' можно указать субдомен, на котором он будет доступен, а опция '''proxy65_acl''' перечисляет домены, которые смогут передавать файлы через этот прокси.<br />
* Для конференций включается поддержка MAM и модерирования. В опциях задается включение MAM по-умолчанию, время устаревания MAM-архива, а также правила доступа на создание новых конференций.<br />
* Для модуля '''http_file_share''' перечисляются лимиты на размеры одиночных файлов, а также общий размер хранилища и время устаревания загруженных файлов. Для Prosody сделано несколько реализаций HTTP Upload - например, можно переключиться на '''mod_http_upload''', если mod_http_file_share чем-то не устроит или вообще использовать [https://github.com/horazont/xmpp-http-upload внешний сервис] через '''http_upload_external'''.<br />
<br />
Закончив правку файлов конфигурации - перезапустите Prosody:<br />
<br />
systemctl restart prosody<br />
<br />
Теперь можете создать пользователя-администратора:<br />
<br />
prosodyctl adduser admin@EXAMPLE.COM<br />
<br />
А также проверить корректность конфигурации следующими командами:<br />
<br />
prosodyctl check config<br />
prosodyctl check certs<br />
prosodyctl check turn<br />
<br />
Во всех случаях в конце команда должна возвращать "'''All checks passed, congratulations!'''". Сервер готов к использованию!<br />
<br />
==Сноски==<br />
<br />
<references/><br />
<br />
==Ссылки==<br />
<br />
* https://prosody.im - домашняя страница Prosody и [https://prosody.im/doc ссылка на документацию]<br />
* [https://open-networks.ru/d/67-prosody-im-v012x-ustanovka-i-nastroyka-xmpp-servera-coturn-fail2ban Очень подробное пользовательское руководство по настройке Prosody]<br />
* [https://www.8host.com/blog/ustanovka-prosody-v-ubuntu-18-04/ Еще одно руководство по установке и настройке]<br />
<br />
[[Category:Свой сервер]]</div>Rainhttps://jabberworld.info/index.php?title=%D0%A1%D0%B2%D0%BE%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80:_%D0%BF%D0%BE%D0%B4%D1%80%D0%BE%D0%B1%D0%BD%D0%BE%D0%B5_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B5_Prosody&diff=10221Свой сервер: подробное руководство по установке Prosody2023-11-02T19:18:15Z<p>Rain: /* Установка и настройка Prosody */</p>
<hr />
<div>В этой статье приводится пример настройки [[Prosody]] - одного из самых популярных и легковесных jabber-серверов. Для сервера написано просто-таки [https://modules.prosody.im/all.html огромное число модулей] на все случаи жизни, поэтому в руководстве, основанном на версии 0.12.4, будет показано подключение актуальных и популярных функций. В качестве сертификатов будем использовать Let's Encrypt - и все это на Debian GNU/Linux.<br />
<br />
Рассмотрим особенности данной конфигурации.<br />
<br />
__TOC__<br />
<br />
== [[ru_wikipedia:DNS|DNS-записи]] ==<br />
<br />
Хотя для базового варианта своего jabber-сервера вполне достаточно [[Регистрация доменного имени|бесплатного DynDNS-домена]], для полноценной конфигурации все же нужно обзавестись собственным доменом, где можно будет добавить все необходимые DNS-записи и сделать субдомены для сервисов. Выбор регистратора и покупка домена остается за рамками данной статьи, тут только приводятся шаги, которые надо сделать после покупки домена в его админке.<br />
<br />
Всего понадобится около 15 записей в DNS:<br />
<br />
# Для удобства, чтобы в случае миграции сервера с одного IP на другой не приходилось переписывать все записи, стоит завести для него субдомен, который будет ссылаться на нужный IP с помощью А-записи (или 2 таких субдомена в случае использования IPv4+IPv6 - один с A-записью, а второй с AAAA), а все остальные записи сделать CNAME-алиасами для него. Например, для данного сервера ('''jabberworld.info''') сделаны 2 субдомена '''xmpp.jabberworld.info''', ссылающиеся на IPv4 и IPv6-адреса.<br />
# Создаем субдомены для необходимых сервисов сервера<ref>Да, если планируется использовать, например, конференции исключительно локально, то можно обойтись и без DNS-записей - сервер и так знает, куда ему подключаться, так как он этот сервис и предоставляет. Но если хочется полноценный сервис, с которым смогут взаимодействовать и другие сервера - то все же потребуются указанные записи в DNS.</ref> - '''conference''' (для [[Конференции|конференций]]), '''proxy''' (прокси для прямой [[Передача файлов|передачи файлов]]), '''pubsub''' (сервисы типа "Публикация/подписка", где может сохраняться самая разная информация) и '''upload''' (сервис для [[Передача файлов|передачи файлов]] через HTTP Upload). Все эти записи создаем как CNAME на наш субдомен из 1-го пункта.<br />
# Создаем ряд SRV-записей для нашего основного домена - они показывают, где именно какой сервис находится. Конечно, если у вас все на одном адресе, то будет работать и так, но мы ведь решили все делать правильно, верно? Итак, нужны такие SRV-записи:<br />
<br />
:: '''_xmpp-client._tcp.EXAMPLE.COM''' (порт '''5222''') - чтобы указать, куда подключаться [[Клиенты Jabber|jabber-клиенту]]<br />
:: '''_xmpps-client._tcp.EXAMPLE.COM''' (порт '''5223''') - аналогичная запись для [https://xmpp.org/extensions/xep-0368.html TLS-подключений клиентов]<br />
:: '''_xmpp-server._tcp.EXAMPLE.COM''' (порт '''5269''') - чтобы указать, куда подключаться [[Публичные серверы Jabber|jabber-серверу]]<br />
:: '''_xmpps-server._tcp.EXAMPLE.COM''' (порт '''5270''') - аналогичная запись для [https://xmpp.org/extensions/xep-0368.html TLS-подключений серверов].<br />
<br />
:: Записи ниже служат для работы сервиса аудио/видеозвонков через jabber<ref name="avcalls">https://prosody.im/doc/turn</ref>. Для максимальной совместимости будем использовать как [[ru_wikipedia:STUN|STUN]], так и [[ru_wikipedia:Traversal Using Relay NAT|TURN]] - все возможные варианты:<br />
<br />
:: '''_stun._tcp.EXAMPLE.COM''' (порт '''3478''') - [[ru_wikipedia:STUN|STUN]] через [[ru_wikipedia:TCP|TCP]]<br />
:: '''_stun._udp.EXAMPLE.COM''' (порт '''3478''') - STUN через UDP<br />
:: '''_stuns._tcp.EXAMPLE.COM''' (порт '''5349''') - шифрованный STUN через TCP<br />
:: '''_turn._tcp.EXAMPLE.COM''' (порт '''3478''') - [[ru_wikipedia:Traversal Using Relay NAT|TURN]] через [[ru_wikipedia:TCP|TCP]]<br />
:: '''_turn._udp.EXAMPLE.COM''' (порт '''3478''') - TURN через UDP<br />
:: '''_turns._tcp.EXAMPLE.COM''' (порт '''5349''') - шифрованный TURN через TCP<br />
<br />
:: Во всех случаях target'ом для записей служит наш алиас из первого пункта.<br />
{{Hider hiding|<br />
|title=Для продвинутых<br />
|content=<br />
:: Самый полный вариант подразумевает в том числе создание SRV-записей для каждого из сервисов-субдоменов - тех, к которым будут подключаться сторонние серверы. Например, для конференций это может выглядеть так:<br />
<br />
:: '''_xmpp-server._tcp.conference.EXAMPLE.COM''' (порт '''5269''')<br />
:: '''_xmpps-server._tcp.conference.EXAMPLE.COM''' (порт '''5270''' для TLS)<br />
<br />
:: Но, как уже говорилось выше, это для совсем уж необычных конфигураций - когда сам домен указывает на один адрес (например, там может работать веб-сервер, предоставляющий чат-логи на сайте https://conference.example.com), а сам jabber-сервер при этом находится совершенно на другом.<br />
}}<br />
Вот как выглядят записи для данного сервера в админке бесплатного DNS-провайдера [https://dns.he.net Hurricane Electric]:<br />
<br />
<center>[[Файл:Jabber srv.png]]</center><br />
<br />
== Сертификаты ==<br />
<br />
<br />
В современном мире стандартной практикой является шифрование соединений, а для этого, в свою очередь, требуются [[ru_wikipedia:Цифровой сертификат|сертификаты]] от доверенных центров сертификации. Можно, конечно, использовать самоподписанный сертификат, но, во-первых, не все серверы будут их принимать - а значит, к ним не получится подключиться и общаться с их пользователями, а во-вторых, в подключающихся клиентах будут появляться сообщения о недоверенном сертификате, что тоже будет доставлять определенные неудобства. Поэтому стоит воспользоваться услугами одного из популярных бесплатных центров сертификации - [https://letsencrypt.org Let's Encrypt].<br />
<br />
Для работы с сертификатами от Let's Encrypt в Debian есть специальный пакет - '''certbot''', поэтому установите его следующей командой:<br />
<br />
sudo apt-get install certbot<br />
<br />
Сертификаты от Let's Encrypt выдаются сроком на 3 месяца, поэтому в конце этого срока их нужно обновлять. Для подтверждения владения доменом, а также для автоматизации обновления сертификатов в дальнейшем со стороны Let's Encrypt делается запрос на веб-сервер для указанного домена, поэтому для полноценной работы стоит установить какой-нибудь популярный вариант и прописать там виртуальные хосты для нашего jabber-сервера, а также сервисов на нем (сертификаты будут делаться в том числе для сервисов). Пример конфигурации веб-сервера Apache для данного сервера:<br />
<br />
{{Hider hiding<br />
|title=apache_to_jabber_service_domains.conf<br />
|content=<pre><br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@jabberworld.info<br />
DocumentRoot /var/www/jabberworld.info/htdocs<br />
ServerName jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@upload.jabberworld.info<br />
DocumentRoot /var/www/upload.jabberworld.info/htdocs<br />
ServerName upload.jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@pubsub.jabberworld.info<br />
DocumentRoot /var/www/pubsub.jabberworld.info/htdocs<br />
ServerName pubsub.jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@conference.jabberworld.info<br />
DocumentRoot /var/www/conference.jabberworld.info/htdocs<br />
ServerName conference.jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@proxy.jabberworld.info<br />
DocumentRoot /var/www/proxy.jabberworld.info/htdocs<br />
ServerName proxy.jabberworld.info<br />
</VirtualHost><br />
</pre><br />
}}<br />
<br />
В каталогах сервера не обязательно должен быть какой-то контент, хотя, например, на основном домене можно разместить какую-то страничку, посвященную jabber-серверу, а на поддомене '''conference''' разместить чат-логи [[Конференции|конференций]]. Субдомен '''upload''' можно приспособить под загружаемые через HTTP Upload файлы, чтобы в дальнейшем их раздавал веб-сервер<ref name="http_upload">В таком случае ему нужно обеспечить доступ к каталогу '''/var/lib/prosody/http_upload/''' - а лучше указать опцию '''http_upload_path''' с путем за пределами домашнего каталога Prosody, плюс обеспечить нужные права веб-серверу, чтобы он мог читать файлы, загруженные через jabber-сервер. Такое решение имеет еще одно преимущество: разнообразные клиенты (не только Jabber) будут гораздо охотнее показывать превью для обычных HTTP/HTTPS-ссылок (т.е., на 80 или 443-м порту), а не тех, где контент отдается на "необычном" порту - вроде 5281 в данном примере.</ref>.<br />
<br />
После всех приготовлений<ref>Более подробно можно почитать тут: [[Свой сервер: подготовка веб-сервера и сертификатов]]</ref> создайте все необходимые сертификаты. Для этого воспользуйтесь следующими командами (выполнять надо от пользователя '''root'''):<br />
<br />
certbot certonly --webroot --webroot-path /var/www/EXAMPLE.COM/htdocs/ -d EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/conference.EXAMPLE.COM/htdocs/ -d conference.EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/upload.EXAMPLE.COM/htdocs/ -d upload.EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/pubsub.EXAMPLE.COM/htdocs/ -d pubsub.EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/proxy.EXAMPLE.COM/htdocs/ -d proxy.EXAMPLE.COM --rsa-key-size 4096<br />
<br />
В параметрах после '''--webroot-path''' указывается каталог веб-сервера для данного домена, а после '''-d''' - сам домен.<br />
<br />
После успешного выполнения команд будет выдана информация о созданном сертификате, в том числе 2 файла - цепочка ключей и приватный ключ - сохраните эти пути для дальнейшего использования, они нам еще пригодятся. Всего получится 10 файлов. certbot обновляет сертификаты автоматически, если срок их истечения составляет менее 30 дней - т.е., обновление происходит раз в 2 месяца.<br />
<br />
Так как Prosody работает от своего пользователя и не имеет доступа к сертификатам, созданным certbot от рута, то надо каким-то образом предоставить доступ ejabberd'у к сертификатам. Самым простым и корректным вариантом на сейчас является выполнение следующей команды от рута<ref>https://prosody.im/doc/letsencrypt</ref>:<br />
<br />
prosodyctl --root cert import /etc/letsencrypt/live<br />
<br />
В дальнейшем эту команду можно использовать после каждого обновления сертификатов - например, указав ее в качестве deploy hook для certbot.<br />
<br />
== Установка и настройка Prosody ==<br />
<br />
Все подготовительные процедуры завершены, теперь можно приступать непосредственно к установке и настройке своего jabber-сервера. Для поддержки звонков потребуется еще STUN/TURN-сервер - в качестве него будем использовать Coturn. В Debian установить Prosody с поддержкой MySQL<ref>На самом деле выбор MySQL обусловлен с одной стороны ее популярностью на веб-хостингах, с другой - возможностью хранить большие объемы данных, которые могут потребоваться, если вы хотите хранить, например, архив сообщений за длительное время. Однако если таких планов нет и это будет сервер для одного или нескольких человек со скромными запросами - то вполне можно обойтись Sqlite.</ref> и Coturn можно командой<br />
<br />
apt-get install prosody coturn lua-dbi-mysql<br />
<br />
'''Примечание''': на момент написания статьи самая последняя версия Prosody - 0.12.4 - доступна в репозитории '''backports'''. Чтобы установить сервер оттуда - добавьте к команде выше ключ '''-t bookworm-backports''' (само-собой, репозиторий должен быть прописан в '''/etc/apt/sources.list''').<br />
<br />
Настройку начнем с Coturn - она очень простая и сводится к включению сервиса в файле '''/etc/default/coturn''' опции '''TURNSERVER_ENABLED=1''', а также приведению конфиг-файла '''/etc/turnserver.conf''' к такому виду:<br />
<br />
{{Hider hiding<br />
|title=/etc/turnserver.conf<br />
|content=<pre><br />
listening-port=3478<br />
tls-listening-port=5349<br />
verbose<br />
use-auth-secret<br />
static-auth-secret=MYSUPERSECRETKEY<br />
userdb=/var/lib/turn/turndb<br />
realm=EXAMPLE.COM<br />
cert=/etc/turncerts/EXAMPLE.COM.fullchain.pem<br />
pkey=/etc/turncerts/EXAMPLE.COM.privkey.pem<br />
syslog<br />
prod<br />
no-multicast-peers<br />
no-cli<br />
no-tlsv1<br />
no-tlsv1_1<br />
no-rfc5780<br />
no-stun-backward-compatibility<br />
response-origin-only-with-rfc5780<br />
</pre><br />
}}<br />
<br />
Фактически, изменения в конфиге сводятся по-большей части к следующему:<br />
<br />
* Указываем прослушиваемые порты - они должны быть такие же, как были указаны в SRV-записях в DNS.<br />
* Включаем '''use-auth-secret''' и указываем придуманный '''ключ-пароль''' - его мы потом укажем в конфиг-файле у Prosody.<br />
* Указываем '''realm''' - домен и сертификат с ключом для него.<br />
<br />
Да, так как Coturn не может напрямую прочитать сертификаты из каталога Let's Encrypt - для правильной работы можно создать отдельный каталог, куда копировать сертификаты с нужными правами. В примере выше это '''/etc/turncerts'''. Команду копирования и изменения прав можно объединить в одном скрипте с командой копирования сертификатов для Prosody и вызывать этот скрипт в качестве deploy hook для Let's Encrypt (или просто по Cron'у, например, раз в неделю).<br />
<br />
Закончив правку конфиг-файла, перезапускаем TURN-сервер:<br />
<br />
systemctl restart coturn.service<br />
<br />
Теперь переходим к настройке Prosody. Как уже говорилось, под него есть множество разнообразных модулей. Для удобства добавления модулей добавьте следующие пакеты:<br />
<br />
apt-get install luarocks liblua5.4-dev lua-luaossl --no-install-recommends<br />
<br />
После чего можно сразу установить полезные модули:<br />
<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_admin_web # Поддержка WEB-интерфейса для управления сервером<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_vcard_muc # Поддержка vCard для конференций<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_muc_moderation # Модерирование конференций и возможность удалять спам<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_cloud_notify # Поддержка PUSH-уведомлений<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_cloud_notify_extensions # Дополнительные модули для PUSH<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_http_upload # Поддержка файлообмена через HTTP Upload<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_register_web # Поддержка регистрации через веб-страницу<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_muc_hats_adhoc # Указание дополнительных ролей в конференциях<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_muc_hats_api # См. выше<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_mam_adhoc # Возможность управлять настройками MAM-архива из jabber-клиента<br />
<br />
Конфигурационный файл у Prosody состоит из нескольких секций:<br />
* Общие параметры<br />
* Параметры виртуал-хоста<br />
* Параметры сервисов.<br />
<br />
Для удобства то, что относится к виртуал-хосту и его сервисам, вынесено в отдельный файл. Для включения нужного виртуал-хоста поместите симлинк на его конфиг в '''/etc/prosody/conf.d'''.<br />
<br />
{{Hider hiding<br />
|title=/etc/prosody/prosody.cfg.lua<br />
|content=<pre><br />
-- Prosody Example Configuration File<br />
--<br />
-- Information on configuring Prosody can be found on our<br />
-- website at https://prosody.im/doc/configure<br />
--<br />
-- Tip: You can check that the syntax of this file is correct<br />
-- when you have finished by running this command:<br />
-- prosodyctl check config<br />
-- If there are any errors, it will let you know what and where<br />
-- they are, otherwise it will keep quiet.<br />
--<br />
-- The only thing left to do is rename this file to remove the .dist ending, and fill in the<br />
-- blanks. Good luck, and happy Jabbering!<br />
<br />
<br />
---------- Server-wide settings ----------<br />
-- Settings in this section apply to the whole server and are the default settings<br />
-- for any virtual hosts<br />
<br />
-- This is a (by default, empty) list of accounts that are admins<br />
-- for the server. Note that you must create the accounts separately<br />
-- (see https://prosody.im/doc/creating_accounts for info)<br />
-- Example: admins = { "user1@example.com", "user2@example.net" }<br />
admins = {<br />
"admin@EXAMPLE.COM"<br />
}<br />
<br />
-- This option allows you to specify additional locations where Prosody<br />
-- will search first for modules. For additional modules you can install, see<br />
-- the community module repository at https://modules.prosody.im/<br />
-- For a local administrator it's common to place local modifications<br />
-- under /usr/local/ hierarchy:<br />
plugin_paths = {<br />
"/usr/lib/prosody/modules",<br />
"/var/lib/prosody/custom_plugins/"<br />
}<br />
<br />
-- This is the list of modules Prosody will load on startup.<br />
-- Documentation for bundled modules can be found at: https://prosody.im/doc/modules<br />
modules_enabled = {<br />
<br />
-- Generally required<br />
"disco"; -- Service discovery<br />
"roster"; -- Allow users to have a roster. Recommended ;)<br />
"saslauth"; -- Authentication for clients and servers. Recommended if you want to log in.<br />
"tls"; -- Add support for secure TLS on c2s/s2s connections<br />
<br />
-- Not essential, but recommended<br />
"blocklist"; -- Allow users to block communications with other users<br />
"bookmarks"; -- Synchronise the list of open rooms between clients<br />
"carbons"; -- Keep multiple online clients in sync<br />
"dialback"; -- Support for verifying remote servers using DNS<br />
"limits"; -- Enable bandwidth limiting for XMPP connections<br />
"pep"; -- Allow users to store public and private data in their account<br />
"private"; -- Legacy account storage mechanism (XEP-0049)<br />
"smacks"; -- Stream management and resumption (XEP-0198)<br />
"vcard4"; -- User profiles (stored in PEP)<br />
"vcard_legacy"; -- Conversion between legacy vCard and PEP Avatar, vcard<br />
<br />
-- Nice to have<br />
"csi_simple"; -- Simple but effective traffic optimizations for mobile devices<br />
"ping"; -- Replies to XMPP pings with pongs<br />
"register"; -- Allow users to register on this server using a client and change passwords<br />
"time"; -- Let others know the time here on this server<br />
"uptime"; -- Report how long server has been running<br />
"version"; -- Replies to server version requests<br />
"mam"; -- Store recent messages to allow multi-device synchronization<br />
"turn_external"; -- Provide external STUN/TURN service for e.g. audio/video calls<br />
<br />
-- Admin interfaces<br />
"admin_adhoc"; -- Allows administration via an XMPP client that supports ad-hoc commands<br />
"admin_shell"; -- Allow secure administration via 'prosodyctl shell'<br />
<br />
-- HTTP modules<br />
"bosh"; -- Enable BOSH clients, aka "Jabber over HTTP"<br />
--"http_openmetrics"; -- for exposing metrics to stats collectors<br />
"websocket"; -- XMPP over WebSockets<br />
<br />
-- Other specific functionality<br />
"posix"; -- POSIX functionality, sends server to background, enables syslog, etc.<br />
"announce"; -- Send announcement to all online users<br />
--"groups"; -- Shared roster support<br />
--"legacyauth"; -- Legacy authentication. Only used by some old clients and bots.<br />
--"mimicking"; -- Prevent address spoofing<br />
--"motd"; -- Send a message to users when they log in<br />
"s2s_bidi"; -- Bi-directional server-to-server (XEP-0288)<br />
"server_contact_info"; -- Publish contact information for this service<br />
"tombstones"; -- Prevent registration of deleted accounts<br />
"watchregistrations"; -- Alert admins of registrations<br />
"welcome"; -- Welcome users who register accounts<br />
<br />
"cloud_notify"; -- push support<br />
"cloud_notify_extensions"; -- meta-module that simply enables all the modules required to support Siskin or Snikket iOS on a Prosody server<br />
"register_web"; -- registrations via web interface<br />
"mam_adhoc"; -- allowing clients to change archiving preferences<br />
"throttle_presence"; -- automatically cuts down on presence traffic when clients indicate they are inactive<br />
"external_services"; -- calls<br />
"admin_adhoc"; -- ad-hoc administration of server<br />
}<br />
<br />
-- These modules are auto-loaded, but should you want<br />
-- to disable them then uncomment them here:<br />
modules_disabled = {<br />
-- "offline"; -- Store offline messages<br />
-- "c2s"; -- Handle client connections<br />
-- "s2s"; -- Handle server-to-server connections<br />
}<br />
<br />
-- Debian:<br />
-- Please, don't change this option since /run/prosody/<br />
-- is one of the few directories Prosody is allowed to write to<br />
--<br />
pidfile = "/run/prosody/prosody.pid";<br />
<br />
-- Server-to-server authentication<br />
-- Require valid certificates for server-to-server connections?<br />
-- If false, other methods such as dialback (DNS) may be used instead.<br />
<br />
s2s_secure_auth = true<br />
<br />
-- Some servers have invalid or self-signed certificates. You can list<br />
-- remote domains here that will not be required to authenticate using<br />
-- certificates. They will be authenticated using other methods instead,<br />
-- even when s2s_secure_auth is enabled.<br />
<br />
--s2s_insecure_domains = { "insecure.example" }<br />
<br />
-- Even if you disable s2s_secure_auth, you can still require valid<br />
-- certificates for some domains by specifying a list here.<br />
<br />
--s2s_secure_domains = { "jabber.org" }<br />
<br />
<br />
-- Rate limits<br />
-- Enable rate limits for incoming client and server connections. These help<br />
-- protect from excessive resource consumption and denial-of-service attacks.<br />
<br />
limits = {<br />
c2s = {<br />
rate = "3kb/s";<br />
};<br />
s2sin = {<br />
rate = "50kb/s";<br />
};<br />
}<br />
<br />
-- Authentication<br />
-- Select the authentication backend to use. The 'internal' providers<br />
-- use Prosody's configured data storage to store the authentication data.<br />
-- For more information see https://prosody.im/doc/authentication<br />
<br />
authentication = "internal_hashed"<br />
<br />
-- Many authentication providers, including the default one, allow you to<br />
-- create user accounts via Prosody's admin interfaces. For details, see the<br />
-- documentation at https://prosody.im/doc/creating_accounts<br />
<br />
<br />
-- Storage<br />
-- Select the storage backend to use. By default Prosody uses flat files<br />
-- in its configured data directory, but it also supports more backends<br />
-- through modules. An "sql" backend is included by default, but requires<br />
-- additional dependencies. See https://prosody.im/doc/storage for more info.<br />
<br />
storage = "sql" -- Default is "internal" (Debian: "sql" requires one of the<br />
-- lua-dbi-sqlite3, lua-dbi-mysql or lua-dbi-postgresql packages to work)<br />
<br />
-- For the "sql" backend, you can uncomment *one* of the below to configure:<br />
--sql = { driver = "SQLite3", database = "prosody.sqlite" } -- Default. 'database' is the filename.<br />
sql = { driver = "MySQL", database = "jabber_example_com", username = "jabberuser", password = "MYSECRETPASSWORD", host = "localhost" }<br />
--sql = { driver = "PostgreSQL", database = "prosody", username = "prosody", password = "secret", host = "localhost" }<br />
<br />
<br />
-- Archiving configuration<br />
-- If mod_mam is enabled, Prosody will store a copy of every message. This<br />
-- is used to synchronize conversations between multiple clients, even if<br />
-- they are offline. This setting controls how long Prosody will keep<br />
-- messages in the archive before removing them.<br />
<br />
archive_expires_after = "1w" -- Remove archived messages after 1 week<br />
max_archive_query_results = 20;<br />
<br />
-- You can also configure messages to be stored in-memory only. For more<br />
-- archiving options, see https://prosody.im/doc/modules/mod_mam<br />
<br />
<br />
-- Audio/video call relay (STUN/TURN)<br />
-- To ensure clients connected to the server can establish connections for<br />
-- low-latency media streaming (such as audio and video calls), it is<br />
-- recommended to run a STUN/TURN server for clients to use. If you do this,<br />
-- specify the details here so clients can discover it.<br />
-- Find more information at https://prosody.im/doc/turn<br />
<br />
-- Specify the address of the TURN service (you may use the same domain as XMPP)<br />
turn_external_host = "xmpp.EXAMPLE.COM"<br />
<br />
-- This secret must be set to the same value in both Prosody and the TURN server<br />
turn_external_secret = "MYSUPERSECRETKEY"<br />
<br />
<br />
-- Logging configuration<br />
-- For advanced logging see https://prosody.im/doc/logging<br />
--<br />
-- Debian:<br />
-- Logs info and higher to /var/log<br />
-- Logs errors to syslog also<br />
log = {<br />
-- Log files (change 'info' to 'debug' for debug logs):<br />
info = "/var/log/prosody/prosody.log";<br />
error = "/var/log/prosody/prosody.err";<br />
-- Syslog:<br />
{ levels = { "error" }; to = "syslog"; };<br />
}<br />
<br />
<br />
-- Uncomment to enable statistics<br />
-- For more info see https://prosody.im/doc/statistics<br />
statistics = "internal"<br />
<br />
<br />
-- Certificates<br />
-- Every virtual host and component needs a certificate so that clients and<br />
-- servers can securely verify its identity. Prosody will automatically load<br />
-- certificates/keys from the directory specified here.<br />
-- For more information, including how to use 'prosodyctl' to auto-import certificates<br />
-- (from e.g. Let's Encrypt) see https://prosody.im/doc/certificates<br />
<br />
-- Location of directory to find certificates in (relative to main config file):<br />
certificates = "certs"<br />
<br />
c2s_direct_tls_ports = { 5223 }<br />
s2s_direct_tls_ports = { 5270 }<br />
c2s_require_encryption = true<br />
s2s_require_encryption = true<br />
tls_profile = "intermediate" -- "modern" if you don't need TLS 1.2<br />
<br />
contact_info = {<br />
abuse = { "xmpp:admin@EXAMPLE.COM" };<br />
admin = { "xmpp:admin@EXAMPLE.COM" };<br />
feedback = { "xmpp:admin@EXAMPLE.COM" };<br />
support = { "https://EXAMPLE.COM", "xmpp:admin@EXAMPLE.COM" };<br />
}<br />
<br />
external_services = {<br />
{<br />
type = "stun",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "stun",<br />
transport = "udp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "turn",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "turn",<br />
transport = "udp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "stuns",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 5349<br />
}, {<br />
type = "turns",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 5349<br />
}<br />
}<br />
<br />
consider_websocket_secure = true<br />
consider_bosh_secure = true<br />
<br />
----------- Virtual hosts -----------<br />
-- You need to add a VirtualHost entry for each domain you wish Prosody to serve.<br />
-- Settings under each VirtualHost entry apply *only* to that host.<br />
-- It's customary to maintain VirtualHost entries in separate config files<br />
-- under /etc/prosody/conf.d/ directory. Examples of such config files can<br />
-- be found in /etc/prosody/conf.avail/ directory.<br />
<br />
------ Additional config files ------<br />
-- For organizational purposes you may prefer to add VirtualHost and<br />
-- Component definitions in their own config files. This line includes<br />
-- all config files in /etc/prosody/conf.d/<br />
<br />
-- VirtualHost "localhost"<br />
-- Prosody requires at least one enabled VirtualHost to function. You can<br />
-- safely remove or disable 'localhost' once you have added another.<br />
<br />
<br />
--VirtualHost "example.com"<br />
<br />
------ Components ------<br />
-- You can specify components to add hosts that provide special services,<br />
-- like multi-user conferences, and transports.<br />
-- For more information on components, see https://prosody.im/doc/components<br />
<br />
---Set up a MUC (multi-user chat) room server on conference.example.com:<br />
--Component "conference.example.com" "muc"<br />
--- Store MUC messages in an archive and allow users to access it<br />
--modules_enabled = { "muc_mam" }<br />
<br />
---Set up a file sharing component<br />
--Component "share.example.com" "http_file_share"<br />
<br />
---Set up an external component (default component port is 5347)<br />
--<br />
-- External components allow adding various services, such as gateways/<br />
-- bridges to non-XMPP networks and services. For more info<br />
-- see: https://prosody.im/doc/components#adding_an_external_component<br />
--<br />
--Component "gateway.example.com"<br />
-- component_secret = "password"<br />
<br />
Include "conf.d/*.cfg.lua"<br />
<br />
---------- End of the Prosody Configuration file ----------<br />
-- You usually **DO NOT** want to add settings here at the end, as they would<br />
-- only apply to the last defined VirtualHost or Component.<br />
--<br />
-- Settings for the global section should go higher up, before the first<br />
-- VirtualHost or Component line, while settings intended for specific hosts<br />
-- should go under the corresponding VirtualHost or Component line.<br />
--<br />
-- For more information see https://prosody.im/doc/configure<br />
<br />
</pre><br />
}}<br />
<br />
{{Hider hiding<br />
|title=Виртуал хост /etc/prosody/conf.avail/EXAMPLE.COM.cfg.lua<br />
|content=<pre><br />
-- Section for example.com<br />
<br />
VirtualHost "EXAMPLE.COM"<br />
enabled = true<br />
<br />
-- Assign this host a certificate for TLS, otherwise it would use the one<br />
-- set in the global section (if any).<br />
-- Note that old-style SSL on port 5223 only supports one certificate, and will always<br />
-- use the global one.<br />
ssl = {<br />
key = "/etc/prosody/certs/EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
<br />
modules_enabled = {<br />
"admin_web"<br />
--"invites"; -- Create and manage invites<br />
--"invites_adhoc"; -- Allow admins/users to create invitations via their client<br />
--"invites_register"; -- Allows invited users to create accounts<br />
}<br />
allow_registration = false -- Allow users to register new accounts via in-band<br />
<br />
------ Components ------<br />
-- You can specify components to add hosts that provide special services,<br />
-- like multi-user conferences, and transports.<br />
-- For more information on components, see http://prosody.im/doc/components<br />
<br />
<br />
-- Set up a SOCKS5 bytestream proxy for server-proxied file transfers:<br />
Component "proxy.EXAMPLE.COM" "proxy65"<br />
ssl = {<br />
key = "/etc/prosody/certs/proxy.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/proxy.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
-- proxy65_address = "proxy.EXAMPLE.COM"<br />
proxy65_acl = { "EXAMPLE.COM" }<br />
<br />
-- Set up a MUC (multi-user chat) room server on conference.example.com:<br />
Component "conference.EXAMPLE.COM" "muc"<br />
modules_enabled = {<br />
"muc_mam",<br />
"vcard_muc",<br />
"muc_moderation",<br />
"muc_hats_adhoc"<br />
}<br />
ssl = {<br />
key = "/etc/prosody/certs/conference.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/conference.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
muc_log_by_default = true<br />
muc_log_presences = false<br />
log_all_rooms = false<br />
muc_log_expires_after = "1w"<br />
muc_log_cleanup_interval = 4 * 60 * 60<br />
restrict_room_creation = "local"<br />
<br />
Component "upload.EXAMPLE.COM" "http_upload"<br />
ssl = {<br />
key = "/etc/prosody/certs/upload.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/upload.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
<br />
http_upload_file_size_limit = 1024*1024*10 -- 10 MB<br />
-- http_max_content_size = 1024*1024*30<br />
http_upload_quota = 1024*1024*250 -- 250 MB<br />
http_upload_expire_after = 60*60*24*7 -- 1 week<br />
<br />
Component "pubsub.EXAMPLE.COM" "pubsub"<br />
ssl = {<br />
key = "/etc/prosody/certs/pubsub.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/pubsub.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
</pre><br />
}}<br />
<br />
Файл конфигурации Prosody очень хорошо комментирован, поэтому рассмотрим ключевые моменты, а также опции, добавленные для дополнительно установленных модулей.<br />
<br />
* Первым в конфиг-файле идет [[Jabber ID]] будущего администратора - ему будут доступны команды управления сервером, а также будут присылаться различные уведомления.<br />
* В '''plugin_paths''' добавляется путь к каталогу с устанавливаемыми плагинами.<br />
* Далее идет обширный список модулей. Рассмотрим некоторые:<br />
** '''turn_external''' позволит нам подключить настроенный ранее Coturn к Prosody для работы звонков.<br />
** '''cloud_notify''' включит поддержку PUSH-уведомлений.<br />
** '''register_web''' включает регистрацию через веб-страницу. Она доступна по адресу https://EXAMPLE.COM:5281/register_web. Штатно тут включена простенькая CAPTCHA, но можно использовать reCaptcha, для этого дополнительно необходимо будет указать ключи для этого сервиса.<br />
** '''admin_adhoc''' позволит выполнять ряд команд на сервере с JID'а администратора из тех клиентов, которые умеют [[Ad-Hoc]].<br />
* Далее следуют настройки, в которых можно усилить или ослабить проверки сертификатов для других серверов.<br />
* Следующей ключевой настройкой будет указание сервера баз данных. Как мы уже условились выше, для хранения данных сервера [[Свой сервер: подготовка базы данных|будем использовать MySQL или MariaDB]]. Prosody имеет весьма простую структуру базы и встроенную схему, поэтому дополнительных действий не требуется.<br />
* В '''archive_expires_after''' можем указать, как скоро нужно чистить архив сообщений для MAM. Для конференций есть отдельная настройка, она будет описана ниже.<br />
* В '''turn_external_host''' и '''turn_external_secret''' указывается адрес Coturn и тот самый ключ, который прописывали в '''/etc/turnserver.conf'''.<br />
* Далее - несколько опций касательно безопасности:<br />
** '''c2s_direct_tls_ports''' и '''s2s_direct_tls_ports''' включает работу с TLS-портами - они должны быть те же, что указывались в SRV-записях в DNS.<br />
** '''c2s_require_encryption''' и '''s2s_require_encryption''' означает использование исключительно шифрованных соединений между серверами, а также между сервером и клиентом.<br />
** '''tls_profile''' настраивает перечень шифров и протоколов, которые может использовать Prosody.<br />
* В '''contact_info''' можно перечислить контакты администратора и, например, адрес конференции поддержки сервера.<br />
* '''external_services''' описывает сервисы, которые предоставляет Coturn.<br />
<br />
На этом настройка основной части завершена и далее идет настройка виртуальных хостов и их сервисов:<br />
<br />
* В секции VirtualHost идет указание SSL-сертификатов для домена, а также разрешение регистрации через jabber-клиент и включение веб-интерфейса для управления сервером, который доступен по адресу https://example.com:5281/admin.<br />
* '''invites''' и сопутствующие ему модули позволяют сделать регистрацию по приглашениям. Однако есть одно но (на сейчас): это отключит обычную регистрацию. Поэтому какой вариант оставить - решайте сами.<br />
<br />
Далее перечисляется несколько компонентов - сервисов для данного сервера. В показанном примере это [[конференции]], [[Передача файлов|proxy]], [[Передача файлов|HTTP Upload]] и [[PEP|pubsub]]. Для каждого из них указывается своя пара сертификатов и ключей.<br />
<br />
* Для '''proxy''' можно указать субдомен, на котором он будет доступен, а опция '''proxy65_acl''' перечисляет домены, которые смогут передавать файлы через этот прокси.<br />
* Для конференций включается поддержка MAM, модерирования и дополнительных ролей в конференциях. В опциях задается включение MAM по-умолчанию, время устаревания MAM-архива, а также правила доступа на создание новых конференций.<br />
* Для модуля '''http_upload''' перечисляются лимиты на размеры одиночных файлов, а также общий размер хранилища для пользователя и время устаревания загруженных файлов. Для Prosody сделано несколько реализаций HTTP Upload - например, можно переключиться на '''mod_http_file_share''', если mod_http_upload чем-то не устроит или вообще использовать [https://github.com/horazont/xmpp-http-upload внешний сервис] через '''http_upload_external'''.<br />
<br />
Закончив правку файлов конфигурации - перезапустите Prosody:<br />
<br />
systemctl restart prosody<br />
<br />
Теперь можете создать пользователя-администратора:<br />
<br />
prosodyctl adduser admin@EXAMPLE.COM<br />
<br />
А также проверить корректность конфигурации следующими командами:<br />
<br />
prosodyctl check config<br />
prosodyctl check certs<br />
prosodyctl check turn<br />
<br />
Во всех случаях в конце команда должна возвращать "'''All checks passed, congratulations!'''". Сервер готов к использованию!<br />
<br />
==Сноски==<br />
<br />
<references/><br />
<br />
==Ссылки==<br />
<br />
* https://prosody.im - домашняя страница Prosody и [https://prosody.im/doc ссылка на документацию]<br />
* [https://open-networks.ru/d/67-prosody-im-v012x-ustanovka-i-nastroyka-xmpp-servera-coturn-fail2ban Очень подробное пользовательское руководство по настройке Prosody]<br />
* [https://www.8host.com/blog/ustanovka-prosody-v-ubuntu-18-04/ Еще одно руководство по установке и настройке]<br />
<br />
[[Category:Свой сервер]]</div>Rainhttps://jabberworld.info/index.php?title=%D0%A1%D0%B2%D0%BE%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80:_%D0%BF%D0%BE%D0%B4%D1%80%D0%BE%D0%B1%D0%BD%D0%BE%D0%B5_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B5_Prosody&diff=10220Свой сервер: подробное руководство по установке Prosody2023-11-02T19:17:22Z<p>Rain: Передвинул инвайты в область виртуалхоста</p>
<hr />
<div>В этой статье приводится пример настройки [[Prosody]] - одного из самых популярных и легковесных jabber-серверов. Для сервера написано просто-таки [https://modules.prosody.im/all.html огромное число модулей] на все случаи жизни, поэтому в руководстве, основанном на версии 0.12.4, будет показано подключение актуальных и популярных функций. В качестве сертификатов будем использовать Let's Encrypt - и все это на Debian GNU/Linux.<br />
<br />
Рассмотрим особенности данной конфигурации.<br />
<br />
__TOC__<br />
<br />
== [[ru_wikipedia:DNS|DNS-записи]] ==<br />
<br />
Хотя для базового варианта своего jabber-сервера вполне достаточно [[Регистрация доменного имени|бесплатного DynDNS-домена]], для полноценной конфигурации все же нужно обзавестись собственным доменом, где можно будет добавить все необходимые DNS-записи и сделать субдомены для сервисов. Выбор регистратора и покупка домена остается за рамками данной статьи, тут только приводятся шаги, которые надо сделать после покупки домена в его админке.<br />
<br />
Всего понадобится около 15 записей в DNS:<br />
<br />
# Для удобства, чтобы в случае миграции сервера с одного IP на другой не приходилось переписывать все записи, стоит завести для него субдомен, который будет ссылаться на нужный IP с помощью А-записи (или 2 таких субдомена в случае использования IPv4+IPv6 - один с A-записью, а второй с AAAA), а все остальные записи сделать CNAME-алиасами для него. Например, для данного сервера ('''jabberworld.info''') сделаны 2 субдомена '''xmpp.jabberworld.info''', ссылающиеся на IPv4 и IPv6-адреса.<br />
# Создаем субдомены для необходимых сервисов сервера<ref>Да, если планируется использовать, например, конференции исключительно локально, то можно обойтись и без DNS-записей - сервер и так знает, куда ему подключаться, так как он этот сервис и предоставляет. Но если хочется полноценный сервис, с которым смогут взаимодействовать и другие сервера - то все же потребуются указанные записи в DNS.</ref> - '''conference''' (для [[Конференции|конференций]]), '''proxy''' (прокси для прямой [[Передача файлов|передачи файлов]]), '''pubsub''' (сервисы типа "Публикация/подписка", где может сохраняться самая разная информация) и '''upload''' (сервис для [[Передача файлов|передачи файлов]] через HTTP Upload). Все эти записи создаем как CNAME на наш субдомен из 1-го пункта.<br />
# Создаем ряд SRV-записей для нашего основного домена - они показывают, где именно какой сервис находится. Конечно, если у вас все на одном адресе, то будет работать и так, но мы ведь решили все делать правильно, верно? Итак, нужны такие SRV-записи:<br />
<br />
:: '''_xmpp-client._tcp.EXAMPLE.COM''' (порт '''5222''') - чтобы указать, куда подключаться [[Клиенты Jabber|jabber-клиенту]]<br />
:: '''_xmpps-client._tcp.EXAMPLE.COM''' (порт '''5223''') - аналогичная запись для [https://xmpp.org/extensions/xep-0368.html TLS-подключений клиентов]<br />
:: '''_xmpp-server._tcp.EXAMPLE.COM''' (порт '''5269''') - чтобы указать, куда подключаться [[Публичные серверы Jabber|jabber-серверу]]<br />
:: '''_xmpps-server._tcp.EXAMPLE.COM''' (порт '''5270''') - аналогичная запись для [https://xmpp.org/extensions/xep-0368.html TLS-подключений серверов].<br />
<br />
:: Записи ниже служат для работы сервиса аудио/видеозвонков через jabber<ref name="avcalls">https://prosody.im/doc/turn</ref>. Для максимальной совместимости будем использовать как [[ru_wikipedia:STUN|STUN]], так и [[ru_wikipedia:Traversal Using Relay NAT|TURN]] - все возможные варианты:<br />
<br />
:: '''_stun._tcp.EXAMPLE.COM''' (порт '''3478''') - [[ru_wikipedia:STUN|STUN]] через [[ru_wikipedia:TCP|TCP]]<br />
:: '''_stun._udp.EXAMPLE.COM''' (порт '''3478''') - STUN через UDP<br />
:: '''_stuns._tcp.EXAMPLE.COM''' (порт '''5349''') - шифрованный STUN через TCP<br />
:: '''_turn._tcp.EXAMPLE.COM''' (порт '''3478''') - [[ru_wikipedia:Traversal Using Relay NAT|TURN]] через [[ru_wikipedia:TCP|TCP]]<br />
:: '''_turn._udp.EXAMPLE.COM''' (порт '''3478''') - TURN через UDP<br />
:: '''_turns._tcp.EXAMPLE.COM''' (порт '''5349''') - шифрованный TURN через TCP<br />
<br />
:: Во всех случаях target'ом для записей служит наш алиас из первого пункта.<br />
{{Hider hiding|<br />
|title=Для продвинутых<br />
|content=<br />
:: Самый полный вариант подразумевает в том числе создание SRV-записей для каждого из сервисов-субдоменов - тех, к которым будут подключаться сторонние серверы. Например, для конференций это может выглядеть так:<br />
<br />
:: '''_xmpp-server._tcp.conference.EXAMPLE.COM''' (порт '''5269''')<br />
:: '''_xmpps-server._tcp.conference.EXAMPLE.COM''' (порт '''5270''' для TLS)<br />
<br />
:: Но, как уже говорилось выше, это для совсем уж необычных конфигураций - когда сам домен указывает на один адрес (например, там может работать веб-сервер, предоставляющий чат-логи на сайте https://conference.example.com), а сам jabber-сервер при этом находится совершенно на другом.<br />
}}<br />
Вот как выглядят записи для данного сервера в админке бесплатного DNS-провайдера [https://dns.he.net Hurricane Electric]:<br />
<br />
<center>[[Файл:Jabber srv.png]]</center><br />
<br />
== Сертификаты ==<br />
<br />
<br />
В современном мире стандартной практикой является шифрование соединений, а для этого, в свою очередь, требуются [[ru_wikipedia:Цифровой сертификат|сертификаты]] от доверенных центров сертификации. Можно, конечно, использовать самоподписанный сертификат, но, во-первых, не все серверы будут их принимать - а значит, к ним не получится подключиться и общаться с их пользователями, а во-вторых, в подключающихся клиентах будут появляться сообщения о недоверенном сертификате, что тоже будет доставлять определенные неудобства. Поэтому стоит воспользоваться услугами одного из популярных бесплатных центров сертификации - [https://letsencrypt.org Let's Encrypt].<br />
<br />
Для работы с сертификатами от Let's Encrypt в Debian есть специальный пакет - '''certbot''', поэтому установите его следующей командой:<br />
<br />
sudo apt-get install certbot<br />
<br />
Сертификаты от Let's Encrypt выдаются сроком на 3 месяца, поэтому в конце этого срока их нужно обновлять. Для подтверждения владения доменом, а также для автоматизации обновления сертификатов в дальнейшем со стороны Let's Encrypt делается запрос на веб-сервер для указанного домена, поэтому для полноценной работы стоит установить какой-нибудь популярный вариант и прописать там виртуальные хосты для нашего jabber-сервера, а также сервисов на нем (сертификаты будут делаться в том числе для сервисов). Пример конфигурации веб-сервера Apache для данного сервера:<br />
<br />
{{Hider hiding<br />
|title=apache_to_jabber_service_domains.conf<br />
|content=<pre><br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@jabberworld.info<br />
DocumentRoot /var/www/jabberworld.info/htdocs<br />
ServerName jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@upload.jabberworld.info<br />
DocumentRoot /var/www/upload.jabberworld.info/htdocs<br />
ServerName upload.jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@pubsub.jabberworld.info<br />
DocumentRoot /var/www/pubsub.jabberworld.info/htdocs<br />
ServerName pubsub.jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@conference.jabberworld.info<br />
DocumentRoot /var/www/conference.jabberworld.info/htdocs<br />
ServerName conference.jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@proxy.jabberworld.info<br />
DocumentRoot /var/www/proxy.jabberworld.info/htdocs<br />
ServerName proxy.jabberworld.info<br />
</VirtualHost><br />
</pre><br />
}}<br />
<br />
В каталогах сервера не обязательно должен быть какой-то контент, хотя, например, на основном домене можно разместить какую-то страничку, посвященную jabber-серверу, а на поддомене '''conference''' разместить чат-логи [[Конференции|конференций]]. Субдомен '''upload''' можно приспособить под загружаемые через HTTP Upload файлы, чтобы в дальнейшем их раздавал веб-сервер<ref name="http_upload">В таком случае ему нужно обеспечить доступ к каталогу '''/var/lib/prosody/http_upload/''' - а лучше указать опцию '''http_upload_path''' с путем за пределами домашнего каталога Prosody, плюс обеспечить нужные права веб-серверу, чтобы он мог читать файлы, загруженные через jabber-сервер. Такое решение имеет еще одно преимущество: разнообразные клиенты (не только Jabber) будут гораздо охотнее показывать превью для обычных HTTP/HTTPS-ссылок (т.е., на 80 или 443-м порту), а не тех, где контент отдается на "необычном" порту - вроде 5281 в данном примере.</ref>.<br />
<br />
После всех приготовлений<ref>Более подробно можно почитать тут: [[Свой сервер: подготовка веб-сервера и сертификатов]]</ref> создайте все необходимые сертификаты. Для этого воспользуйтесь следующими командами (выполнять надо от пользователя '''root'''):<br />
<br />
certbot certonly --webroot --webroot-path /var/www/EXAMPLE.COM/htdocs/ -d EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/conference.EXAMPLE.COM/htdocs/ -d conference.EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/upload.EXAMPLE.COM/htdocs/ -d upload.EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/pubsub.EXAMPLE.COM/htdocs/ -d pubsub.EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/proxy.EXAMPLE.COM/htdocs/ -d proxy.EXAMPLE.COM --rsa-key-size 4096<br />
<br />
В параметрах после '''--webroot-path''' указывается каталог веб-сервера для данного домена, а после '''-d''' - сам домен.<br />
<br />
После успешного выполнения команд будет выдана информация о созданном сертификате, в том числе 2 файла - цепочка ключей и приватный ключ - сохраните эти пути для дальнейшего использования, они нам еще пригодятся. Всего получится 10 файлов. certbot обновляет сертификаты автоматически, если срок их истечения составляет менее 30 дней - т.е., обновление происходит раз в 2 месяца.<br />
<br />
Так как Prosody работает от своего пользователя и не имеет доступа к сертификатам, созданным certbot от рута, то надо каким-то образом предоставить доступ ejabberd'у к сертификатам. Самым простым и корректным вариантом на сейчас является выполнение следующей команды от рута<ref>https://prosody.im/doc/letsencrypt</ref>:<br />
<br />
prosodyctl --root cert import /etc/letsencrypt/live<br />
<br />
В дальнейшем эту команду можно использовать после каждого обновления сертификатов - например, указав ее в качестве deploy hook для certbot.<br />
<br />
== Установка и настройка Prosody ==<br />
<br />
Все подготовительные процедуры завершены, теперь можно приступать непосредственно к установке и настройке своего jabber-сервера. Для поддержки звонков потребуется еще STUN/TURN-сервер - в качестве него будем использовать Coturn. В Debian установить Prosody с поддержкой MySQL<ref>На самом деле выбор MySQL обусловлен с одной стороны ее популярностью на веб-хостингах, с другой - возможностью хранить большие объемы данных, которые могут потребоваться, если вы хотите хранить, например, архив сообщений за длительное время. Однако если таких планов нет и это будет сервер для одного или нескольких человек со скромными запросами - то вполне можно обойтись Sqlite.</ref> и Coturn можно командой<br />
<br />
apt-get install prosody coturn lua-dbi-mysql<br />
<br />
'''Примечание''': на момент написания статьи самая последняя версия Prosody - 0.12.4 - доступна в репозитории '''backports'''. Чтобы установить сервер оттуда - добавьте к команде выше ключ '''-t bookworm-backports''' (само-собой, репозиторий должен быть прописан в '''/etc/apt/sources.list''').<br />
<br />
Настройку начнем с Coturn - она очень простая и сводится к включению сервиса в файле '''/etc/default/coturn''' опции '''TURNSERVER_ENABLED=1''', а также приведению конфиг-файла '''/etc/turnserver.conf''' к такому виду:<br />
<br />
{{Hider hiding<br />
|title=/etc/turnserver.conf<br />
|content=<pre><br />
listening-port=3478<br />
tls-listening-port=5349<br />
verbose<br />
use-auth-secret<br />
static-auth-secret=MYSUPERSECRETKEY<br />
userdb=/var/lib/turn/turndb<br />
realm=EXAMPLE.COM<br />
cert=/etc/turncerts/EXAMPLE.COM.fullchain.pem<br />
pkey=/etc/turncerts/EXAMPLE.COM.privkey.pem<br />
syslog<br />
prod<br />
no-multicast-peers<br />
no-cli<br />
no-tlsv1<br />
no-tlsv1_1<br />
no-rfc5780<br />
no-stun-backward-compatibility<br />
response-origin-only-with-rfc5780<br />
</pre><br />
}}<br />
<br />
Фактически, изменения в конфиге сводятся по-большей части к следующему:<br />
<br />
* Указываем прослушиваемые порты - они должны быть такие же, как были указаны в SRV-записях в DNS.<br />
* Включаем '''use-auth-secret''' и указываем придуманный '''ключ-пароль''' - его мы потом укажем в конфиг-файле у Prosody.<br />
* Указываем '''realm''' - домен и сертификат с ключом для него.<br />
<br />
Да, так как Coturn не может напрямую прочитать сертификаты из каталога Let's Encrypt - для правильной работы можно создать отдельный каталог, куда копировать сертификаты с нужными правами. В примере выше это '''/etc/turncerts'''. Команду копирования и изменения прав можно объединить в одном скрипте с командой копирования сертификатов для Prosody и вызывать этот скрипт в качестве deploy hook для Let's Encrypt (или просто по Cron'у, например, раз в неделю).<br />
<br />
Закончив правку конфиг-файла, перезапускаем TURN-сервер:<br />
<br />
systemctl restart coturn.service<br />
<br />
Теперь переходим к настройке Prosody. Как уже говорилось, под него есть множество разнообразных модулей. Для удобства добавления модулей добавьте следующие пакеты:<br />
<br />
apt-get install luarocks liblua5.4-dev lua-luaossl --no-install-recommends<br />
<br />
После чего можно сразу установить полезные модули:<br />
<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_admin_web # Поддержка WEB-интерфейса для управления сервером<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_vcard_muc # Поддержка vCard для конференций<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_muc_moderation # Модерирование конференций и возможность удалять спам<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_cloud_notify # Поддержка PUSH-уведомлений<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_cloud_notify_extensions # Дополнительные модули для PUSH<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_http_upload # Поддержка файлообмена через HTTP Upload<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_register_web # Поддержка регистрации через веб-страницу<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_muc_hats_adhoc # Указание дополнительных ролей в конференциях<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_muc_hats_api # См. выше<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_mam_adhoc # Возможность управлять настройками MAM-архива из jabber-клиента<br />
<br />
Конфигурационный файл у Prosody состоит из нескольких секций:<br />
* Общие параметры<br />
* Параметры виртуал-хоста<br />
* Параметры сервисов.<br />
<br />
Для удобства то, что относится к виртуал-хосту и его сервисам, вынесено в отдельный файл. Для включения нужного виртуал-хоста поместите симлинк на его конфиг в '''/etc/prosody/conf.d'''.<br />
<br />
{{Hider hiding<br />
|title=/etc/prosody/prosody.cfg.lua<br />
|content=<pre><br />
-- Prosody Example Configuration File<br />
--<br />
-- Information on configuring Prosody can be found on our<br />
-- website at https://prosody.im/doc/configure<br />
--<br />
-- Tip: You can check that the syntax of this file is correct<br />
-- when you have finished by running this command:<br />
-- prosodyctl check config<br />
-- If there are any errors, it will let you know what and where<br />
-- they are, otherwise it will keep quiet.<br />
--<br />
-- The only thing left to do is rename this file to remove the .dist ending, and fill in the<br />
-- blanks. Good luck, and happy Jabbering!<br />
<br />
<br />
---------- Server-wide settings ----------<br />
-- Settings in this section apply to the whole server and are the default settings<br />
-- for any virtual hosts<br />
<br />
-- This is a (by default, empty) list of accounts that are admins<br />
-- for the server. Note that you must create the accounts separately<br />
-- (see https://prosody.im/doc/creating_accounts for info)<br />
-- Example: admins = { "user1@example.com", "user2@example.net" }<br />
admins = {<br />
"admin@EXAMPLE.COM"<br />
}<br />
<br />
-- This option allows you to specify additional locations where Prosody<br />
-- will search first for modules. For additional modules you can install, see<br />
-- the community module repository at https://modules.prosody.im/<br />
-- For a local administrator it's common to place local modifications<br />
-- under /usr/local/ hierarchy:<br />
plugin_paths = {<br />
"/usr/lib/prosody/modules",<br />
"/var/lib/prosody/custom_plugins/"<br />
}<br />
<br />
-- This is the list of modules Prosody will load on startup.<br />
-- Documentation for bundled modules can be found at: https://prosody.im/doc/modules<br />
modules_enabled = {<br />
<br />
-- Generally required<br />
"disco"; -- Service discovery<br />
"roster"; -- Allow users to have a roster. Recommended ;)<br />
"saslauth"; -- Authentication for clients and servers. Recommended if you want to log in.<br />
"tls"; -- Add support for secure TLS on c2s/s2s connections<br />
<br />
-- Not essential, but recommended<br />
"blocklist"; -- Allow users to block communications with other users<br />
"bookmarks"; -- Synchronise the list of open rooms between clients<br />
"carbons"; -- Keep multiple online clients in sync<br />
"dialback"; -- Support for verifying remote servers using DNS<br />
"limits"; -- Enable bandwidth limiting for XMPP connections<br />
"pep"; -- Allow users to store public and private data in their account<br />
"private"; -- Legacy account storage mechanism (XEP-0049)<br />
"smacks"; -- Stream management and resumption (XEP-0198)<br />
"vcard4"; -- User profiles (stored in PEP)<br />
"vcard_legacy"; -- Conversion between legacy vCard and PEP Avatar, vcard<br />
<br />
-- Nice to have<br />
"csi_simple"; -- Simple but effective traffic optimizations for mobile devices<br />
"ping"; -- Replies to XMPP pings with pongs<br />
"register"; -- Allow users to register on this server using a client and change passwords<br />
"time"; -- Let others know the time here on this server<br />
"uptime"; -- Report how long server has been running<br />
"version"; -- Replies to server version requests<br />
"mam"; -- Store recent messages to allow multi-device synchronization<br />
"turn_external"; -- Provide external STUN/TURN service for e.g. audio/video calls<br />
<br />
-- Admin interfaces<br />
"admin_adhoc"; -- Allows administration via an XMPP client that supports ad-hoc commands<br />
"admin_shell"; -- Allow secure administration via 'prosodyctl shell'<br />
<br />
-- HTTP modules<br />
"bosh"; -- Enable BOSH clients, aka "Jabber over HTTP"<br />
--"http_openmetrics"; -- for exposing metrics to stats collectors<br />
"websocket"; -- XMPP over WebSockets<br />
<br />
-- Other specific functionality<br />
"posix"; -- POSIX functionality, sends server to background, enables syslog, etc.<br />
"announce"; -- Send announcement to all online users<br />
--"groups"; -- Shared roster support<br />
--"legacyauth"; -- Legacy authentication. Only used by some old clients and bots.<br />
--"mimicking"; -- Prevent address spoofing<br />
--"motd"; -- Send a message to users when they log in<br />
"s2s_bidi"; -- Bi-directional server-to-server (XEP-0288)<br />
"server_contact_info"; -- Publish contact information for this service<br />
"tombstones"; -- Prevent registration of deleted accounts<br />
"watchregistrations"; -- Alert admins of registrations<br />
"welcome"; -- Welcome users who register accounts<br />
<br />
"cloud_notify"; -- push support<br />
"cloud_notify_extensions"; -- meta-module that simply enables all the modules required to support Siskin or Snikket iOS on a Prosody server<br />
"register_web"; -- registrations via web interface<br />
"mam_adhoc"; -- allowing clients to change archiving preferences<br />
"throttle_presence"; -- automatically cuts down on presence traffic when clients indicate they are inactive<br />
"external_services"; -- calls<br />
"admin_adhoc"; -- ad-hoc administration of server<br />
}<br />
<br />
-- These modules are auto-loaded, but should you want<br />
-- to disable them then uncomment them here:<br />
modules_disabled = {<br />
-- "offline"; -- Store offline messages<br />
-- "c2s"; -- Handle client connections<br />
-- "s2s"; -- Handle server-to-server connections<br />
}<br />
<br />
-- Debian:<br />
-- Please, don't change this option since /run/prosody/<br />
-- is one of the few directories Prosody is allowed to write to<br />
--<br />
pidfile = "/run/prosody/prosody.pid";<br />
<br />
-- Server-to-server authentication<br />
-- Require valid certificates for server-to-server connections?<br />
-- If false, other methods such as dialback (DNS) may be used instead.<br />
<br />
s2s_secure_auth = true<br />
<br />
-- Some servers have invalid or self-signed certificates. You can list<br />
-- remote domains here that will not be required to authenticate using<br />
-- certificates. They will be authenticated using other methods instead,<br />
-- even when s2s_secure_auth is enabled.<br />
<br />
--s2s_insecure_domains = { "insecure.example" }<br />
<br />
-- Even if you disable s2s_secure_auth, you can still require valid<br />
-- certificates for some domains by specifying a list here.<br />
<br />
--s2s_secure_domains = { "jabber.org" }<br />
<br />
<br />
-- Rate limits<br />
-- Enable rate limits for incoming client and server connections. These help<br />
-- protect from excessive resource consumption and denial-of-service attacks.<br />
<br />
limits = {<br />
c2s = {<br />
rate = "3kb/s";<br />
};<br />
s2sin = {<br />
rate = "50kb/s";<br />
};<br />
}<br />
<br />
-- Authentication<br />
-- Select the authentication backend to use. The 'internal' providers<br />
-- use Prosody's configured data storage to store the authentication data.<br />
-- For more information see https://prosody.im/doc/authentication<br />
<br />
authentication = "internal_hashed"<br />
<br />
-- Many authentication providers, including the default one, allow you to<br />
-- create user accounts via Prosody's admin interfaces. For details, see the<br />
-- documentation at https://prosody.im/doc/creating_accounts<br />
<br />
<br />
-- Storage<br />
-- Select the storage backend to use. By default Prosody uses flat files<br />
-- in its configured data directory, but it also supports more backends<br />
-- through modules. An "sql" backend is included by default, but requires<br />
-- additional dependencies. See https://prosody.im/doc/storage for more info.<br />
<br />
storage = "sql" -- Default is "internal" (Debian: "sql" requires one of the<br />
-- lua-dbi-sqlite3, lua-dbi-mysql or lua-dbi-postgresql packages to work)<br />
<br />
-- For the "sql" backend, you can uncomment *one* of the below to configure:<br />
--sql = { driver = "SQLite3", database = "prosody.sqlite" } -- Default. 'database' is the filename.<br />
sql = { driver = "MySQL", database = "jabber_example_com", username = "jabberuser", password = "MYSECRETPASSWORD", host = "localhost" }<br />
--sql = { driver = "PostgreSQL", database = "prosody", username = "prosody", password = "secret", host = "localhost" }<br />
<br />
<br />
-- Archiving configuration<br />
-- If mod_mam is enabled, Prosody will store a copy of every message. This<br />
-- is used to synchronize conversations between multiple clients, even if<br />
-- they are offline. This setting controls how long Prosody will keep<br />
-- messages in the archive before removing them.<br />
<br />
archive_expires_after = "1w" -- Remove archived messages after 1 week<br />
max_archive_query_results = 20;<br />
<br />
-- You can also configure messages to be stored in-memory only. For more<br />
-- archiving options, see https://prosody.im/doc/modules/mod_mam<br />
<br />
<br />
-- Audio/video call relay (STUN/TURN)<br />
-- To ensure clients connected to the server can establish connections for<br />
-- low-latency media streaming (such as audio and video calls), it is<br />
-- recommended to run a STUN/TURN server for clients to use. If you do this,<br />
-- specify the details here so clients can discover it.<br />
-- Find more information at https://prosody.im/doc/turn<br />
<br />
-- Specify the address of the TURN service (you may use the same domain as XMPP)<br />
turn_external_host = "xmpp.EXAMPLE.COM"<br />
<br />
-- This secret must be set to the same value in both Prosody and the TURN server<br />
turn_external_secret = "MYSUPERSECRETKEY"<br />
<br />
<br />
-- Logging configuration<br />
-- For advanced logging see https://prosody.im/doc/logging<br />
--<br />
-- Debian:<br />
-- Logs info and higher to /var/log<br />
-- Logs errors to syslog also<br />
log = {<br />
-- Log files (change 'info' to 'debug' for debug logs):<br />
info = "/var/log/prosody/prosody.log";<br />
error = "/var/log/prosody/prosody.err";<br />
-- Syslog:<br />
{ levels = { "error" }; to = "syslog"; };<br />
}<br />
<br />
<br />
-- Uncomment to enable statistics<br />
-- For more info see https://prosody.im/doc/statistics<br />
statistics = "internal"<br />
<br />
<br />
-- Certificates<br />
-- Every virtual host and component needs a certificate so that clients and<br />
-- servers can securely verify its identity. Prosody will automatically load<br />
-- certificates/keys from the directory specified here.<br />
-- For more information, including how to use 'prosodyctl' to auto-import certificates<br />
-- (from e.g. Let's Encrypt) see https://prosody.im/doc/certificates<br />
<br />
-- Location of directory to find certificates in (relative to main config file):<br />
certificates = "certs"<br />
<br />
c2s_direct_tls_ports = { 5223 }<br />
s2s_direct_tls_ports = { 5270 }<br />
c2s_require_encryption = true<br />
s2s_require_encryption = true<br />
tls_profile = "intermediate" -- "modern" if you don't need TLS 1.2<br />
<br />
contact_info = {<br />
abuse = { "xmpp:admin@EXAMPLE.COM" };<br />
admin = { "xmpp:admin@EXAMPLE.COM" };<br />
feedback = { "xmpp:admin@EXAMPLE.COM" };<br />
support = { "https://EXAMPLE.COM", "xmpp:admin@EXAMPLE.COM" };<br />
}<br />
<br />
external_services = {<br />
{<br />
type = "stun",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "stun",<br />
transport = "udp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "turn",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "turn",<br />
transport = "udp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "stuns",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 5349<br />
}, {<br />
type = "turns",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 5349<br />
}<br />
}<br />
<br />
consider_websocket_secure = true<br />
consider_bosh_secure = true<br />
<br />
----------- Virtual hosts -----------<br />
-- You need to add a VirtualHost entry for each domain you wish Prosody to serve.<br />
-- Settings under each VirtualHost entry apply *only* to that host.<br />
-- It's customary to maintain VirtualHost entries in separate config files<br />
-- under /etc/prosody/conf.d/ directory. Examples of such config files can<br />
-- be found in /etc/prosody/conf.avail/ directory.<br />
<br />
------ Additional config files ------<br />
-- For organizational purposes you may prefer to add VirtualHost and<br />
-- Component definitions in their own config files. This line includes<br />
-- all config files in /etc/prosody/conf.d/<br />
<br />
-- VirtualHost "localhost"<br />
-- Prosody requires at least one enabled VirtualHost to function. You can<br />
-- safely remove or disable 'localhost' once you have added another.<br />
<br />
<br />
--VirtualHost "example.com"<br />
<br />
------ Components ------<br />
-- You can specify components to add hosts that provide special services,<br />
-- like multi-user conferences, and transports.<br />
-- For more information on components, see https://prosody.im/doc/components<br />
<br />
---Set up a MUC (multi-user chat) room server on conference.example.com:<br />
--Component "conference.example.com" "muc"<br />
--- Store MUC messages in an archive and allow users to access it<br />
--modules_enabled = { "muc_mam" }<br />
<br />
---Set up a file sharing component<br />
--Component "share.example.com" "http_file_share"<br />
<br />
---Set up an external component (default component port is 5347)<br />
--<br />
-- External components allow adding various services, such as gateways/<br />
-- bridges to non-XMPP networks and services. For more info<br />
-- see: https://prosody.im/doc/components#adding_an_external_component<br />
--<br />
--Component "gateway.example.com"<br />
-- component_secret = "password"<br />
<br />
Include "conf.d/*.cfg.lua"<br />
<br />
---------- End of the Prosody Configuration file ----------<br />
-- You usually **DO NOT** want to add settings here at the end, as they would<br />
-- only apply to the last defined VirtualHost or Component.<br />
--<br />
-- Settings for the global section should go higher up, before the first<br />
-- VirtualHost or Component line, while settings intended for specific hosts<br />
-- should go under the corresponding VirtualHost or Component line.<br />
--<br />
-- For more information see https://prosody.im/doc/configure<br />
<br />
</pre><br />
}}<br />
<br />
{{Hider hiding<br />
|title=Виртуал хост /etc/prosody/conf.avail/EXAMPLE.COM.cfg.lua<br />
|content=<pre><br />
-- Section for example.com<br />
<br />
VirtualHost "EXAMPLE.COM"<br />
enabled = true<br />
<br />
-- Assign this host a certificate for TLS, otherwise it would use the one<br />
-- set in the global section (if any).<br />
-- Note that old-style SSL on port 5223 only supports one certificate, and will always<br />
-- use the global one.<br />
ssl = {<br />
key = "/etc/prosody/certs/EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
<br />
modules_enabled = {<br />
"admin_web"<br />
--"invites"; -- Create and manage invites<br />
--"invites_adhoc"; -- Allow admins/users to create invitations via their client<br />
--"invites_register"; -- Allows invited users to create accounts<br />
}<br />
allow_registration = false -- Allow users to register new accounts via in-band<br />
<br />
------ Components ------<br />
-- You can specify components to add hosts that provide special services,<br />
-- like multi-user conferences, and transports.<br />
-- For more information on components, see http://prosody.im/doc/components<br />
<br />
<br />
-- Set up a SOCKS5 bytestream proxy for server-proxied file transfers:<br />
Component "proxy.EXAMPLE.COM" "proxy65"<br />
ssl = {<br />
key = "/etc/prosody/certs/proxy.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/proxy.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
-- proxy65_address = "proxy.EXAMPLE.COM"<br />
proxy65_acl = { "EXAMPLE.COM" }<br />
<br />
-- Set up a MUC (multi-user chat) room server on conference.example.com:<br />
Component "conference.EXAMPLE.COM" "muc"<br />
modules_enabled = {<br />
"muc_mam",<br />
"vcard_muc",<br />
"muc_moderation",<br />
"muc_hats_adhoc"<br />
}<br />
ssl = {<br />
key = "/etc/prosody/certs/conference.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/conference.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
muc_log_by_default = true<br />
muc_log_presences = false<br />
log_all_rooms = false<br />
muc_log_expires_after = "1w"<br />
muc_log_cleanup_interval = 4 * 60 * 60<br />
restrict_room_creation = "local"<br />
<br />
Component "upload.EXAMPLE.COM" "http_upload"<br />
ssl = {<br />
key = "/etc/prosody/certs/upload.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/upload.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
<br />
http_upload_file_size_limit = 1024*1024*10 -- 10 MB<br />
-- http_max_content_size = 1024*1024*30<br />
http_upload_quota = 1024*1024*250 -- 250 MB<br />
http_upload_expire_after = 60*60*24*7 -- 1 week<br />
<br />
Component "pubsub.EXAMPLE.COM" "pubsub"<br />
ssl = {<br />
key = "/etc/prosody/certs/pubsub.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/pubsub.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
</pre><br />
}}<br />
<br />
Файл конфигурации Prosody очень хорошо комментирован, поэтому рассмотрим ключевые моменты, а также опции, добавленные для дополнительно установленных модулей.<br />
<br />
* Первым в конфиг-файле идет [[Jabber ID]] будущего администратора - ему будут доступны команды управления сервером, а также будут присылаться различные уведомления.<br />
* В '''plugin_paths''' добавляется путь к каталогу с устанавливаемыми плагинами.<br />
* Далее идет обширный список модулей. Рассмотрим некоторые:<br />
** '''turn_external''' позволит нам подключить настроенный ранее Coturn к Prosody для работы звонков.<br />
** '''cloud_notify''' включит поддержку PUSH-уведомлений.<br />
** '''register_web''' включает регистрацию через веб-страницу. Она доступна по адресу https://EXAMPLE.COM:5281/register_web. Штатно тут включена простенькая CAPTCHA, но можно использовать reCaptcha, для этого дополнительно необходимо будет указать ключи для этого сервиса.<br />
** '''admin_adhoc''' позволит выполнять ряд команд на сервере с JID'а администратора из тех клиентов, которые умеют [[Ad-Hoc]].<br />
* Далее следуют настройки, в которых можно усилить или ослабить проверки сертификатов для других серверов.<br />
* Следующей ключевой настройкой будет указание сервера баз данных. Как мы уже условились выше, для хранения данных сервера [[Свой сервер: подготовка базы данных|будем использовать MySQL или MariaDB]]. Prosody имеет весьма простую структуру базы и встроенную схему, поэтому дополнительных действий не требуется.<br />
* В '''archive_expires_after''' можем указать, как скоро нужно чистить архив сообщений для MAM. Для конференций есть отдельная настройка, она будет описана ниже.<br />
* В '''turn_external_host''' и '''turn_external_secret''' указывается адрес Coturn и тот самый ключ, который прописывали в '''/etc/turnserver.conf'''.<br />
* Далее - несколько опций касательно безопасности:<br />
** '''c2s_direct_tls_ports''' и '''s2s_direct_tls_ports''' включает работу с TLS-портами - они должны быть те же, что указывались в SRV-записях в DNS.<br />
** '''c2s_require_encryption''' и '''s2s_require_encryption''' означает использование исключительно шифрованных соединений между серверами, а также между сервером и клиентом.<br />
** '''tls_profile''' настраивает перечень шифров и протоколов, которые может использовать Prosody.<br />
* В '''contact_info''' можно перечислить контакты администратора и, например, адрес конференции поддержки сервера.<br />
* '''external_services''' описывает сервисы, которые предоставляет Coturn.<br />
<br />
На этом настройка основной части завершена и далее идет настройка виртуальных хостов и их сервисов:<br />
<br />
* В секции VirtualHost идет указание SSL-сертификатов для домена, а также разрешение регистрации через jabber-клиент и включение веб-интерфейса для управления сервером, который доступен по адресу https://example.com:5281/admin.<br />
* '''invites''' и сопутствующие ему модули позволяют сделать регистрацию по приглашениям. Однако есть одно но (на сейчас): это отключит обычную регистрацию. Поэтому какой вариант оставить - решайте сами.<br />
<br />
Далее перечисляется несколько компонентов - сервисов для данного сервера. В показанном примере это [[конференции]], [[Передача файлов|proxy]], [[Передача файлов|HTTP Upload]] и [[PEP|pubsub]]. Для каждого из них указывается своя пара сертификатов и ключей.<br />
<br />
* Для '''proxy''' можно указать субдомен, на котором он будет доступен, а опция '''proxy65_acl''' перечисляет домены, которые смогут передавать файлы через этот прокси.<br />
* Для конференций включается поддержка MAM, модерирования и дополнительных ролей в конференциях. В опциях задается включение MAM по-умолчанию, время устаревания MAM-архива, а также правила доступа на создание новых конференций.<br />
* Для модуля '''http_upload''' перечисляются лимиты на размеры одиночных файлов, а также общий размер хранилища для пользователя и время устаревания загруженных файлов. Для Prosody сделано несколько реализаций HTTP Upload - например, можно переключиться на '''mod_http_file_share''', если mod_http_upload чем-то не устроит или вообще использовать [https://github.com/horazont/xmpp-http-upload внешний сервис] через '''http_upload_external'''.<br />
<br />
Закончив правку файлов конфигурации - перезапустите Prosody:<br />
<br />
systemctl restart prosody<br />
<br />
Теперь можете создать пользователя-администратора:<br />
<br />
prosodyctl adduser admin@EXAMPLE.COM<br />
<br />
А также проверить корректность конфигурации следующими командами:<br />
<br />
prosodyctl check config<br />
prosodyctl check certs<br />
prosodyctl check turn<br />
<br />
Во всех случаях в конце команда должна возвращать "'''All checks passed, congratulations!'''".<br />
<br />
==Сноски==<br />
<br />
<references/><br />
<br />
==Ссылки==<br />
<br />
* https://prosody.im - домашняя страница Prosody и [https://prosody.im/doc ссылка на документацию]<br />
* [https://open-networks.ru/d/67-prosody-im-v012x-ustanovka-i-nastroyka-xmpp-servera-coturn-fail2ban Очень подробное пользовательское руководство по настройке Prosody]<br />
* [https://www.8host.com/blog/ustanovka-prosody-v-ubuntu-18-04/ Еще одно руководство по установке и настройке]<br />
<br />
[[Category:Свой сервер]]</div>Rainhttps://jabberworld.info/index.php?title=%D0%A1%D0%B2%D0%BE%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80:_%D0%BF%D0%BE%D0%B4%D1%80%D0%BE%D0%B1%D0%BD%D0%BE%D0%B5_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B5_Prosody&diff=10219Свой сервер: подробное руководство по установке Prosody2023-11-02T19:08:40Z<p>Rain: Ссылка на список модулей</p>
<hr />
<div>В этой статье приводится пример настройки [[Prosody]] - одного из самых популярных и легковесных jabber-серверов. Для сервера написано просто-таки [https://modules.prosody.im/all.html огромное число модулей] на все случаи жизни, поэтому в руководстве, основанном на версии 0.12.4, будет показано подключение актуальных и популярных функций. В качестве сертификатов будем использовать Let's Encrypt - и все это на Debian GNU/Linux.<br />
<br />
Рассмотрим особенности данной конфигурации.<br />
<br />
__TOC__<br />
<br />
== [[ru_wikipedia:DNS|DNS-записи]] ==<br />
<br />
Хотя для базового варианта своего jabber-сервера вполне достаточно [[Регистрация доменного имени|бесплатного DynDNS-домена]], для полноценной конфигурации все же нужно обзавестись собственным доменом, где можно будет добавить все необходимые DNS-записи и сделать субдомены для сервисов. Выбор регистратора и покупка домена остается за рамками данной статьи, тут только приводятся шаги, которые надо сделать после покупки домена в его админке.<br />
<br />
Всего понадобится около 15 записей в DNS:<br />
<br />
# Для удобства, чтобы в случае миграции сервера с одного IP на другой не приходилось переписывать все записи, стоит завести для него субдомен, который будет ссылаться на нужный IP с помощью А-записи (или 2 таких субдомена в случае использования IPv4+IPv6 - один с A-записью, а второй с AAAA), а все остальные записи сделать CNAME-алиасами для него. Например, для данного сервера ('''jabberworld.info''') сделаны 2 субдомена '''xmpp.jabberworld.info''', ссылающиеся на IPv4 и IPv6-адреса.<br />
# Создаем субдомены для необходимых сервисов сервера<ref>Да, если планируется использовать, например, конференции исключительно локально, то можно обойтись и без DNS-записей - сервер и так знает, куда ему подключаться, так как он этот сервис и предоставляет. Но если хочется полноценный сервис, с которым смогут взаимодействовать и другие сервера - то все же потребуются указанные записи в DNS.</ref> - '''conference''' (для [[Конференции|конференций]]), '''proxy''' (прокси для прямой [[Передача файлов|передачи файлов]]), '''pubsub''' (сервисы типа "Публикация/подписка", где может сохраняться самая разная информация) и '''upload''' (сервис для [[Передача файлов|передачи файлов]] через HTTP Upload). Все эти записи создаем как CNAME на наш субдомен из 1-го пункта.<br />
# Создаем ряд SRV-записей для нашего основного домена - они показывают, где именно какой сервис находится. Конечно, если у вас все на одном адресе, то будет работать и так, но мы ведь решили все делать правильно, верно? Итак, нужны такие SRV-записи:<br />
<br />
:: '''_xmpp-client._tcp.EXAMPLE.COM''' (порт '''5222''') - чтобы указать, куда подключаться [[Клиенты Jabber|jabber-клиенту]]<br />
:: '''_xmpps-client._tcp.EXAMPLE.COM''' (порт '''5223''') - аналогичная запись для [https://xmpp.org/extensions/xep-0368.html TLS-подключений клиентов]<br />
:: '''_xmpp-server._tcp.EXAMPLE.COM''' (порт '''5269''') - чтобы указать, куда подключаться [[Публичные серверы Jabber|jabber-серверу]]<br />
:: '''_xmpps-server._tcp.EXAMPLE.COM''' (порт '''5270''') - аналогичная запись для [https://xmpp.org/extensions/xep-0368.html TLS-подключений серверов].<br />
<br />
:: Записи ниже служат для работы сервиса аудио/видеозвонков через jabber<ref name="avcalls">https://prosody.im/doc/turn</ref>. Для максимальной совместимости будем использовать как [[ru_wikipedia:STUN|STUN]], так и [[ru_wikipedia:Traversal Using Relay NAT|TURN]] - все возможные варианты:<br />
<br />
:: '''_stun._tcp.EXAMPLE.COM''' (порт '''3478''') - [[ru_wikipedia:STUN|STUN]] через [[ru_wikipedia:TCP|TCP]]<br />
:: '''_stun._udp.EXAMPLE.COM''' (порт '''3478''') - STUN через UDP<br />
:: '''_stuns._tcp.EXAMPLE.COM''' (порт '''5349''') - шифрованный STUN через TCP<br />
:: '''_turn._tcp.EXAMPLE.COM''' (порт '''3478''') - [[ru_wikipedia:Traversal Using Relay NAT|TURN]] через [[ru_wikipedia:TCP|TCP]]<br />
:: '''_turn._udp.EXAMPLE.COM''' (порт '''3478''') - TURN через UDP<br />
:: '''_turns._tcp.EXAMPLE.COM''' (порт '''5349''') - шифрованный TURN через TCP<br />
<br />
:: Во всех случаях target'ом для записей служит наш алиас из первого пункта.<br />
{{Hider hiding|<br />
|title=Для продвинутых<br />
|content=<br />
:: Самый полный вариант подразумевает в том числе создание SRV-записей для каждого из сервисов-субдоменов - тех, к которым будут подключаться сторонние серверы. Например, для конференций это может выглядеть так:<br />
<br />
:: '''_xmpp-server._tcp.conference.EXAMPLE.COM''' (порт '''5269''')<br />
:: '''_xmpps-server._tcp.conference.EXAMPLE.COM''' (порт '''5270''' для TLS)<br />
<br />
:: Но, как уже говорилось выше, это для совсем уж необычных конфигураций - когда сам домен указывает на один адрес (например, там может работать веб-сервер, предоставляющий чат-логи на сайте https://conference.example.com), а сам jabber-сервер при этом находится совершенно на другом.<br />
}}<br />
Вот как выглядят записи для данного сервера в админке бесплатного DNS-провайдера [https://dns.he.net Hurricane Electric]:<br />
<br />
<center>[[Файл:Jabber srv.png]]</center><br />
<br />
== Сертификаты ==<br />
<br />
<br />
В современном мире стандартной практикой является шифрование соединений, а для этого, в свою очередь, требуются [[ru_wikipedia:Цифровой сертификат|сертификаты]] от доверенных центров сертификации. Можно, конечно, использовать самоподписанный сертификат, но, во-первых, не все серверы будут их принимать - а значит, к ним не получится подключиться и общаться с их пользователями, а во-вторых, в подключающихся клиентах будут появляться сообщения о недоверенном сертификате, что тоже будет доставлять определенные неудобства. Поэтому стоит воспользоваться услугами одного из популярных бесплатных центров сертификации - [https://letsencrypt.org Let's Encrypt].<br />
<br />
Для работы с сертификатами от Let's Encrypt в Debian есть специальный пакет - '''certbot''', поэтому установите его следующей командой:<br />
<br />
sudo apt-get install certbot<br />
<br />
Сертификаты от Let's Encrypt выдаются сроком на 3 месяца, поэтому в конце этого срока их нужно обновлять. Для подтверждения владения доменом, а также для автоматизации обновления сертификатов в дальнейшем со стороны Let's Encrypt делается запрос на веб-сервер для указанного домена, поэтому для полноценной работы стоит установить какой-нибудь популярный вариант и прописать там виртуальные хосты для нашего jabber-сервера, а также сервисов на нем (сертификаты будут делаться в том числе для сервисов). Пример конфигурации веб-сервера Apache для данного сервера:<br />
<br />
{{Hider hiding<br />
|title=apache_to_jabber_service_domains.conf<br />
|content=<pre><br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@jabberworld.info<br />
DocumentRoot /var/www/jabberworld.info/htdocs<br />
ServerName jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@upload.jabberworld.info<br />
DocumentRoot /var/www/upload.jabberworld.info/htdocs<br />
ServerName upload.jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@pubsub.jabberworld.info<br />
DocumentRoot /var/www/pubsub.jabberworld.info/htdocs<br />
ServerName pubsub.jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@conference.jabberworld.info<br />
DocumentRoot /var/www/conference.jabberworld.info/htdocs<br />
ServerName conference.jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@proxy.jabberworld.info<br />
DocumentRoot /var/www/proxy.jabberworld.info/htdocs<br />
ServerName proxy.jabberworld.info<br />
</VirtualHost><br />
</pre><br />
}}<br />
<br />
В каталогах сервера не обязательно должен быть какой-то контент, хотя, например, на основном домене можно разместить какую-то страничку, посвященную jabber-серверу, а на поддомене '''conference''' разместить чат-логи [[Конференции|конференций]]. Субдомен '''upload''' можно приспособить под загружаемые через HTTP Upload файлы, чтобы в дальнейшем их раздавал веб-сервер<ref name="http_upload">В таком случае ему нужно обеспечить доступ к каталогу '''/var/lib/prosody/http_upload/''' - а лучше указать опцию '''http_upload_path''' с путем за пределами домашнего каталога Prosody, плюс обеспечить нужные права веб-серверу, чтобы он мог читать файлы, загруженные через jabber-сервер. Такое решение имеет еще одно преимущество: разнообразные клиенты (не только Jabber) будут гораздо охотнее показывать превью для обычных HTTP/HTTPS-ссылок (т.е., на 80 или 443-м порту), а не тех, где контент отдается на "необычном" порту - вроде 5281 в данном примере.</ref>.<br />
<br />
После всех приготовлений<ref>Более подробно можно почитать тут: [[Свой сервер: подготовка веб-сервера и сертификатов]]</ref> создайте все необходимые сертификаты. Для этого воспользуйтесь следующими командами (выполнять надо от пользователя '''root'''):<br />
<br />
certbot certonly --webroot --webroot-path /var/www/EXAMPLE.COM/htdocs/ -d EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/conference.EXAMPLE.COM/htdocs/ -d conference.EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/upload.EXAMPLE.COM/htdocs/ -d upload.EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/pubsub.EXAMPLE.COM/htdocs/ -d pubsub.EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/proxy.EXAMPLE.COM/htdocs/ -d proxy.EXAMPLE.COM --rsa-key-size 4096<br />
<br />
В параметрах после '''--webroot-path''' указывается каталог веб-сервера для данного домена, а после '''-d''' - сам домен.<br />
<br />
После успешного выполнения команд будет выдана информация о созданном сертификате, в том числе 2 файла - цепочка ключей и приватный ключ - сохраните эти пути для дальнейшего использования, они нам еще пригодятся. Всего получится 10 файлов. certbot обновляет сертификаты автоматически, если срок их истечения составляет менее 30 дней - т.е., обновление происходит раз в 2 месяца.<br />
<br />
Так как Prosody работает от своего пользователя и не имеет доступа к сертификатам, созданным certbot от рута, то надо каким-то образом предоставить доступ ejabberd'у к сертификатам. Самым простым и корректным вариантом на сейчас является выполнение следующей команды от рута<ref>https://prosody.im/doc/letsencrypt</ref>:<br />
<br />
prosodyctl --root cert import /etc/letsencrypt/live<br />
<br />
В дальнейшем эту команду можно использовать после каждого обновления сертификатов - например, указав ее в качестве deploy hook для certbot.<br />
<br />
== Установка и настройка Prosody ==<br />
<br />
Все подготовительные процедуры завершены, теперь можно приступать непосредственно к установке и настройке своего jabber-сервера. Для поддержки звонков потребуется еще STUN/TURN-сервер - в качестве него будем использовать Coturn. В Debian установить Prosody с поддержкой MySQL<ref>На самом деле выбор MySQL обусловлен с одной стороны ее популярностью на веб-хостингах, с другой - возможностью хранить большие объемы данных, которые могут потребоваться, если вы хотите хранить, например, архив сообщений за длительное время. Однако если таких планов нет и это будет сервер для одного или нескольких человек со скромными запросами - то вполне можно обойтись Sqlite.</ref> и Coturn можно командой<br />
<br />
apt-get install prosody coturn lua-dbi-mysql<br />
<br />
'''Примечание''': на момент написания статьи самая последняя версия Prosody - 0.12.4 - доступна в репозитории '''backports'''. Чтобы установить сервер оттуда - добавьте к команде выше ключ '''-t bookworm-backports''' (само-собой, репозиторий должен быть прописан в '''/etc/apt/sources.list''').<br />
<br />
Настройку начнем с Coturn - она очень простая и сводится к включению сервиса в файле '''/etc/default/coturn''' опции '''TURNSERVER_ENABLED=1''', а также приведению конфиг-файла '''/etc/turnserver.conf''' к такому виду:<br />
<br />
{{Hider hiding<br />
|title=/etc/turnserver.conf<br />
|content=<pre><br />
listening-port=3478<br />
tls-listening-port=5349<br />
verbose<br />
use-auth-secret<br />
static-auth-secret=MYSUPERSECRETKEY<br />
userdb=/var/lib/turn/turndb<br />
realm=EXAMPLE.COM<br />
cert=/etc/turncerts/EXAMPLE.COM.fullchain.pem<br />
pkey=/etc/turncerts/EXAMPLE.COM.privkey.pem<br />
syslog<br />
prod<br />
no-multicast-peers<br />
no-cli<br />
no-tlsv1<br />
no-tlsv1_1<br />
no-rfc5780<br />
no-stun-backward-compatibility<br />
response-origin-only-with-rfc5780<br />
</pre><br />
}}<br />
<br />
Фактически, изменения в конфиге сводятся по-большей части к следующему:<br />
<br />
* Указываем прослушиваемые порты - они должны быть такие же, как были указаны в SRV-записях в DNS.<br />
* Включаем '''use-auth-secret''' и указываем придуманный '''ключ-пароль''' - его мы потом укажем в конфиг-файле у Prosody.<br />
* Указываем '''realm''' - домен и сертификат с ключом для него.<br />
<br />
Да, так как Coturn не может напрямую прочитать сертификаты из каталога Let's Encrypt - для правильной работы можно создать отдельный каталог, куда копировать сертификаты с нужными правами. В примере выше это '''/etc/turncerts'''. Команду копирования и изменения прав можно объединить в одном скрипте с командой копирования сертификатов для Prosody и вызывать этот скрипт в качестве deploy hook для Let's Encrypt (или просто по Cron'у, например, раз в неделю).<br />
<br />
Закончив правку конфиг-файла, перезапускаем TURN-сервер:<br />
<br />
systemctl restart coturn.service<br />
<br />
Теперь переходим к настройке Prosody. Как уже говорилось, под него есть множество разнообразных модулей. Для удобства добавления модулей добавьте следующие пакеты:<br />
<br />
apt-get install luarocks liblua5.4-dev lua-luaossl --no-install-recommends<br />
<br />
После чего можно сразу установить полезные модули:<br />
<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_admin_web # Поддержка WEB-интерфейса для управления сервером<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_vcard_muc # Поддержка vCard для конференций<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_muc_moderation # Модерирование конференций и возможность удалять спам<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_cloud_notify # Поддержка PUSH-уведомлений<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_cloud_notify_extensions # Дополнительные модули для PUSH<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_http_upload # Поддержка файлообмена через HTTP Upload<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_register_web # Поддержка регистрации через веб-страницу<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_muc_hats_adhoc # Указание дополнительных ролей в конференциях<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_muc_hats_api # См. выше<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_mam_adhoc # Возможность управлять настройками MAM-архива из jabber-клиента<br />
<br />
Конфигурационный файл у Prosody состоит из нескольких секций:<br />
* Общие параметры<br />
* Параметры виртуал-хоста<br />
* Параметры сервисов.<br />
<br />
Для удобства то, что относится к виртуал-хосту и его сервисам, вынесено в отдельный файл. Для включения нужного виртуал-хоста поместите симлинк на его конфиг в '''/etc/prosody/conf.d'''.<br />
<br />
{{Hider hiding<br />
|title=/etc/prosody/prosody.cfg.lua<br />
|content=<pre><br />
-- Prosody Example Configuration File<br />
--<br />
-- Information on configuring Prosody can be found on our<br />
-- website at https://prosody.im/doc/configure<br />
--<br />
-- Tip: You can check that the syntax of this file is correct<br />
-- when you have finished by running this command:<br />
-- prosodyctl check config<br />
-- If there are any errors, it will let you know what and where<br />
-- they are, otherwise it will keep quiet.<br />
--<br />
-- The only thing left to do is rename this file to remove the .dist ending, and fill in the<br />
-- blanks. Good luck, and happy Jabbering!<br />
<br />
<br />
---------- Server-wide settings ----------<br />
-- Settings in this section apply to the whole server and are the default settings<br />
-- for any virtual hosts<br />
<br />
-- This is a (by default, empty) list of accounts that are admins<br />
-- for the server. Note that you must create the accounts separately<br />
-- (see https://prosody.im/doc/creating_accounts for info)<br />
-- Example: admins = { "user1@example.com", "user2@example.net" }<br />
admins = {<br />
"admin@EXAMPLE.COM"<br />
}<br />
<br />
-- This option allows you to specify additional locations where Prosody<br />
-- will search first for modules. For additional modules you can install, see<br />
-- the community module repository at https://modules.prosody.im/<br />
-- For a local administrator it's common to place local modifications<br />
-- under /usr/local/ hierarchy:<br />
plugin_paths = {<br />
"/usr/lib/prosody/modules",<br />
"/var/lib/prosody/custom_plugins/"<br />
}<br />
<br />
-- This is the list of modules Prosody will load on startup.<br />
-- Documentation for bundled modules can be found at: https://prosody.im/doc/modules<br />
modules_enabled = {<br />
<br />
-- Generally required<br />
"disco"; -- Service discovery<br />
"roster"; -- Allow users to have a roster. Recommended ;)<br />
"saslauth"; -- Authentication for clients and servers. Recommended if you want to log in.<br />
"tls"; -- Add support for secure TLS on c2s/s2s connections<br />
<br />
-- Not essential, but recommended<br />
"blocklist"; -- Allow users to block communications with other users<br />
"bookmarks"; -- Synchronise the list of open rooms between clients<br />
"carbons"; -- Keep multiple online clients in sync<br />
"dialback"; -- Support for verifying remote servers using DNS<br />
"limits"; -- Enable bandwidth limiting for XMPP connections<br />
"pep"; -- Allow users to store public and private data in their account<br />
"private"; -- Legacy account storage mechanism (XEP-0049)<br />
"smacks"; -- Stream management and resumption (XEP-0198)<br />
"vcard4"; -- User profiles (stored in PEP)<br />
"vcard_legacy"; -- Conversion between legacy vCard and PEP Avatar, vcard<br />
<br />
-- Nice to have<br />
"csi_simple"; -- Simple but effective traffic optimizations for mobile devices<br />
--"invites"; -- Create and manage invites<br />
--"invites_adhoc"; -- Allow admins/users to create invitations via their client<br />
--"invites_register"; -- Allows invited users to create accounts<br />
"ping"; -- Replies to XMPP pings with pongs<br />
"register"; -- Allow users to register on this server using a client and change passwords<br />
"time"; -- Let others know the time here on this server<br />
"uptime"; -- Report how long server has been running<br />
"version"; -- Replies to server version requests<br />
"mam"; -- Store recent messages to allow multi-device synchronization<br />
"turn_external"; -- Provide external STUN/TURN service for e.g. audio/video calls<br />
<br />
-- Admin interfaces<br />
"admin_adhoc"; -- Allows administration via an XMPP client that supports ad-hoc commands<br />
"admin_shell"; -- Allow secure administration via 'prosodyctl shell'<br />
<br />
-- HTTP modules<br />
"bosh"; -- Enable BOSH clients, aka "Jabber over HTTP"<br />
--"http_openmetrics"; -- for exposing metrics to stats collectors<br />
"websocket"; -- XMPP over WebSockets<br />
<br />
-- Other specific functionality<br />
"posix"; -- POSIX functionality, sends server to background, enables syslog, etc.<br />
"announce"; -- Send announcement to all online users<br />
--"groups"; -- Shared roster support<br />
--"legacyauth"; -- Legacy authentication. Only used by some old clients and bots.<br />
--"mimicking"; -- Prevent address spoofing<br />
--"motd"; -- Send a message to users when they log in<br />
"s2s_bidi"; -- Bi-directional server-to-server (XEP-0288)<br />
"server_contact_info"; -- Publish contact information for this service<br />
"tombstones"; -- Prevent registration of deleted accounts<br />
"watchregistrations"; -- Alert admins of registrations<br />
"welcome"; -- Welcome users who register accounts<br />
<br />
"cloud_notify"; -- push support<br />
"cloud_notify_extensions"; -- meta-module that simply enables all the modules required to support Siskin or Snikket iOS on a Prosody server<br />
"register_web"; -- registrations via web interface<br />
"mam_adhoc"; -- allowing clients to change archiving preferences<br />
"throttle_presence"; -- automatically cuts down on presence traffic when clients indicate they are inactive<br />
"external_services"; -- calls<br />
"admin_adhoc"; -- ad-hoc administration of server<br />
}<br />
<br />
-- These modules are auto-loaded, but should you want<br />
-- to disable them then uncomment them here:<br />
modules_disabled = {<br />
-- "offline"; -- Store offline messages<br />
-- "c2s"; -- Handle client connections<br />
-- "s2s"; -- Handle server-to-server connections<br />
}<br />
<br />
-- Debian:<br />
-- Please, don't change this option since /run/prosody/<br />
-- is one of the few directories Prosody is allowed to write to<br />
--<br />
pidfile = "/run/prosody/prosody.pid";<br />
<br />
-- Server-to-server authentication<br />
-- Require valid certificates for server-to-server connections?<br />
-- If false, other methods such as dialback (DNS) may be used instead.<br />
<br />
s2s_secure_auth = true<br />
<br />
-- Some servers have invalid or self-signed certificates. You can list<br />
-- remote domains here that will not be required to authenticate using<br />
-- certificates. They will be authenticated using other methods instead,<br />
-- even when s2s_secure_auth is enabled.<br />
<br />
--s2s_insecure_domains = { "insecure.example" }<br />
<br />
-- Even if you disable s2s_secure_auth, you can still require valid<br />
-- certificates for some domains by specifying a list here.<br />
<br />
--s2s_secure_domains = { "jabber.org" }<br />
<br />
<br />
-- Rate limits<br />
-- Enable rate limits for incoming client and server connections. These help<br />
-- protect from excessive resource consumption and denial-of-service attacks.<br />
<br />
limits = {<br />
c2s = {<br />
rate = "3kb/s";<br />
};<br />
s2sin = {<br />
rate = "50kb/s";<br />
};<br />
}<br />
<br />
-- Authentication<br />
-- Select the authentication backend to use. The 'internal' providers<br />
-- use Prosody's configured data storage to store the authentication data.<br />
-- For more information see https://prosody.im/doc/authentication<br />
<br />
authentication = "internal_hashed"<br />
<br />
-- Many authentication providers, including the default one, allow you to<br />
-- create user accounts via Prosody's admin interfaces. For details, see the<br />
-- documentation at https://prosody.im/doc/creating_accounts<br />
<br />
<br />
-- Storage<br />
-- Select the storage backend to use. By default Prosody uses flat files<br />
-- in its configured data directory, but it also supports more backends<br />
-- through modules. An "sql" backend is included by default, but requires<br />
-- additional dependencies. See https://prosody.im/doc/storage for more info.<br />
<br />
storage = "sql" -- Default is "internal" (Debian: "sql" requires one of the<br />
-- lua-dbi-sqlite3, lua-dbi-mysql or lua-dbi-postgresql packages to work)<br />
<br />
-- For the "sql" backend, you can uncomment *one* of the below to configure:<br />
--sql = { driver = "SQLite3", database = "prosody.sqlite" } -- Default. 'database' is the filename.<br />
sql = { driver = "MySQL", database = "jabber_example_com", username = "jabberuser", password = "MYSECRETPASSWORD", host = "localhost" }<br />
--sql = { driver = "PostgreSQL", database = "prosody", username = "prosody", password = "secret", host = "localhost" }<br />
<br />
<br />
-- Archiving configuration<br />
-- If mod_mam is enabled, Prosody will store a copy of every message. This<br />
-- is used to synchronize conversations between multiple clients, even if<br />
-- they are offline. This setting controls how long Prosody will keep<br />
-- messages in the archive before removing them.<br />
<br />
archive_expires_after = "1w" -- Remove archived messages after 1 week<br />
max_archive_query_results = 20;<br />
<br />
-- You can also configure messages to be stored in-memory only. For more<br />
-- archiving options, see https://prosody.im/doc/modules/mod_mam<br />
<br />
<br />
-- Audio/video call relay (STUN/TURN)<br />
-- To ensure clients connected to the server can establish connections for<br />
-- low-latency media streaming (such as audio and video calls), it is<br />
-- recommended to run a STUN/TURN server for clients to use. If you do this,<br />
-- specify the details here so clients can discover it.<br />
-- Find more information at https://prosody.im/doc/turn<br />
<br />
-- Specify the address of the TURN service (you may use the same domain as XMPP)<br />
turn_external_host = "xmpp.EXAMPLE.COM"<br />
<br />
-- This secret must be set to the same value in both Prosody and the TURN server<br />
turn_external_secret = "MYSUPERSECRETKEY"<br />
<br />
<br />
-- Logging configuration<br />
-- For advanced logging see https://prosody.im/doc/logging<br />
--<br />
-- Debian:<br />
-- Logs info and higher to /var/log<br />
-- Logs errors to syslog also<br />
log = {<br />
-- Log files (change 'info' to 'debug' for debug logs):<br />
info = "/var/log/prosody/prosody.log";<br />
error = "/var/log/prosody/prosody.err";<br />
-- Syslog:<br />
{ levels = { "error" }; to = "syslog"; };<br />
}<br />
<br />
<br />
-- Uncomment to enable statistics<br />
-- For more info see https://prosody.im/doc/statistics<br />
statistics = "internal"<br />
<br />
<br />
-- Certificates<br />
-- Every virtual host and component needs a certificate so that clients and<br />
-- servers can securely verify its identity. Prosody will automatically load<br />
-- certificates/keys from the directory specified here.<br />
-- For more information, including how to use 'prosodyctl' to auto-import certificates<br />
-- (from e.g. Let's Encrypt) see https://prosody.im/doc/certificates<br />
<br />
-- Location of directory to find certificates in (relative to main config file):<br />
certificates = "certs"<br />
<br />
c2s_direct_tls_ports = { 5223 }<br />
s2s_direct_tls_ports = { 5270 }<br />
c2s_require_encryption = true<br />
s2s_require_encryption = true<br />
tls_profile = "intermediate" -- "modern" if you don't need TLS 1.2<br />
<br />
contact_info = {<br />
abuse = { "xmpp:admin@EXAMPLE.COM" };<br />
admin = { "xmpp:admin@EXAMPLE.COM" };<br />
feedback = { "xmpp:admin@EXAMPLE.COM" };<br />
support = { "https://EXAMPLE.COM", "xmpp:admin@EXAMPLE.COM" };<br />
}<br />
<br />
external_services = {<br />
{<br />
type = "stun",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "stun",<br />
transport = "udp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "turn",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "turn",<br />
transport = "udp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "stuns",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 5349<br />
}, {<br />
type = "turns",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 5349<br />
}<br />
}<br />
<br />
consider_websocket_secure = true<br />
consider_bosh_secure = true<br />
<br />
----------- Virtual hosts -----------<br />
-- You need to add a VirtualHost entry for each domain you wish Prosody to serve.<br />
-- Settings under each VirtualHost entry apply *only* to that host.<br />
-- It's customary to maintain VirtualHost entries in separate config files<br />
-- under /etc/prosody/conf.d/ directory. Examples of such config files can<br />
-- be found in /etc/prosody/conf.avail/ directory.<br />
<br />
------ Additional config files ------<br />
-- For organizational purposes you may prefer to add VirtualHost and<br />
-- Component definitions in their own config files. This line includes<br />
-- all config files in /etc/prosody/conf.d/<br />
<br />
-- VirtualHost "localhost"<br />
-- Prosody requires at least one enabled VirtualHost to function. You can<br />
-- safely remove or disable 'localhost' once you have added another.<br />
<br />
<br />
--VirtualHost "example.com"<br />
<br />
------ Components ------<br />
-- You can specify components to add hosts that provide special services,<br />
-- like multi-user conferences, and transports.<br />
-- For more information on components, see https://prosody.im/doc/components<br />
<br />
---Set up a MUC (multi-user chat) room server on conference.example.com:<br />
--Component "conference.example.com" "muc"<br />
--- Store MUC messages in an archive and allow users to access it<br />
--modules_enabled = { "muc_mam" }<br />
<br />
---Set up a file sharing component<br />
--Component "share.example.com" "http_file_share"<br />
<br />
---Set up an external component (default component port is 5347)<br />
--<br />
-- External components allow adding various services, such as gateways/<br />
-- bridges to non-XMPP networks and services. For more info<br />
-- see: https://prosody.im/doc/components#adding_an_external_component<br />
--<br />
--Component "gateway.example.com"<br />
-- component_secret = "password"<br />
<br />
Include "conf.d/*.cfg.lua"<br />
<br />
---------- End of the Prosody Configuration file ----------<br />
-- You usually **DO NOT** want to add settings here at the end, as they would<br />
-- only apply to the last defined VirtualHost or Component.<br />
--<br />
-- Settings for the global section should go higher up, before the first<br />
-- VirtualHost or Component line, while settings intended for specific hosts<br />
-- should go under the corresponding VirtualHost or Component line.<br />
--<br />
-- For more information see https://prosody.im/doc/configure<br />
<br />
</pre><br />
}}<br />
<br />
{{Hider hiding<br />
|title=Виртуал хост /etc/prosody/conf.avail/EXAMPLE.COM.cfg.lua<br />
|content=<pre><br />
-- Section for example.com<br />
<br />
VirtualHost "EXAMPLE.COM"<br />
enabled = true<br />
<br />
-- Assign this host a certificate for TLS, otherwise it would use the one<br />
-- set in the global section (if any).<br />
-- Note that old-style SSL on port 5223 only supports one certificate, and will always<br />
-- use the global one.<br />
ssl = {<br />
key = "/etc/prosody/certs/EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
<br />
modules_enabled = {<br />
"admin_web"<br />
}<br />
allow_registration = false -- Allow users to register new accounts via in-band<br />
<br />
------ Components ------<br />
-- You can specify components to add hosts that provide special services,<br />
-- like multi-user conferences, and transports.<br />
-- For more information on components, see http://prosody.im/doc/components<br />
<br />
<br />
-- Set up a SOCKS5 bytestream proxy for server-proxied file transfers:<br />
Component "proxy.EXAMPLE.COM" "proxy65"<br />
ssl = {<br />
key = "/etc/prosody/certs/proxy.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/proxy.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
-- proxy65_address = "proxy.EXAMPLE.COM"<br />
proxy65_acl = { "EXAMPLE.COM" }<br />
<br />
-- Set up a MUC (multi-user chat) room server on conference.example.com:<br />
Component "conference.EXAMPLE.COM" "muc"<br />
modules_enabled = {<br />
"muc_mam",<br />
"vcard_muc",<br />
"muc_moderation",<br />
"muc_hats_adhoc"<br />
}<br />
ssl = {<br />
key = "/etc/prosody/certs/conference.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/conference.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
muc_log_by_default = true<br />
muc_log_presences = false<br />
log_all_rooms = false<br />
muc_log_expires_after = "1w"<br />
muc_log_cleanup_interval = 4 * 60 * 60<br />
restrict_room_creation = "local"<br />
<br />
Component "upload.EXAMPLE.COM" "http_upload"<br />
ssl = {<br />
key = "/etc/prosody/certs/upload.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/upload.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
<br />
http_upload_file_size_limit = 1024*1024*10 -- 10 MB<br />
-- http_max_content_size = 1024*1024*30<br />
http_upload_quota = 1024*1024*250 -- 250 MB<br />
http_upload_expire_after = 60*60*24*7 -- 1 week<br />
<br />
Component "pubsub.EXAMPLE.COM" "pubsub"<br />
ssl = {<br />
key = "/etc/prosody/certs/pubsub.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/pubsub.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
</pre><br />
}}<br />
<br />
Файл конфигурации Prosody очень хорошо комментирован, поэтому рассмотрим ключевые моменты, а также опции, добавленные для дополнительно установленных модулей.<br />
<br />
* Первым в конфиг-файле идет [[Jabber ID]] будущего администратора - ему будут доступны команды управления сервером, а также будут присылаться различные уведомления.<br />
* В '''plugin_paths''' добавляется путь к каталогу с устанавливаемыми плагинами.<br />
* Далее идет обширный список модулей. Рассмотрим некоторые:<br />
** '''invites''' и сопутствующие ему модули позволяют сделать регистрацию по приглашениям. Однако есть одно но (на сейчас): это отключит обычную регистрацию. Поэтому какой вариант оставить - решайте сами.<br />
** '''turn_external''' позволит нам подключить настроенный ранее Coturn к Prosody для работы звонков.<br />
** '''cloud_notify''' включит поддержку PUSH-уведомлений.<br />
** '''register_web''' включает регистрацию через веб-страницу. Она доступна по адресу https://EXAMPLE.COM:5281/register_web. Штатно тут включена простенькая CAPTCHA, но можно использовать reCaptcha, для этого дополнительно необходимо будет указать ключи для этого сервиса.<br />
** '''admin_adhoc''' позволит выполнять ряд команд на сервере с JID'а администратора из тех клиентов, которые умеют [[Ad-Hoc]].<br />
* Далее следуют настройки, в которых можно усилить или ослабить проверки сертификатов для других серверов.<br />
* Следующей ключевой настройкой будет указание сервера баз данных. Как мы уже условились выше, для хранения данных сервера [[Свой сервер: подготовка базы данных|будем использовать MySQL или MariaDB]]. Prosody имеет весьма простую структуру базы и встроенную схему, поэтому дополнительных действий не требуется.<br />
* В '''archive_expires_after''' можем указать, как скоро нужно чистить архив сообщений для MAM. Для конференций есть отдельная настройка, она будет описана ниже.<br />
* В '''turn_external_host''' и '''turn_external_secret''' указывается адрес Coturn и тот самый ключ, который прописывали в '''/etc/turnserver.conf'''.<br />
* Далее - несколько опций касательно безопасности:<br />
** '''c2s_direct_tls_ports''' и '''s2s_direct_tls_ports''' включает работу с TLS-портами - они должны быть те же, что указывались в SRV-записях в DNS.<br />
** '''c2s_require_encryption''' и '''s2s_require_encryption''' означает использование исключительно шифрованных соединений между серверами, а также между сервером и клиентом.<br />
** '''tls_profile''' настраивает перечень шифров и протоколов, которые может использовать Prosody.<br />
* В '''contact_info''' можно перечислить контакты администратора и, например, адрес конференции поддержки сервера.<br />
* '''external_services''' описывает сервисы, которые предоставляет Coturn.<br />
<br />
На этом настройка основной части завершена и далее идет настройка виртуальных хостов и их сервисов:<br />
<br />
* В секции VirtualHost идет указание SSL-сертификатов для домена, а также разрешение регистрации через jabber-клиент и включение веб-интерфейса для управления сервером, который доступен по адресу https://example.com:5281/admin.<br />
<br />
Далее перечисляется несколько компонентов - сервисов для данного сервера. В показанном примере это [[конференции]], [[Передача файлов|proxy]], [[Передача файлов|HTTP Upload]] и [[PEP|pubsub]]. Для каждого из них указывается своя пара сертификатов и ключей.<br />
<br />
* Для '''proxy''' можно указать субдомен, на котором он будет доступен, а опция '''proxy65_acl''' перечисляет домены, которые смогут передавать файлы через этот прокси.<br />
* Для конференций включается поддержка MAM, модерирования и дополнительных ролей в конференциях. В опциях задается включение MAM по-умолчанию, время устаревания MAM-архива, а также правила доступа на создание новых конференций.<br />
* Для модуля '''http_upload''' перечисляются лимиты на размеры одиночных файлов, а также общий размер хранилища для пользователя и время устаревания загруженных файлов. Для Prosody сделано несколько реализаций HTTP Upload - например, можно переключиться на '''mod_http_file_share''', если mod_http_upload чем-то не устроит или вообще использовать [https://github.com/horazont/xmpp-http-upload внешний сервис] через '''http_upload_external'''.<br />
<br />
Закончив правку файлов конфигурации - перезапустите Prosody:<br />
<br />
systemctl restart prosody<br />
<br />
Теперь можете создать пользователя-администратора:<br />
<br />
prosodyctl adduser admin@EXAMPLE.COM<br />
<br />
А также проверить корректность конфигурации следующими командами:<br />
<br />
prosodyctl check config<br />
prosodyctl check certs<br />
prosodyctl check turn<br />
<br />
Во всех случаях в конце команда должна возвращать "'''All checks passed, congratulations!'''".<br />
<br />
==Сноски==<br />
<br />
<references/><br />
<br />
==Ссылки==<br />
<br />
* https://prosody.im - домашняя страница Prosody и [https://prosody.im/doc ссылка на документацию]<br />
* [https://open-networks.ru/d/67-prosody-im-v012x-ustanovka-i-nastroyka-xmpp-servera-coturn-fail2ban Очень подробное пользовательское руководство по настройке Prosody]<br />
* [https://www.8host.com/blog/ustanovka-prosody-v-ubuntu-18-04/ Еще одно руководство по установке и настройке]<br />
<br />
[[Category:Свой сервер]]</div>Rainhttps://jabberworld.info/index.php?title=%D0%A1%D0%B2%D0%BE%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80:_%D0%BF%D0%BE%D0%B4%D1%80%D0%BE%D0%B1%D0%BD%D0%BE%D0%B5_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B5_Prosody&diff=10218Свой сервер: подробное руководство по установке Prosody2023-11-02T19:08:14Z<p>Rain: /* Установка и настройка Prosody */</p>
<hr />
<div>В этой статье приводится пример настройки [[Prosody]] - одного из самых популярных и легковесных jabber-серверов. Для сервера написано просто-таки огромное число модулей на все случаи жизни, поэтому в руководстве, основанном на версии 0.12.4, будет показано подключение актуальных и популярных функций. В качестве сертификатов будем использовать Let's Encrypt - и все это на Debian GNU/Linux.<br />
<br />
Рассмотрим особенности данной конфигурации.<br />
<br />
__TOC__<br />
<br />
== [[ru_wikipedia:DNS|DNS-записи]] ==<br />
<br />
Хотя для базового варианта своего jabber-сервера вполне достаточно [[Регистрация доменного имени|бесплатного DynDNS-домена]], для полноценной конфигурации все же нужно обзавестись собственным доменом, где можно будет добавить все необходимые DNS-записи и сделать субдомены для сервисов. Выбор регистратора и покупка домена остается за рамками данной статьи, тут только приводятся шаги, которые надо сделать после покупки домена в его админке.<br />
<br />
Всего понадобится около 15 записей в DNS:<br />
<br />
# Для удобства, чтобы в случае миграции сервера с одного IP на другой не приходилось переписывать все записи, стоит завести для него субдомен, который будет ссылаться на нужный IP с помощью А-записи (или 2 таких субдомена в случае использования IPv4+IPv6 - один с A-записью, а второй с AAAA), а все остальные записи сделать CNAME-алиасами для него. Например, для данного сервера ('''jabberworld.info''') сделаны 2 субдомена '''xmpp.jabberworld.info''', ссылающиеся на IPv4 и IPv6-адреса.<br />
# Создаем субдомены для необходимых сервисов сервера<ref>Да, если планируется использовать, например, конференции исключительно локально, то можно обойтись и без DNS-записей - сервер и так знает, куда ему подключаться, так как он этот сервис и предоставляет. Но если хочется полноценный сервис, с которым смогут взаимодействовать и другие сервера - то все же потребуются указанные записи в DNS.</ref> - '''conference''' (для [[Конференции|конференций]]), '''proxy''' (прокси для прямой [[Передача файлов|передачи файлов]]), '''pubsub''' (сервисы типа "Публикация/подписка", где может сохраняться самая разная информация) и '''upload''' (сервис для [[Передача файлов|передачи файлов]] через HTTP Upload). Все эти записи создаем как CNAME на наш субдомен из 1-го пункта.<br />
# Создаем ряд SRV-записей для нашего основного домена - они показывают, где именно какой сервис находится. Конечно, если у вас все на одном адресе, то будет работать и так, но мы ведь решили все делать правильно, верно? Итак, нужны такие SRV-записи:<br />
<br />
:: '''_xmpp-client._tcp.EXAMPLE.COM''' (порт '''5222''') - чтобы указать, куда подключаться [[Клиенты Jabber|jabber-клиенту]]<br />
:: '''_xmpps-client._tcp.EXAMPLE.COM''' (порт '''5223''') - аналогичная запись для [https://xmpp.org/extensions/xep-0368.html TLS-подключений клиентов]<br />
:: '''_xmpp-server._tcp.EXAMPLE.COM''' (порт '''5269''') - чтобы указать, куда подключаться [[Публичные серверы Jabber|jabber-серверу]]<br />
:: '''_xmpps-server._tcp.EXAMPLE.COM''' (порт '''5270''') - аналогичная запись для [https://xmpp.org/extensions/xep-0368.html TLS-подключений серверов].<br />
<br />
:: Записи ниже служат для работы сервиса аудио/видеозвонков через jabber<ref name="avcalls">https://prosody.im/doc/turn</ref>. Для максимальной совместимости будем использовать как [[ru_wikipedia:STUN|STUN]], так и [[ru_wikipedia:Traversal Using Relay NAT|TURN]] - все возможные варианты:<br />
<br />
:: '''_stun._tcp.EXAMPLE.COM''' (порт '''3478''') - [[ru_wikipedia:STUN|STUN]] через [[ru_wikipedia:TCP|TCP]]<br />
:: '''_stun._udp.EXAMPLE.COM''' (порт '''3478''') - STUN через UDP<br />
:: '''_stuns._tcp.EXAMPLE.COM''' (порт '''5349''') - шифрованный STUN через TCP<br />
:: '''_turn._tcp.EXAMPLE.COM''' (порт '''3478''') - [[ru_wikipedia:Traversal Using Relay NAT|TURN]] через [[ru_wikipedia:TCP|TCP]]<br />
:: '''_turn._udp.EXAMPLE.COM''' (порт '''3478''') - TURN через UDP<br />
:: '''_turns._tcp.EXAMPLE.COM''' (порт '''5349''') - шифрованный TURN через TCP<br />
<br />
:: Во всех случаях target'ом для записей служит наш алиас из первого пункта.<br />
{{Hider hiding|<br />
|title=Для продвинутых<br />
|content=<br />
:: Самый полный вариант подразумевает в том числе создание SRV-записей для каждого из сервисов-субдоменов - тех, к которым будут подключаться сторонние серверы. Например, для конференций это может выглядеть так:<br />
<br />
:: '''_xmpp-server._tcp.conference.EXAMPLE.COM''' (порт '''5269''')<br />
:: '''_xmpps-server._tcp.conference.EXAMPLE.COM''' (порт '''5270''' для TLS)<br />
<br />
:: Но, как уже говорилось выше, это для совсем уж необычных конфигураций - когда сам домен указывает на один адрес (например, там может работать веб-сервер, предоставляющий чат-логи на сайте https://conference.example.com), а сам jabber-сервер при этом находится совершенно на другом.<br />
}}<br />
Вот как выглядят записи для данного сервера в админке бесплатного DNS-провайдера [https://dns.he.net Hurricane Electric]:<br />
<br />
<center>[[Файл:Jabber srv.png]]</center><br />
<br />
== Сертификаты ==<br />
<br />
<br />
В современном мире стандартной практикой является шифрование соединений, а для этого, в свою очередь, требуются [[ru_wikipedia:Цифровой сертификат|сертификаты]] от доверенных центров сертификации. Можно, конечно, использовать самоподписанный сертификат, но, во-первых, не все серверы будут их принимать - а значит, к ним не получится подключиться и общаться с их пользователями, а во-вторых, в подключающихся клиентах будут появляться сообщения о недоверенном сертификате, что тоже будет доставлять определенные неудобства. Поэтому стоит воспользоваться услугами одного из популярных бесплатных центров сертификации - [https://letsencrypt.org Let's Encrypt].<br />
<br />
Для работы с сертификатами от Let's Encrypt в Debian есть специальный пакет - '''certbot''', поэтому установите его следующей командой:<br />
<br />
sudo apt-get install certbot<br />
<br />
Сертификаты от Let's Encrypt выдаются сроком на 3 месяца, поэтому в конце этого срока их нужно обновлять. Для подтверждения владения доменом, а также для автоматизации обновления сертификатов в дальнейшем со стороны Let's Encrypt делается запрос на веб-сервер для указанного домена, поэтому для полноценной работы стоит установить какой-нибудь популярный вариант и прописать там виртуальные хосты для нашего jabber-сервера, а также сервисов на нем (сертификаты будут делаться в том числе для сервисов). Пример конфигурации веб-сервера Apache для данного сервера:<br />
<br />
{{Hider hiding<br />
|title=apache_to_jabber_service_domains.conf<br />
|content=<pre><br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@jabberworld.info<br />
DocumentRoot /var/www/jabberworld.info/htdocs<br />
ServerName jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@upload.jabberworld.info<br />
DocumentRoot /var/www/upload.jabberworld.info/htdocs<br />
ServerName upload.jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@pubsub.jabberworld.info<br />
DocumentRoot /var/www/pubsub.jabberworld.info/htdocs<br />
ServerName pubsub.jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@conference.jabberworld.info<br />
DocumentRoot /var/www/conference.jabberworld.info/htdocs<br />
ServerName conference.jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@proxy.jabberworld.info<br />
DocumentRoot /var/www/proxy.jabberworld.info/htdocs<br />
ServerName proxy.jabberworld.info<br />
</VirtualHost><br />
</pre><br />
}}<br />
<br />
В каталогах сервера не обязательно должен быть какой-то контент, хотя, например, на основном домене можно разместить какую-то страничку, посвященную jabber-серверу, а на поддомене '''conference''' разместить чат-логи [[Конференции|конференций]]. Субдомен '''upload''' можно приспособить под загружаемые через HTTP Upload файлы, чтобы в дальнейшем их раздавал веб-сервер<ref name="http_upload">В таком случае ему нужно обеспечить доступ к каталогу '''/var/lib/prosody/http_upload/''' - а лучше указать опцию '''http_upload_path''' с путем за пределами домашнего каталога Prosody, плюс обеспечить нужные права веб-серверу, чтобы он мог читать файлы, загруженные через jabber-сервер. Такое решение имеет еще одно преимущество: разнообразные клиенты (не только Jabber) будут гораздо охотнее показывать превью для обычных HTTP/HTTPS-ссылок (т.е., на 80 или 443-м порту), а не тех, где контент отдается на "необычном" порту - вроде 5281 в данном примере.</ref>.<br />
<br />
После всех приготовлений<ref>Более подробно можно почитать тут: [[Свой сервер: подготовка веб-сервера и сертификатов]]</ref> создайте все необходимые сертификаты. Для этого воспользуйтесь следующими командами (выполнять надо от пользователя '''root'''):<br />
<br />
certbot certonly --webroot --webroot-path /var/www/EXAMPLE.COM/htdocs/ -d EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/conference.EXAMPLE.COM/htdocs/ -d conference.EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/upload.EXAMPLE.COM/htdocs/ -d upload.EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/pubsub.EXAMPLE.COM/htdocs/ -d pubsub.EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/proxy.EXAMPLE.COM/htdocs/ -d proxy.EXAMPLE.COM --rsa-key-size 4096<br />
<br />
В параметрах после '''--webroot-path''' указывается каталог веб-сервера для данного домена, а после '''-d''' - сам домен.<br />
<br />
После успешного выполнения команд будет выдана информация о созданном сертификате, в том числе 2 файла - цепочка ключей и приватный ключ - сохраните эти пути для дальнейшего использования, они нам еще пригодятся. Всего получится 10 файлов. certbot обновляет сертификаты автоматически, если срок их истечения составляет менее 30 дней - т.е., обновление происходит раз в 2 месяца.<br />
<br />
Так как Prosody работает от своего пользователя и не имеет доступа к сертификатам, созданным certbot от рута, то надо каким-то образом предоставить доступ ejabberd'у к сертификатам. Самым простым и корректным вариантом на сейчас является выполнение следующей команды от рута<ref>https://prosody.im/doc/letsencrypt</ref>:<br />
<br />
prosodyctl --root cert import /etc/letsencrypt/live<br />
<br />
В дальнейшем эту команду можно использовать после каждого обновления сертификатов - например, указав ее в качестве deploy hook для certbot.<br />
<br />
== Установка и настройка Prosody ==<br />
<br />
Все подготовительные процедуры завершены, теперь можно приступать непосредственно к установке и настройке своего jabber-сервера. Для поддержки звонков потребуется еще STUN/TURN-сервер - в качестве него будем использовать Coturn. В Debian установить Prosody с поддержкой MySQL<ref>На самом деле выбор MySQL обусловлен с одной стороны ее популярностью на веб-хостингах, с другой - возможностью хранить большие объемы данных, которые могут потребоваться, если вы хотите хранить, например, архив сообщений за длительное время. Однако если таких планов нет и это будет сервер для одного или нескольких человек со скромными запросами - то вполне можно обойтись Sqlite.</ref> и Coturn можно командой<br />
<br />
apt-get install prosody coturn lua-dbi-mysql<br />
<br />
'''Примечание''': на момент написания статьи самая последняя версия Prosody - 0.12.4 - доступна в репозитории '''backports'''. Чтобы установить сервер оттуда - добавьте к команде выше ключ '''-t bookworm-backports''' (само-собой, репозиторий должен быть прописан в '''/etc/apt/sources.list''').<br />
<br />
Настройку начнем с Coturn - она очень простая и сводится к включению сервиса в файле '''/etc/default/coturn''' опции '''TURNSERVER_ENABLED=1''', а также приведению конфиг-файла '''/etc/turnserver.conf''' к такому виду:<br />
<br />
{{Hider hiding<br />
|title=/etc/turnserver.conf<br />
|content=<pre><br />
listening-port=3478<br />
tls-listening-port=5349<br />
verbose<br />
use-auth-secret<br />
static-auth-secret=MYSUPERSECRETKEY<br />
userdb=/var/lib/turn/turndb<br />
realm=EXAMPLE.COM<br />
cert=/etc/turncerts/EXAMPLE.COM.fullchain.pem<br />
pkey=/etc/turncerts/EXAMPLE.COM.privkey.pem<br />
syslog<br />
prod<br />
no-multicast-peers<br />
no-cli<br />
no-tlsv1<br />
no-tlsv1_1<br />
no-rfc5780<br />
no-stun-backward-compatibility<br />
response-origin-only-with-rfc5780<br />
</pre><br />
}}<br />
<br />
Фактически, изменения в конфиге сводятся по-большей части к следующему:<br />
<br />
* Указываем прослушиваемые порты - они должны быть такие же, как были указаны в SRV-записях в DNS.<br />
* Включаем '''use-auth-secret''' и указываем придуманный '''ключ-пароль''' - его мы потом укажем в конфиг-файле у Prosody.<br />
* Указываем '''realm''' - домен и сертификат с ключом для него.<br />
<br />
Да, так как Coturn не может напрямую прочитать сертификаты из каталога Let's Encrypt - для правильной работы можно создать отдельный каталог, куда копировать сертификаты с нужными правами. В примере выше это '''/etc/turncerts'''. Команду копирования и изменения прав можно объединить в одном скрипте с командой копирования сертификатов для Prosody и вызывать этот скрипт в качестве deploy hook для Let's Encrypt (или просто по Cron'у, например, раз в неделю).<br />
<br />
Закончив правку конфиг-файла, перезапускаем TURN-сервер:<br />
<br />
systemctl restart coturn.service<br />
<br />
Теперь переходим к настройке Prosody. Как уже говорилось, под него есть множество разнообразных модулей. Для удобства добавления модулей добавьте следующие пакеты:<br />
<br />
apt-get install luarocks liblua5.4-dev lua-luaossl --no-install-recommends<br />
<br />
После чего можно сразу установить полезные модули:<br />
<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_admin_web # Поддержка WEB-интерфейса для управления сервером<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_vcard_muc # Поддержка vCard для конференций<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_muc_moderation # Модерирование конференций и возможность удалять спам<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_cloud_notify # Поддержка PUSH-уведомлений<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_cloud_notify_extensions # Дополнительные модули для PUSH<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_http_upload # Поддержка файлообмена через HTTP Upload<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_register_web # Поддержка регистрации через веб-страницу<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_muc_hats_adhoc # Указание дополнительных ролей в конференциях<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_muc_hats_api # См. выше<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_mam_adhoc # Возможность управлять настройками MAM-архива из jabber-клиента<br />
<br />
Конфигурационный файл у Prosody состоит из нескольких секций:<br />
* Общие параметры<br />
* Параметры виртуал-хоста<br />
* Параметры сервисов.<br />
<br />
Для удобства то, что относится к виртуал-хосту и его сервисам, вынесено в отдельный файл. Для включения нужного виртуал-хоста поместите симлинк на его конфиг в '''/etc/prosody/conf.d'''.<br />
<br />
{{Hider hiding<br />
|title=/etc/prosody/prosody.cfg.lua<br />
|content=<pre><br />
-- Prosody Example Configuration File<br />
--<br />
-- Information on configuring Prosody can be found on our<br />
-- website at https://prosody.im/doc/configure<br />
--<br />
-- Tip: You can check that the syntax of this file is correct<br />
-- when you have finished by running this command:<br />
-- prosodyctl check config<br />
-- If there are any errors, it will let you know what and where<br />
-- they are, otherwise it will keep quiet.<br />
--<br />
-- The only thing left to do is rename this file to remove the .dist ending, and fill in the<br />
-- blanks. Good luck, and happy Jabbering!<br />
<br />
<br />
---------- Server-wide settings ----------<br />
-- Settings in this section apply to the whole server and are the default settings<br />
-- for any virtual hosts<br />
<br />
-- This is a (by default, empty) list of accounts that are admins<br />
-- for the server. Note that you must create the accounts separately<br />
-- (see https://prosody.im/doc/creating_accounts for info)<br />
-- Example: admins = { "user1@example.com", "user2@example.net" }<br />
admins = {<br />
"admin@EXAMPLE.COM"<br />
}<br />
<br />
-- This option allows you to specify additional locations where Prosody<br />
-- will search first for modules. For additional modules you can install, see<br />
-- the community module repository at https://modules.prosody.im/<br />
-- For a local administrator it's common to place local modifications<br />
-- under /usr/local/ hierarchy:<br />
plugin_paths = {<br />
"/usr/lib/prosody/modules",<br />
"/var/lib/prosody/custom_plugins/"<br />
}<br />
<br />
-- This is the list of modules Prosody will load on startup.<br />
-- Documentation for bundled modules can be found at: https://prosody.im/doc/modules<br />
modules_enabled = {<br />
<br />
-- Generally required<br />
"disco"; -- Service discovery<br />
"roster"; -- Allow users to have a roster. Recommended ;)<br />
"saslauth"; -- Authentication for clients and servers. Recommended if you want to log in.<br />
"tls"; -- Add support for secure TLS on c2s/s2s connections<br />
<br />
-- Not essential, but recommended<br />
"blocklist"; -- Allow users to block communications with other users<br />
"bookmarks"; -- Synchronise the list of open rooms between clients<br />
"carbons"; -- Keep multiple online clients in sync<br />
"dialback"; -- Support for verifying remote servers using DNS<br />
"limits"; -- Enable bandwidth limiting for XMPP connections<br />
"pep"; -- Allow users to store public and private data in their account<br />
"private"; -- Legacy account storage mechanism (XEP-0049)<br />
"smacks"; -- Stream management and resumption (XEP-0198)<br />
"vcard4"; -- User profiles (stored in PEP)<br />
"vcard_legacy"; -- Conversion between legacy vCard and PEP Avatar, vcard<br />
<br />
-- Nice to have<br />
"csi_simple"; -- Simple but effective traffic optimizations for mobile devices<br />
--"invites"; -- Create and manage invites<br />
--"invites_adhoc"; -- Allow admins/users to create invitations via their client<br />
--"invites_register"; -- Allows invited users to create accounts<br />
"ping"; -- Replies to XMPP pings with pongs<br />
"register"; -- Allow users to register on this server using a client and change passwords<br />
"time"; -- Let others know the time here on this server<br />
"uptime"; -- Report how long server has been running<br />
"version"; -- Replies to server version requests<br />
"mam"; -- Store recent messages to allow multi-device synchronization<br />
"turn_external"; -- Provide external STUN/TURN service for e.g. audio/video calls<br />
<br />
-- Admin interfaces<br />
"admin_adhoc"; -- Allows administration via an XMPP client that supports ad-hoc commands<br />
"admin_shell"; -- Allow secure administration via 'prosodyctl shell'<br />
<br />
-- HTTP modules<br />
"bosh"; -- Enable BOSH clients, aka "Jabber over HTTP"<br />
--"http_openmetrics"; -- for exposing metrics to stats collectors<br />
"websocket"; -- XMPP over WebSockets<br />
<br />
-- Other specific functionality<br />
"posix"; -- POSIX functionality, sends server to background, enables syslog, etc.<br />
"announce"; -- Send announcement to all online users<br />
--"groups"; -- Shared roster support<br />
--"legacyauth"; -- Legacy authentication. Only used by some old clients and bots.<br />
--"mimicking"; -- Prevent address spoofing<br />
--"motd"; -- Send a message to users when they log in<br />
"s2s_bidi"; -- Bi-directional server-to-server (XEP-0288)<br />
"server_contact_info"; -- Publish contact information for this service<br />
"tombstones"; -- Prevent registration of deleted accounts<br />
"watchregistrations"; -- Alert admins of registrations<br />
"welcome"; -- Welcome users who register accounts<br />
<br />
"cloud_notify"; -- push support<br />
"cloud_notify_extensions"; -- meta-module that simply enables all the modules required to support Siskin or Snikket iOS on a Prosody server<br />
"register_web"; -- registrations via web interface<br />
"mam_adhoc"; -- allowing clients to change archiving preferences<br />
"throttle_presence"; -- automatically cuts down on presence traffic when clients indicate they are inactive<br />
"external_services"; -- calls<br />
"admin_adhoc"; -- ad-hoc administration of server<br />
}<br />
<br />
-- These modules are auto-loaded, but should you want<br />
-- to disable them then uncomment them here:<br />
modules_disabled = {<br />
-- "offline"; -- Store offline messages<br />
-- "c2s"; -- Handle client connections<br />
-- "s2s"; -- Handle server-to-server connections<br />
}<br />
<br />
-- Debian:<br />
-- Please, don't change this option since /run/prosody/<br />
-- is one of the few directories Prosody is allowed to write to<br />
--<br />
pidfile = "/run/prosody/prosody.pid";<br />
<br />
-- Server-to-server authentication<br />
-- Require valid certificates for server-to-server connections?<br />
-- If false, other methods such as dialback (DNS) may be used instead.<br />
<br />
s2s_secure_auth = true<br />
<br />
-- Some servers have invalid or self-signed certificates. You can list<br />
-- remote domains here that will not be required to authenticate using<br />
-- certificates. They will be authenticated using other methods instead,<br />
-- even when s2s_secure_auth is enabled.<br />
<br />
--s2s_insecure_domains = { "insecure.example" }<br />
<br />
-- Even if you disable s2s_secure_auth, you can still require valid<br />
-- certificates for some domains by specifying a list here.<br />
<br />
--s2s_secure_domains = { "jabber.org" }<br />
<br />
<br />
-- Rate limits<br />
-- Enable rate limits for incoming client and server connections. These help<br />
-- protect from excessive resource consumption and denial-of-service attacks.<br />
<br />
limits = {<br />
c2s = {<br />
rate = "3kb/s";<br />
};<br />
s2sin = {<br />
rate = "50kb/s";<br />
};<br />
}<br />
<br />
-- Authentication<br />
-- Select the authentication backend to use. The 'internal' providers<br />
-- use Prosody's configured data storage to store the authentication data.<br />
-- For more information see https://prosody.im/doc/authentication<br />
<br />
authentication = "internal_hashed"<br />
<br />
-- Many authentication providers, including the default one, allow you to<br />
-- create user accounts via Prosody's admin interfaces. For details, see the<br />
-- documentation at https://prosody.im/doc/creating_accounts<br />
<br />
<br />
-- Storage<br />
-- Select the storage backend to use. By default Prosody uses flat files<br />
-- in its configured data directory, but it also supports more backends<br />
-- through modules. An "sql" backend is included by default, but requires<br />
-- additional dependencies. See https://prosody.im/doc/storage for more info.<br />
<br />
storage = "sql" -- Default is "internal" (Debian: "sql" requires one of the<br />
-- lua-dbi-sqlite3, lua-dbi-mysql or lua-dbi-postgresql packages to work)<br />
<br />
-- For the "sql" backend, you can uncomment *one* of the below to configure:<br />
--sql = { driver = "SQLite3", database = "prosody.sqlite" } -- Default. 'database' is the filename.<br />
sql = { driver = "MySQL", database = "jabber_example_com", username = "jabberuser", password = "MYSECRETPASSWORD", host = "localhost" }<br />
--sql = { driver = "PostgreSQL", database = "prosody", username = "prosody", password = "secret", host = "localhost" }<br />
<br />
<br />
-- Archiving configuration<br />
-- If mod_mam is enabled, Prosody will store a copy of every message. This<br />
-- is used to synchronize conversations between multiple clients, even if<br />
-- they are offline. This setting controls how long Prosody will keep<br />
-- messages in the archive before removing them.<br />
<br />
archive_expires_after = "1w" -- Remove archived messages after 1 week<br />
max_archive_query_results = 20;<br />
<br />
-- You can also configure messages to be stored in-memory only. For more<br />
-- archiving options, see https://prosody.im/doc/modules/mod_mam<br />
<br />
<br />
-- Audio/video call relay (STUN/TURN)<br />
-- To ensure clients connected to the server can establish connections for<br />
-- low-latency media streaming (such as audio and video calls), it is<br />
-- recommended to run a STUN/TURN server for clients to use. If you do this,<br />
-- specify the details here so clients can discover it.<br />
-- Find more information at https://prosody.im/doc/turn<br />
<br />
-- Specify the address of the TURN service (you may use the same domain as XMPP)<br />
turn_external_host = "xmpp.EXAMPLE.COM"<br />
<br />
-- This secret must be set to the same value in both Prosody and the TURN server<br />
turn_external_secret = "MYSUPERSECRETKEY"<br />
<br />
<br />
-- Logging configuration<br />
-- For advanced logging see https://prosody.im/doc/logging<br />
--<br />
-- Debian:<br />
-- Logs info and higher to /var/log<br />
-- Logs errors to syslog also<br />
log = {<br />
-- Log files (change 'info' to 'debug' for debug logs):<br />
info = "/var/log/prosody/prosody.log";<br />
error = "/var/log/prosody/prosody.err";<br />
-- Syslog:<br />
{ levels = { "error" }; to = "syslog"; };<br />
}<br />
<br />
<br />
-- Uncomment to enable statistics<br />
-- For more info see https://prosody.im/doc/statistics<br />
statistics = "internal"<br />
<br />
<br />
-- Certificates<br />
-- Every virtual host and component needs a certificate so that clients and<br />
-- servers can securely verify its identity. Prosody will automatically load<br />
-- certificates/keys from the directory specified here.<br />
-- For more information, including how to use 'prosodyctl' to auto-import certificates<br />
-- (from e.g. Let's Encrypt) see https://prosody.im/doc/certificates<br />
<br />
-- Location of directory to find certificates in (relative to main config file):<br />
certificates = "certs"<br />
<br />
c2s_direct_tls_ports = { 5223 }<br />
s2s_direct_tls_ports = { 5270 }<br />
c2s_require_encryption = true<br />
s2s_require_encryption = true<br />
tls_profile = "intermediate" -- "modern" if you don't need TLS 1.2<br />
<br />
contact_info = {<br />
abuse = { "xmpp:admin@EXAMPLE.COM" };<br />
admin = { "xmpp:admin@EXAMPLE.COM" };<br />
feedback = { "xmpp:admin@EXAMPLE.COM" };<br />
support = { "https://EXAMPLE.COM", "xmpp:admin@EXAMPLE.COM" };<br />
}<br />
<br />
external_services = {<br />
{<br />
type = "stun",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "stun",<br />
transport = "udp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "turn",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "turn",<br />
transport = "udp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "stuns",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 5349<br />
}, {<br />
type = "turns",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 5349<br />
}<br />
}<br />
<br />
consider_websocket_secure = true<br />
consider_bosh_secure = true<br />
<br />
----------- Virtual hosts -----------<br />
-- You need to add a VirtualHost entry for each domain you wish Prosody to serve.<br />
-- Settings under each VirtualHost entry apply *only* to that host.<br />
-- It's customary to maintain VirtualHost entries in separate config files<br />
-- under /etc/prosody/conf.d/ directory. Examples of such config files can<br />
-- be found in /etc/prosody/conf.avail/ directory.<br />
<br />
------ Additional config files ------<br />
-- For organizational purposes you may prefer to add VirtualHost and<br />
-- Component definitions in their own config files. This line includes<br />
-- all config files in /etc/prosody/conf.d/<br />
<br />
-- VirtualHost "localhost"<br />
-- Prosody requires at least one enabled VirtualHost to function. You can<br />
-- safely remove or disable 'localhost' once you have added another.<br />
<br />
<br />
--VirtualHost "example.com"<br />
<br />
------ Components ------<br />
-- You can specify components to add hosts that provide special services,<br />
-- like multi-user conferences, and transports.<br />
-- For more information on components, see https://prosody.im/doc/components<br />
<br />
---Set up a MUC (multi-user chat) room server on conference.example.com:<br />
--Component "conference.example.com" "muc"<br />
--- Store MUC messages in an archive and allow users to access it<br />
--modules_enabled = { "muc_mam" }<br />
<br />
---Set up a file sharing component<br />
--Component "share.example.com" "http_file_share"<br />
<br />
---Set up an external component (default component port is 5347)<br />
--<br />
-- External components allow adding various services, such as gateways/<br />
-- bridges to non-XMPP networks and services. For more info<br />
-- see: https://prosody.im/doc/components#adding_an_external_component<br />
--<br />
--Component "gateway.example.com"<br />
-- component_secret = "password"<br />
<br />
Include "conf.d/*.cfg.lua"<br />
<br />
---------- End of the Prosody Configuration file ----------<br />
-- You usually **DO NOT** want to add settings here at the end, as they would<br />
-- only apply to the last defined VirtualHost or Component.<br />
--<br />
-- Settings for the global section should go higher up, before the first<br />
-- VirtualHost or Component line, while settings intended for specific hosts<br />
-- should go under the corresponding VirtualHost or Component line.<br />
--<br />
-- For more information see https://prosody.im/doc/configure<br />
<br />
</pre><br />
}}<br />
<br />
{{Hider hiding<br />
|title=Виртуал хост /etc/prosody/conf.avail/EXAMPLE.COM.cfg.lua<br />
|content=<pre><br />
-- Section for example.com<br />
<br />
VirtualHost "EXAMPLE.COM"<br />
enabled = true<br />
<br />
-- Assign this host a certificate for TLS, otherwise it would use the one<br />
-- set in the global section (if any).<br />
-- Note that old-style SSL on port 5223 only supports one certificate, and will always<br />
-- use the global one.<br />
ssl = {<br />
key = "/etc/prosody/certs/EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
<br />
modules_enabled = {<br />
"admin_web"<br />
}<br />
allow_registration = false -- Allow users to register new accounts via in-band<br />
<br />
------ Components ------<br />
-- You can specify components to add hosts that provide special services,<br />
-- like multi-user conferences, and transports.<br />
-- For more information on components, see http://prosody.im/doc/components<br />
<br />
<br />
-- Set up a SOCKS5 bytestream proxy for server-proxied file transfers:<br />
Component "proxy.EXAMPLE.COM" "proxy65"<br />
ssl = {<br />
key = "/etc/prosody/certs/proxy.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/proxy.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
-- proxy65_address = "proxy.EXAMPLE.COM"<br />
proxy65_acl = { "EXAMPLE.COM" }<br />
<br />
-- Set up a MUC (multi-user chat) room server on conference.example.com:<br />
Component "conference.EXAMPLE.COM" "muc"<br />
modules_enabled = {<br />
"muc_mam",<br />
"vcard_muc",<br />
"muc_moderation",<br />
"muc_hats_adhoc"<br />
}<br />
ssl = {<br />
key = "/etc/prosody/certs/conference.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/conference.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
muc_log_by_default = true<br />
muc_log_presences = false<br />
log_all_rooms = false<br />
muc_log_expires_after = "1w"<br />
muc_log_cleanup_interval = 4 * 60 * 60<br />
restrict_room_creation = "local"<br />
<br />
Component "upload.EXAMPLE.COM" "http_upload"<br />
ssl = {<br />
key = "/etc/prosody/certs/upload.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/upload.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
<br />
http_upload_file_size_limit = 1024*1024*10 -- 10 MB<br />
-- http_max_content_size = 1024*1024*30<br />
http_upload_quota = 1024*1024*250 -- 250 MB<br />
http_upload_expire_after = 60*60*24*7 -- 1 week<br />
<br />
Component "pubsub.EXAMPLE.COM" "pubsub"<br />
ssl = {<br />
key = "/etc/prosody/certs/pubsub.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/pubsub.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
</pre><br />
}}<br />
<br />
Файл конфигурации Prosody очень хорошо комментирован, поэтому рассмотрим ключевые моменты, а также опции, добавленные для дополнительно установленных модулей.<br />
<br />
* Первым в конфиг-файле идет [[Jabber ID]] будущего администратора - ему будут доступны команды управления сервером, а также будут присылаться различные уведомления.<br />
* В '''plugin_paths''' добавляется путь к каталогу с устанавливаемыми плагинами.<br />
* Далее идет обширный список модулей. Рассмотрим некоторые:<br />
** '''invites''' и сопутствующие ему модули позволяют сделать регистрацию по приглашениям. Однако есть одно но (на сейчас): это отключит обычную регистрацию. Поэтому какой вариант оставить - решайте сами.<br />
** '''turn_external''' позволит нам подключить настроенный ранее Coturn к Prosody для работы звонков.<br />
** '''cloud_notify''' включит поддержку PUSH-уведомлений.<br />
** '''register_web''' включает регистрацию через веб-страницу. Она доступна по адресу https://EXAMPLE.COM:5281/register_web. Штатно тут включена простенькая CAPTCHA, но можно использовать reCaptcha, для этого дополнительно необходимо будет указать ключи для этого сервиса.<br />
** '''admin_adhoc''' позволит выполнять ряд команд на сервере с JID'а администратора из тех клиентов, которые умеют [[Ad-Hoc]].<br />
* Далее следуют настройки, в которых можно усилить или ослабить проверки сертификатов для других серверов.<br />
* Следующей ключевой настройкой будет указание сервера баз данных. Как мы уже условились выше, для хранения данных сервера [[Свой сервер: подготовка базы данных|будем использовать MySQL или MariaDB]]. Prosody имеет весьма простую структуру базы и встроенную схему, поэтому дополнительных действий не требуется.<br />
* В '''archive_expires_after''' можем указать, как скоро нужно чистить архив сообщений для MAM. Для конференций есть отдельная настройка, она будет описана ниже.<br />
* В '''turn_external_host''' и '''turn_external_secret''' указывается адрес Coturn и тот самый ключ, который прописывали в '''/etc/turnserver.conf'''.<br />
* Далее - несколько опций касательно безопасности:<br />
** '''c2s_direct_tls_ports''' и '''s2s_direct_tls_ports''' включает работу с TLS-портами - они должны быть те же, что указывались в SRV-записях в DNS.<br />
** '''c2s_require_encryption''' и '''s2s_require_encryption''' означает использование исключительно шифрованных соединений между серверами, а также между сервером и клиентом.<br />
** '''tls_profile''' настраивает перечень шифров и протоколов, которые может использовать Prosody.<br />
* В '''contact_info''' можно перечислить контакты администратора и, например, адрес конференции поддержки сервера.<br />
* '''external_services''' описывает сервисы, которые предоставляет Coturn.<br />
<br />
На этом настройка основной части завершена и далее идет настройка виртуальных хостов и их сервисов:<br />
<br />
* В секции VirtualHost идет указание SSL-сертификатов для домена, а также разрешение регистрации через jabber-клиент и включение веб-интерфейса для управления сервером, который доступен по адресу https://example.com:5281/admin.<br />
<br />
Далее перечисляется несколько компонентов - сервисов для данного сервера. В показанном примере это [[конференции]], [[Передача файлов|proxy]], [[Передача файлов|HTTP Upload]] и [[PEP|pubsub]]. Для каждого из них указывается своя пара сертификатов и ключей.<br />
<br />
* Для '''proxy''' можно указать субдомен, на котором он будет доступен, а опция '''proxy65_acl''' перечисляет домены, которые смогут передавать файлы через этот прокси.<br />
* Для конференций включается поддержка MAM, модерирования и дополнительных ролей в конференциях. В опциях задается включение MAM по-умолчанию, время устаревания MAM-архива, а также правила доступа на создание новых конференций.<br />
* Для модуля '''http_upload''' перечисляются лимиты на размеры одиночных файлов, а также общий размер хранилища для пользователя и время устаревания загруженных файлов. Для Prosody сделано несколько реализаций HTTP Upload - например, можно переключиться на '''mod_http_file_share''', если mod_http_upload чем-то не устроит или вообще использовать [https://github.com/horazont/xmpp-http-upload внешний сервис] через '''http_upload_external'''.<br />
<br />
Закончив правку файлов конфигурации - перезапустите Prosody:<br />
<br />
systemctl restart prosody<br />
<br />
Теперь можете создать пользователя-администратора:<br />
<br />
prosodyctl adduser admin@EXAMPLE.COM<br />
<br />
А также проверить корректность конфигурации следующими командами:<br />
<br />
prosodyctl check config<br />
prosodyctl check certs<br />
prosodyctl check turn<br />
<br />
Во всех случаях в конце команда должна возвращать "'''All checks passed, congratulations!'''".<br />
<br />
==Сноски==<br />
<br />
<references/><br />
<br />
==Ссылки==<br />
<br />
* https://prosody.im - домашняя страница Prosody и [https://prosody.im/doc ссылка на документацию]<br />
* [https://open-networks.ru/d/67-prosody-im-v012x-ustanovka-i-nastroyka-xmpp-servera-coturn-fail2ban Очень подробное пользовательское руководство по настройке Prosody]<br />
* [https://www.8host.com/blog/ustanovka-prosody-v-ubuntu-18-04/ Еще одно руководство по установке и настройке]<br />
<br />
[[Category:Свой сервер]]</div>Rainhttps://jabberworld.info/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B8_%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_Jabber-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0&diff=10217Установка и настройка Jabber-сервера2023-11-02T16:12:57Z<p>Rain: jabberd2 в архив: под винду недоступен, под Линукс не имеет смысла</p>
<hr />
<div>Требования для работы и процедура установки собственного сервера Jabber являются не такими сложными, как это кажется непосвящённому. Jabber не сильно требователен к ресурсам, поэтому сервер для него возможно устроить практически где угодно. Сложность в установке не превышает сложности установки типичного веб-форума, а местами и ещё проще.<br />
<br />
==Подготовка==<br />
<br />
===Компьютер===<br />
<br />
Для работы сервера Jabber вполне достаточно старенького компьютера с процессором с тактовой частотой 500 МГц, размером оперативной памяти 128 Мб и жёстким диском 4 Гб. Разумеется, возможно использовать и более мощные компьютеры. Если вы планируете хранить историю сообщений на сервере, потребуется более объемистый жесткий диск. Можно установить Jabber-сервер и на машину, которая уже работает как сервер, это не повредит другим программам, как вы можете догадаться. А можно использовать свой настольный компьютер, если вы не выключаете его на ночь. Ниже приведены наиболее оптимальные применения для основных Jabber-серверов:<br />
<br />
* [[Ejabberd]] — наиболее универсальный вариант, рекомендуется. Сервер поддерживает кластеризацию. У сервера высокая отказоустойчивость.<br />
* [[Prosody]] — персональный сервер с низкой нагрузкой. Простой в настройке, но не отличается стабильной работой при высокой нагрузке. Нет кластеризации.<br />
* [[Openfire]] — предприятия. Прост в настройке, но из-за виртуальной машины java потребляет много ресурсов.<br />
* [[Jabberd]] — старые компьютеры с низкой вычислительной мощностью.<br />
<br />
Подробнее смотрите в статье «[[Выбор сервера]]»<br />
<br />
===Интернет===<br />
<br />
Возможно сделать так, чтобы к вашему серверу можно было подключиться не только из локальной сети или предприятия. Но не каждый провайдер позволяет своим клиентам использовать собственный сервер в интернете. Для работы сервера нужно, чтобы ваше подключение к интернету было с так называемым «публичным», или «белым» адресом IP. Проверить его наличие можно с помощью [[Выявление NAT|этой инструкции]]. Также желательно, чтобы этот IP-адрес был фиксированным, чтобы к нему можно было легко привязать доменное имя. Все эти проблемы отпадут сами собой, если вы используете сервер VPS или Dedicated от поставщика услуг хостинга — они всегда подразумевают предоставление в ваше распоряжение фиксированных «белых» IP. Наконец, важным фактором является стабильность подключения — проблемы со стороны сервера сказываются на всех подключённых пользователях одновременно.<br />
<br />
==Практика==<br />
<br />
===Регистрация доменного имени===<br />
<br />
Как уже было сказано раньше, для работы jabber-сервера необходимо обзавестись доменным именем. Конечно, в крайнем случае можно обойтись и без него, но, согласитесь, вряд ли вам захочется видеть и использовать [[Jabber ID]] вида "'''vasya@169.254.96.124'''" или "'''petya@2001:470:0f3b:28fa::1'''". Поэтому последним шагом перед, собственно, установкой сервера будет регистрация собственного доменного имени, тем более сделать это так просто! Подробнее об этом, а также о привязке домена к IP-адресу своего сервера читайте в статье "[[Регистрация доменного имени]]". Возможно использование и динамического адреса.<br />
<br />
===Установка и настройка программы-сервера===<br />
<br />
Подготовив "железо" для будущего сервера, подключив его к сети и привязав к нему доменное имя в этой сети, можно переходить непосредственно к установке [[Выбор сервера|необходимого программного обеспечения]]. Ниже приводятся подробные инструкции для упомянутых трех популярных серверов в варианте для двух операционных систем - семейства юниксоподобных ОС (в частности дистрибутивов GNU/Linux и BSD) и Windows. Если у вас нет особых причин использовать Windows для сервера - мы рекомендуем в качестве основы взять GNU/Linux, как более защищенную и стабильно работающую платформу.<br />
<br />
<center><br />
{| border=0 width=75%<br />
|rowspan=3 width=100|[[Изображение:Linux bsd.png|120px]]<br />
|width=35% align=left height=35|[[Установка ejabberd под Linux|ejabberd]]<br />
|rowspan=3 width=100|[[Изображение:Windows logo.png|110px]]<br />
|width=35% align=left|[[Установка ejabberd под Windows|ejabberd]]<br />
|-<br />
|height=35 align=left|[[Свой сервер: подробное руководство по установке Prosody|Prosody]]<br />
|align=left|<br />
|-<br />
| height=35 align=left|[[Установка Openfire под Linux|Openfire]]<br />
|align=left|[[Установка Openfire под Windows|Openfire]]<br />
|-<br />
|}<br />
</center><br />
<br />
==Ссылки==<br />
* [[Свой сервер: подробное руководство по установке ejabberd|Подробное руководство по установке ejabberd]]<br />
* [[Свой сервер: подробное руководство по установке Prosody|Подробное руководство по установке Prosody]]<br />
* [http://wiki.unixforum.org/wiki/Делаем_Jabber-сервер Делаем Jabber-сервер] {{deadlink}}<br />
* [http://habrahabr.ru/blogs/jabber/50182/ Популярные ошибки администраторов jabber-серверов]<br />
* [http://habrahabr.ru/blogs/im/50009/ Настройка Jabber сервера на своем домене с помощью Google apps] {{deadlink}}<br />
* Архив: установка jabberd2 [[Установка jabberd 2 под Linux|под Linux]] и [[Установка jabberd 2 под Windows|под Windows]].<br />
<br />
[[Category:Свой сервер]]</div>Rainhttps://jabberworld.info/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_ejabberd_%D0%BF%D0%BE%D0%B4_Windows&diff=10216Установка ejabberd под Windows2023-11-02T16:00:13Z<p>Rain: +deadlink</p>
<hr />
<div>Рассмотрим установку сервера [[ejabberd]] на компьютеры под управлением ОС Windows в стандартной конфигурации для использования в локальной сети с открытым доступом из Интернет и с использованием службы DynDNS.<br />
<br />
Предполагается, что у Вас уже установлена операционная система, настроен доступ в Интернет, а доменное имя на DynDNS (допустим, это будет '''myjabber.ath.cx''') указывает на внешний адрес Вашего компьютера (либо тот, который доступен из Вашей локальной сети, если Вы настраиваете сервер без возможности подключения к нему из Интернета).<br />
<br />
Первым делом скачайте программу-установщик на свой компьютер, сделать это можно на официальном сайте Process One на [http://www.process-one.net/en/ejabberd/downloads/ странице загрузки]. После скачивания запустите файл и приступайте к установке.<br />
<br />
==Установка сервера==<br />
<br />
После запуска установщика первым делом появится диалог выбора языка. Выберите русский и нажмите "'''OK'''". Запустится мастер установки, который поможет выполнить Вам все необходимые шаги. Во время работы мастера Вам придется ответить на следующие вопросы:<br />
<br />
* Принятие лицензионного соглашения. Ejabberd распространяется на условиях лицензии GPL.<br />
* Каталог для установки программы. Здесь будут находиться основные исполняемые файлы сервера и файлы конфигурации, а также база данных пользовательских аккаунтов под названием Mnesia.<br />
* Доменное имя сервера. Как уже говорили выше, пусть это будет '''myjabber.ath.cx'''.<br />
* Логин администратора. Вместе с доменным именем он составит [[Jabber ID]] администратора сервера.<br />
* [[Пароль]] администратора.<br />
* Вариант конфигурации сервера. Кластеры используются только на высоконагруженных серверах, поэтому отвечаем "'''Нет'''".<br />
<br />
После ответа на эти вопросы начнется процесс установки, во время которого будут выполнены основные настройки сервера. После установки сервер займет на диске около 15 Мб. Для окончания установки осталось выполнить лишь несколько шагов.<br />
<br />
<center><br />
<gallery perrow=5><br />
Изображение:Ejabberd win install 01.png|Выбираем язык<br />
Изображение:Ejabberd win install 02.png|Запуск мастера установки и настройки<br />
Изображение:Ejabberd win install 03.png|Знакомимся с лицензионным соглашением<br />
Изображение:Ejabberd win install 04.png|Выбираем каталог для установки<br />
Изображение:Ejabberd win install 05.png|Вводим домен сервера<br />
Изображение:Ejabberd win install 06.png|Вводим логин администратора<br />
Изображение:Ejabberd win install 07.png|Вводим пароль администратора<br />
Изображение:Ejabberd win install 08.png|Выбираем тип конфигурации сервера<br />
Изображение:Ejabberd win install 10.png|Установка сервера<br />
Изображение:Ejabberd win install 11.png|Установка завершена<br />
</gallery><br />
</center><br />
<br />
==Запуск сервера==<br />
<br />
Сервер добавляет себя в список сервисов системы, но не запускается автоматически. Для запуска в ручном режиме сделайте двойной щелчок по ярлыку "'''Запустить ejabberd'''" на рабочем столе, а для запуска сервера при старте системы измените в "'''Панель управления -> Администрирование -> Сервисы'''" тип запуска сервиса ejabberd с "'''Ручной'''" на "'''Автоматический'''".<br />
<br />
[[Изображение:Ejabberd win install 12.png|thumb|left|Сервер запущен]]<br />
Если при попытке запуска сервера возникает следующее сообщение об ошибке:<br />
<pre><br />
Starting ejabberd...<br />
./ejabberdctl: erl.exe: can't execute: (14001) Error 14001<br />
<br />
There is a problem starting Erlang.<br />
If the error you see is 14001, you need to install:<br />
Microsoft Visual C++ 2005 SP1 Redistributable Package<br />
You can download that installer from www.microsoft.com<br />
You can also check the ejabberd Administrator Guide<br />
</pre><br />
<br />
то потребуется дополнительно установить Microsoft Visual C++ 2005 SP1, скачать его можно с [https://www.microsoft.com/download/en/ официального сайта Microsoft].<br />
<br />
После успешного запуска сервера откроется информационная веб-страница в браузере.<br />
{{-}}<br />
<br />
[[Изображение:Ejabberd win install 13.png|thumb|left|Панель администратора и клиент, подключенный к серверу]]<br />
С этого момента к Вашему серверу можно подключаться с других компьютеров, пользователи могут заводить учетные записи, общаться между собой и устраивать [[конференции]].<br />
<br />
Используя свой администраторский аккаунт, Вы можете выполнять некоторые административные функции прямо из своего Jabber-клиента, например, можно создавать новые учетные записи и просматривать список подключенных пользователей. Эти функции доступны через [[браузер сервисов]]. Также становятся доступны стандартные функции администратора - рассылка массовых сообщений для всех пользователей и установка так называемого "Сообщения дня".<br />
<br />
Кроме того, Вы можете получить доступ к веб-интерфейсу, через который можно управлять настройками сервера и смотреть статистику.<br />
{{-}}<br />
<br />
[[Изображение:Ejabberd win install 14.png|thumb|left|Авторизация в панели администратора]]<br />
Этот интерфейс доступен на Вашем компьютере по адресу http://localhost:5280/admin. Для авторизации введите в поле "'''Пользователь'''" полный [[Jabber ID]] администратора, а в поле "'''Пароль'''" - пароль, введенный Вами при установке сервера.<br />
{{-}}<br />
<br />
==Ссылки==<br />
<br />
* [http://ylsoftware.com/news/499 Настройка ведения логов в конференции]<br />
<br />
[[Category:Свой сервер]]</div>Rainhttps://jabberworld.info/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_Openfire_%D0%BF%D0%BE%D0%B4_Linux&diff=10215Установка Openfire под Linux2023-11-02T15:55:58Z<p>Rain: Не надо теперь отдельно тянуть Яву</p>
<hr />
<div>Рассмотрим установку сервера [[Openfire]] на компьютеры под управлением одного из дистрибутивов ОС GNU/Linux для использования в локальной сети с открытым доступом из Интернет и с использованием службы DynDNS.<br />
<br />
Предполагается, что у Вас уже установлена операционная система, настроен доступ в Интернет, а доменное имя на DynDNS (допустим, это будет '''myjabber.ath.cx''') указывает на внешний адрес Вашего компьютера (либо тот, который доступен из Вашей локальной сети, если Вы настраиваете сервер без возможности подключения к нему из Интернета).<br />
<br />
==Установка==<br />
<br />
Первым делом скачайте программу-установщик на свой компьютер, сделать это можно на официальном сайте Ignite Realtime на [http://www.igniterealtime.org/downloads/index.jsp#openfire странице загрузки]. Установка будет рассмотрена на примере [[ru_wikipedia:Debian|Debian GNU/Linux]], поэтому для загрузки выберите deb-пакет. Помимо этого предлагается пакет в формате RPM для Red Hat и базирующихся на нем систем, а также архив не привязанный к какой-то определенной системе.<br />
<br />
Все действия ''по установке'' делаются от пользователя '''root''', для этого перейдите в каталог загрузки и выполните команду<br />
<br />
dpkg -i openfire_*_all.deb<br />
<br />
Для работы сервера необходимо дополнительно установить Java Runtime Environment, для чего выполните команду<br />
<br />
apt-get -f install<br />
<br />
APT установит недостающие зависимости и на этом установка будет закончена - время переходить к настройке.<br />
<br />
==Настройка==<br />
<br />
Для начала настройки запустите веб-браузер и перейдите по адресу http://localhost:9090 (или http://myjabber.ath.cx:9090). Откроется веб-интерфейс, в котором необходимо будет поэтапно произвести 5 основных настроек:<br />
<br />
* Язык интерфейса. Русский язык доступен.<br />
* Доменное имя сервера. Как уже говорили выше, пусть это будет '''myjabber.ath.cx'''.<br />
* Тип базы данных. В нашем варианте остановимся на встроенной базе - выбираем пункт "'''Embedded database'''".<br />
* Тип профиля оставляем '''Default'''.<br />
* Указываем email и [[пароль]] администратора.<br />
<br />
На этом настройка завершена. '''Перезапустите сервер''', после чего Вам станет доступна панель администратора по адресу http://myjabber.ath.cx:9090/login.jsp, откуда Вы сможете изменять самые разнообразные настройки, а также просматривать статистику. Для авторизации используйте имя пользователя '''admin''' и пароль, указанный при настройке сервера.<br />
<br />
Теперь к Вашему серверу можно подключаться с других компьютеров, пользователи могут заводить учетные записи, общаться между собой и устраивать [[конференции]].<br />
<br />
<center><br />
<gallery><br />
Изображение:Openfire lin setup 01.png|Выбираем язык<br />
Изображение:Openfire lin setup 02.png|Указываем домен сервера <br />
Изображение:Openfire lin setup 03.png|Выбираем тип базы<br />
Изображение:Openfire lin setup 04.png|Выбираем тип профиля<br />
Изображение:Openfire lin setup 05.png|Указываем пароль и почту администратора<br />
Изображение:Openfire lin setup 06.png|Настройка завершена<br />
Изображение:Openfire lin cp 01.png|Логин в админ-панель<br />
Изображение:Openfire lin cp 02.png|Админ-панель и работающий клиент<br />
</gallery><br />
</center><br />
<br />
[[Category:Свой сервер]]</div>Rainhttps://jabberworld.info/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_ejabberd_%D0%BF%D0%BE%D0%B4_Linux&diff=10214Установка ejabberd под Linux2023-11-02T15:42:49Z<p>Rain: А про рута-то и забыли</p>
<hr />
<div>Рассмотрим установку сервера [[ejabberd]] на компьютеры под управлением одного из дистрибутивов GNU/Linux для использования в локальной сети с открытым доступом из Интернет и с использованием службы DynDNS.<br />
<br />
Предполагается, что у Вас уже установлена операционная система, настроен доступ в Интернет, а доменное имя на DynDNS (допустим, это будет '''myjabber.ath.cx''') указывает на внешний адрес Вашего компьютера (либо тот, который доступен из Вашей локальной сети, если Вы настраиваете сервер без возможности подключения к нему из Интернета).<br />
<br />
[[Ejabberd]] может быть установлен на ваш сервер различными способами. Опишу три по нарастанию сложности:<br />
<br />
# Установка из репозитория/портов. Идеальный по оптимизации и самый простой вариант.<br />
# Предварительно собранные бинарные файлы с инсталлятором. Вариант не сложнее первого, но вряд ли оптимизирован именно под ваш дистрибутив. <br />
# Сборка из исходного кода. Если этого пакета нет в репозиториях к вашему дистрибутиву, но очень хочется, чтобы сервер был оптимизированным и работал без ошибок - засучиваем рукава и переходим к соответствующему разделу. Тут вам понадобятся некоторые знания о Linux и/или помощь [[ru_wikipedia:Гуру|гуру]].<br />
<br />
Далее подробно рассмотрены эти варианты.<br />
__TOC__<br />
==Установка из репозитория==<br />
Дистрибутивов Linux великое множество, и нет никакой возможности рассмотреть детали установки в каждом из них. Упомянем наиболее популярные (предполагается наличие прав root):<br />
<br />
===Fedora===<br />
По умолчанию нужный репозиторий обычно подключен.<br />
yum install ejabberd<br />
<br />
===Debian-based дистрибутивы (Debian, *Ubuntu и другие)===<br />
Ejabberd входит в основную ветку репозитория, поэтому для установки просто скомандуйте:<br />
apt-get install ejabberd<br />
<br />
===Gentoo===<br />
Для установки ejabberd в Gentoo GNU/Linux выполните команды<br />
echo "net-im/ejabberd pam ssl zlib mod_muc mod_pubsub web" >> /etc/portage/package.use<br />
emerge ejabberd<br />
<br />
==Установка готовых бинарников==<br />
Установка из готовых бинарных пакетов делается за несколько простых шагов:<br />
<br />
* Скачиваете подходящий '''run'''-файл по адресу https://www.process-one.net/en/ejabberd/archive/<br />
* Запускаете командой '''sudo bash ejabberd-*.run'''<br />
* Cледуете указаниям программы установки.<br />
<br />
==Сборка из исходников==<br />
{{Hider hiding<br />
|title=Пример для версии 2.0.5<br />
|content=<br />
Рассмотрим сборку stable-версии ejabberd-2.0.5.<br />
<br />
Для начала нужно, чтобы на сервере был установлен компилятор gcc и необходимые библиотеки (включая devel-части). Проверьте, есть ли у вас:<br />
* GNU Make<br />
* GNU C compiler (GCC)<br />
* libexpat 1.95 или выше<br />
* OpenSSL 0.9.6 или выше<br />
* Zlib 1.2.3<br />
* GNU Iconv 1.8 или выше<br />
* flex/yacc<br />
<br />
В разных дистрибутивах проверка и установка делается разными способами. Дистрибутивов много, описывать каждый смысла не имеет. Если вы не знаете, как это сделать на вашем сервере, обратитесь к документации или гуру по данному дистрибутиву.<br />
<br />
Для простоты операций будем работать пользователем root в его домашнем каталоге. Не забудьте потом прибраться.<br />
<br />
Итак, нам нужен исходный код ejabberd. Идём на [http://www.ejabberd.im официальный сайт] и выбираем, что нужно. Лучше выбирать stable версию, но если вы очень любите новые фишки и не боитесь нестабильной работы, то берите beta, testing или [[ru_wikipedia:Subversion|SVN]] версии.<br />
<br />
Я выбрал stable-версию 2.0.5 и скачал её:<br />
wget http://www.process-one.net/downloads/ejabberd/2.0.5/ejabberd-2.0.5.tar.gz<br />
<br />
Конечно же, у вас есть эта удобнейшая утилита - wget. ;)<br />
<br />
Ещё нам понадобится свеженький [[ru_wikipedia:Erlang|Erlang]] - это компилятор языка, на котором написан ejabberd. Если Erlang есть в вашем репозитории, то лучше воспользоваться им. Если нет - покажу, как собрать его из [http://erlang.org/download.html исходных кодов].<br />
<br />
Как программист, не удержусь от пояснения, зачем было использовать этот с виду громоздкий и неудобный язык. Он громоздок и неудобен действительно лишь с виду, для написания программ вроде hello world, однако предоставляет прекрасный инструментарий многопоточного и распределённого программирования. Это позволит вам единожды написанную и собранную программу использовать на огромных кластерах, состоящих из машин любой архитектуры, в которые будет проще простого добавить новые вычислительные мощности. Даже Java не обладает подобными возможностями. Именно поэтому ejabberd считается одним из самых быстрых и масштабируемых серверов протокола XMPP.<br />
<br />
Но довольно лирики.<br />
wget http://erlang.org/download/otp_src_R13B01.tar.gz<br />
<br />
Если у вас наличествуют все инструменты, библиотеки и исходные коды, приступим.<br />
<br />
Создадим временный каталог для наших сборок:<br />
mkdir buildtmp<br />
<br />
===erlang===<br />
В моём случае скачанный архив называется otp_src_R13B01.tar.gz. Распаковываем его во временный каталог:<br />
tar zxf otp_src_R13B01.tar.gz -C buildtmp<br />
<br />
Переходим в каталог и собираем erlang:<br />
cd buildtmp/otp_src_R13B01<br />
./configure --prefix=/usr --sysconfdir=/etc<br />
make<br />
make install<br />
<br />
Конечно же, следим за процессом, а не просто набираем команды. Программа сборки может сообщить об ошибке, но не каждый error или warning означает неисправимую ошибку. Например, процесс конфигурирования (команда configure) может сообщить, что не нашла компилятора java, библиотек odbc и wx, но это не является ошибкой. Просто соответствующие части erlang-а будут отключены. Перечисленные библиотеки нам не понадобятся для работы ejabberd.<br />
<br />
После сборки вернёмся в домашний каталог командой '''cd'''.<br />
<br />
===ejabberd===<br />
В моём случае архив называется ejabberd-2.0.5.tar.gz. Распаковываем его во временный каталог:<br />
tar zxf ejabberd-2.0.5.tar.gz -С buildtmp <br />
<br />
Переходим в каталог с исходниками и собираем ejabberd:<br />
cd buildtmp/ejabberd-2.0.5/src<br />
./configure<br />
make<br />
make install<br />
<br />
После всех этих манипуляций все нужные файлы разложены согласно традициям UNIX/Linux. Конфиги, в частности,- в /etc/ejabberd. Скрипт запуска - /sbin/ejabberdctl - отрабатывает команду start, что позволяет сразу добавить в rc.d, хотя лучше всё же написать правильный скрипт управления службой согласно правилам вашего дистрибутива.<br />
}}<br />
<br />
==Настройка==<br />
А дальше надо настроить сервер: что делать при загрузке, какие модули использовать, какие порты прослушивать, и т.п.<br />
<br />
Настройка сервера сводится к редактированию файла конфигурации '''/etc/ejabberd/ejabberd.yml''' (путь показан на примере Debian GNU/Linux, в других дистрибутивах или при самостоятельной сборке из исходных кодов путь может отличаться). Откройте этот файл от пользователя '''root''' в любом удобном для Вас текстовом редакторе, после чего найдите следующие секции: секцию '''acl''' и секцию '''hosts'''.<br />
<br />
В первом параметре задается [[Jabber ID]] администратора, а во втором - доменное имя сервера. Приведите эти строки примерно к такому виду:<br />
<br />
<pre><br />
acl:<br />
admin:<br />
user:<br />
- "admin": "myjabber.ath.cx"<br />
## hosts: Domains served by ejabberd.<br />
## You can define one or several, for example:<br />
## hosts:<br />
## - "example.net"<br />
## - "example.com"<br />
## - "example.org"<br />
hosts:<br />
- "myjabber.ath.cx"<br />
</pre><br />
<br />
В данном случае [[JID]] администратора задан [xmpp:admin@myjabber.ath.cx admin@myjabber.ath.cx], а имя сервера, как уже условились выше - myjabber.ath.cx.<br />
<br />
Теперь в том же файле найдите секцию access_rules, а в ней - параметр register:<br />
<br />
<pre><br />
access_rules:<br />
register:<br />
- allow<br />
</pre><br />
<br />
и замените '''deny''' на '''allow''' - без этого пользователи сервера не смогут регистрироваться напрямую из своего Jabber-клиента. <br />
<br />
Сохраните изменения и перезапустите ejabberd командой<br />
<br />
/etc/init.d/ejabberd restart<br />
<br />
<center><br />
<gallery><br />
Изображение:Ejabber lin install login 01.png|Логин в веб-интерфейсе<br />
Изображение:Ejabberd lin install 01.png|Сервисы и статистика сервера<br />
</gallery><br />
</center><br />
<br />
После этого создайте нового пользователя [xmpp:admin@myjabber.ath.cx admin@myjabber.ath.cx] используя Ваш Jabber-клиент. В [[Браузер сервисов|браузере сервисов]] для этой учетной записи будут доступны основные функции администрирования, а используя параметры этого аккаунта Вы сможете авторизоваться в веб-интерфейсе по адресу http://myjabber.ath.cx:5280/admin<br />
<br />
==Ссылки==<br />
<br />
* [[Свой сервер: подробное руководство по установке ejabberd]]<br />
* [http://ylsoftware.com/news/499 Настройка ведения логов в конференции]<br />
* [http://linuxoid.in/RRD:_Статистика_онлайн-пользователей_для_ejabberd Графическая статистика онлайн-пользователей]<br />
<br />
[[Category:Свой сервер]]</div>Rainhttps://jabberworld.info/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_ejabberd_%D0%BF%D0%BE%D0%B4_Linux&diff=10213Установка ejabberd под Linux2023-11-02T15:40:41Z<p>Rain: </p>
<hr />
<div>Рассмотрим установку сервера [[ejabberd]] на компьютеры под управлением одного из дистрибутивов GNU/Linux для использования в локальной сети с открытым доступом из Интернет и с использованием службы DynDNS.<br />
<br />
Предполагается, что у Вас уже установлена операционная система, настроен доступ в Интернет, а доменное имя на DynDNS (допустим, это будет '''myjabber.ath.cx''') указывает на внешний адрес Вашего компьютера (либо тот, который доступен из Вашей локальной сети, если Вы настраиваете сервер без возможности подключения к нему из Интернета).<br />
<br />
[[Ejabberd]] может быть установлен на ваш сервер различными способами. Опишу три по нарастанию сложности:<br />
<br />
# Установка из репозитория/портов. Идеальный по оптимизации и самый простой вариант.<br />
# Предварительно собранные бинарные файлы с инсталлятором. Вариант не сложнее первого, но вряд ли оптимизирован именно под ваш дистрибутив. <br />
# Сборка из исходного кода. Если этого пакета нет в репозиториях к вашему дистрибутиву, но очень хочется, чтобы сервер был оптимизированным и работал без ошибок - засучиваем рукава и переходим к соответствующему разделу. Тут вам понадобятся некоторые знания о Linux и/или помощь [[ru_wikipedia:Гуру|гуру]].<br />
<br />
Далее подробно рассмотрены эти варианты.<br />
__TOC__<br />
==Установка из репозитория==<br />
Дистрибутивов Linux великое множество, и нет никакой возможности рассмотреть детали установки в каждом из них. Упомянем наиболее популярные (предполагается наличие прав root):<br />
<br />
===Fedora===<br />
По умолчанию нужный репозиторий обычно подключен.<br />
yum install ejabberd<br />
<br />
===Debian-based дистрибутивы (Debian, *Ubuntu и другие)===<br />
Ejabberd входит в основную ветку репозитория, поэтому для установки просто скомандуйте:<br />
apt-get install ejabberd<br />
<br />
===Gentoo===<br />
Для установки ejabberd в Gentoo GNU/Linux выполните команды<br />
echo "net-im/ejabberd pam ssl zlib mod_muc mod_pubsub web" >> /etc/portage/package.use<br />
emerge ejabberd<br />
<br />
==Установка готовых бинарников==<br />
Установка из готовых бинарных пакетов делается за несколько простых шагов:<br />
<br />
* Скачиваете подходящий '''run'''-файл по адресу https://www.process-one.net/en/ejabberd/archive/<br />
* Запускаете командой '''bash ejabberd-*.run'''<br />
* Cледуете указаниям программы установки.<br />
<br />
==Сборка из исходников==<br />
{{Hider hiding<br />
|title=Пример для версии 2.0.5<br />
|content=<br />
Рассмотрим сборку stable-версии ejabberd-2.0.5.<br />
<br />
Для начала нужно, чтобы на сервере был установлен компилятор gcc и необходимые библиотеки (включая devel-части). Проверьте, есть ли у вас:<br />
* GNU Make<br />
* GNU C compiler (GCC)<br />
* libexpat 1.95 или выше<br />
* OpenSSL 0.9.6 или выше<br />
* Zlib 1.2.3<br />
* GNU Iconv 1.8 или выше<br />
* flex/yacc<br />
<br />
В разных дистрибутивах проверка и установка делается разными способами. Дистрибутивов много, описывать каждый смысла не имеет. Если вы не знаете, как это сделать на вашем сервере, обратитесь к документации или гуру по данному дистрибутиву.<br />
<br />
Для простоты операций будем работать пользователем root в его домашнем каталоге. Не забудьте потом прибраться.<br />
<br />
Итак, нам нужен исходный код ejabberd. Идём на [http://www.ejabberd.im официальный сайт] и выбираем, что нужно. Лучше выбирать stable версию, но если вы очень любите новые фишки и не боитесь нестабильной работы, то берите beta, testing или [[ru_wikipedia:Subversion|SVN]] версии.<br />
<br />
Я выбрал stable-версию 2.0.5 и скачал её:<br />
wget http://www.process-one.net/downloads/ejabberd/2.0.5/ejabberd-2.0.5.tar.gz<br />
<br />
Конечно же, у вас есть эта удобнейшая утилита - wget. ;)<br />
<br />
Ещё нам понадобится свеженький [[ru_wikipedia:Erlang|Erlang]] - это компилятор языка, на котором написан ejabberd. Если Erlang есть в вашем репозитории, то лучше воспользоваться им. Если нет - покажу, как собрать его из [http://erlang.org/download.html исходных кодов].<br />
<br />
Как программист, не удержусь от пояснения, зачем было использовать этот с виду громоздкий и неудобный язык. Он громоздок и неудобен действительно лишь с виду, для написания программ вроде hello world, однако предоставляет прекрасный инструментарий многопоточного и распределённого программирования. Это позволит вам единожды написанную и собранную программу использовать на огромных кластерах, состоящих из машин любой архитектуры, в которые будет проще простого добавить новые вычислительные мощности. Даже Java не обладает подобными возможностями. Именно поэтому ejabberd считается одним из самых быстрых и масштабируемых серверов протокола XMPP.<br />
<br />
Но довольно лирики.<br />
wget http://erlang.org/download/otp_src_R13B01.tar.gz<br />
<br />
Если у вас наличествуют все инструменты, библиотеки и исходные коды, приступим.<br />
<br />
Создадим временный каталог для наших сборок:<br />
mkdir buildtmp<br />
<br />
===erlang===<br />
В моём случае скачанный архив называется otp_src_R13B01.tar.gz. Распаковываем его во временный каталог:<br />
tar zxf otp_src_R13B01.tar.gz -C buildtmp<br />
<br />
Переходим в каталог и собираем erlang:<br />
cd buildtmp/otp_src_R13B01<br />
./configure --prefix=/usr --sysconfdir=/etc<br />
make<br />
make install<br />
<br />
Конечно же, следим за процессом, а не просто набираем команды. Программа сборки может сообщить об ошибке, но не каждый error или warning означает неисправимую ошибку. Например, процесс конфигурирования (команда configure) может сообщить, что не нашла компилятора java, библиотек odbc и wx, но это не является ошибкой. Просто соответствующие части erlang-а будут отключены. Перечисленные библиотеки нам не понадобятся для работы ejabberd.<br />
<br />
После сборки вернёмся в домашний каталог командой '''cd'''.<br />
<br />
===ejabberd===<br />
В моём случае архив называется ejabberd-2.0.5.tar.gz. Распаковываем его во временный каталог:<br />
tar zxf ejabberd-2.0.5.tar.gz -С buildtmp <br />
<br />
Переходим в каталог с исходниками и собираем ejabberd:<br />
cd buildtmp/ejabberd-2.0.5/src<br />
./configure<br />
make<br />
make install<br />
<br />
После всех этих манипуляций все нужные файлы разложены согласно традициям UNIX/Linux. Конфиги, в частности,- в /etc/ejabberd. Скрипт запуска - /sbin/ejabberdctl - отрабатывает команду start, что позволяет сразу добавить в rc.d, хотя лучше всё же написать правильный скрипт управления службой согласно правилам вашего дистрибутива.<br />
}}<br />
<br />
==Настройка==<br />
А дальше надо настроить сервер: что делать при загрузке, какие модули использовать, какие порты прослушивать, и т.п.<br />
<br />
Настройка сервера сводится к редактированию файла конфигурации '''/etc/ejabberd/ejabberd.yml''' (путь показан на примере Debian GNU/Linux, в других дистрибутивах или при самостоятельной сборке из исходных кодов путь может отличаться). Откройте этот файл от пользователя '''root''' в любом удобном для Вас текстовом редакторе, после чего найдите следующие секции: секцию '''acl''' и секцию '''hosts'''.<br />
<br />
В первом параметре задается [[Jabber ID]] администратора, а во втором - доменное имя сервера. Приведите эти строки примерно к такому виду:<br />
<br />
<pre><br />
acl:<br />
admin:<br />
user:<br />
- "admin": "myjabber.ath.cx"<br />
## hosts: Domains served by ejabberd.<br />
## You can define one or several, for example:<br />
## hosts:<br />
## - "example.net"<br />
## - "example.com"<br />
## - "example.org"<br />
hosts:<br />
- "myjabber.ath.cx"<br />
</pre><br />
<br />
В данном случае [[JID]] администратора задан [xmpp:admin@myjabber.ath.cx admin@myjabber.ath.cx], а имя сервера, как уже условились выше - myjabber.ath.cx.<br />
<br />
Теперь в том же файле найдите секцию access_rules, а в ней - параметр register:<br />
<br />
<pre><br />
access_rules:<br />
register:<br />
- allow<br />
</pre><br />
<br />
и замените '''deny''' на '''allow''' - без этого пользователи сервера не смогут регистрироваться напрямую из своего Jabber-клиента. <br />
<br />
Сохраните изменения и перезапустите ejabberd командой<br />
<br />
/etc/init.d/ejabberd restart<br />
<br />
<center><br />
<gallery><br />
Изображение:Ejabber lin install login 01.png|Логин в веб-интерфейсе<br />
Изображение:Ejabberd lin install 01.png|Сервисы и статистика сервера<br />
</gallery><br />
</center><br />
<br />
После этого создайте нового пользователя [xmpp:admin@myjabber.ath.cx admin@myjabber.ath.cx] используя Ваш Jabber-клиент. В [[Браузер сервисов|браузере сервисов]] для этой учетной записи будут доступны основные функции администрирования, а используя параметры этого аккаунта Вы сможете авторизоваться в веб-интерфейсе по адресу http://myjabber.ath.cx:5280/admin<br />
<br />
==Ссылки==<br />
<br />
* [[Свой сервер: подробное руководство по установке ejabberd]]<br />
* [http://ylsoftware.com/news/499 Настройка ведения логов в конференции]<br />
* [http://linuxoid.in/RRD:_Статистика_онлайн-пользователей_для_ejabberd Графическая статистика онлайн-пользователей]<br />
<br />
[[Category:Свой сервер]]</div>Rainhttps://jabberworld.info/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_ejabberd_%D0%BF%D0%BE%D0%B4_Linux&diff=10212Установка ejabberd под Linux2023-11-02T15:39:10Z<p>Rain: Компактнее</p>
<hr />
<div>Рассмотрим установку сервера [[ejabberd]] на компьютеры под управлением одного из дистрибутивов GNU/Linux для использования в локальной сети с открытым доступом из Интернет и с использованием службы DynDNS.<br />
<br />
Предполагается, что у Вас уже установлена операционная система, настроен доступ в Интернет, а доменное имя на DynDNS (допустим, это будет '''myjabber.ath.cx''') указывает на внешний адрес Вашего компьютера (либо тот, который доступен из Вашей локальной сети, если Вы настраиваете сервер без возможности подключения к нему из Интернета).<br />
<br />
[[Ejabberd]] может быть установлен на ваш сервер различными способами. Опишу три по убыванию предпочтительности:<br />
<br />
# Установка из репозитория/портов. Идеальный по оптимизации и самый простой вариант.<br />
# Сборка из исходного кода. Если этого пакета нет в репозиториях к вашему дистрибутиву, но очень хочется, чтобы сервер был оптимизированным и работал без ошибок - засучиваем рукава и переходим к соответствующему разделу. Тут вам понадобятся некоторые знания о Linux и/или помощь [[ru_wikipedia:Гуру|гуру]].<br />
# Предварительно собранные бинарные файлы с инсталлятором. Вариант весьма прост, но вряд ли оптимизирован именно под ваш дистрибутив. <br />
<br />
Далее подробно рассмотрены эти варианты.<br />
__TOC__<br />
==Установка из репозитория==<br />
Дистрибутивов Linux великое множество, и нет никакой возможности рассмотреть детали установки в каждом из них. Упомянем наиболее популярные (предполагается наличие прав root):<br />
<br />
===Fedora===<br />
По умолчанию нужный репозиторий обычно подключен.<br />
yum install ejabberd<br />
<br />
===Debian-based дистрибутивы (Debian, *Ubuntu и другие)===<br />
Ejabberd входит в основную ветку репозитория, поэтому для установки просто скомандуйте:<br />
apt-get install ejabberd<br />
<br />
===Gentoo===<br />
Для установки ejabberd в Gentoo GNU/Linux выполните команды<br />
echo "net-im/ejabberd pam ssl zlib mod_muc mod_pubsub web" >> /etc/portage/package.use<br />
emerge ejabberd<br />
<br />
==Установка готовых бинарников==<br />
Установка из готовых бинарных пакетов делается за несколько простых шагов:<br />
<br />
* Скачиваете подходящий '''run'''-файл по адресу https://www.process-one.net/en/ejabberd/archive/<br />
* Запускаете командой '''bash ejabberd-*.run'''<br />
* Cледуете указаниям программы установки.<br />
<br />
==Сборка из исходников==<br />
{{Hider hiding<br />
|title=Пример для версии 2.0.5<br />
|content=<br />
Рассмотрим сборку stable-версии ejabberd-2.0.5.<br />
<br />
Для начала нужно, чтобы на сервере был установлен компилятор gcc и необходимые библиотеки (включая devel-части). Проверьте, есть ли у вас:<br />
* GNU Make<br />
* GNU C compiler (GCC)<br />
* libexpat 1.95 или выше<br />
* OpenSSL 0.9.6 или выше<br />
* Zlib 1.2.3<br />
* GNU Iconv 1.8 или выше<br />
* flex/yacc<br />
<br />
В разных дистрибутивах проверка и установка делается разными способами. Дистрибутивов много, описывать каждый смысла не имеет. Если вы не знаете, как это сделать на вашем сервере, обратитесь к документации или гуру по данному дистрибутиву.<br />
<br />
Для простоты операций будем работать пользователем root в его домашнем каталоге. Не забудьте потом прибраться.<br />
<br />
Итак, нам нужен исходный код ejabberd. Идём на [http://www.ejabberd.im официальный сайт] и выбираем, что нужно. Лучше выбирать stable версию, но если вы очень любите новые фишки и не боитесь нестабильной работы, то берите beta, testing или [[ru_wikipedia:Subversion|SVN]] версии.<br />
<br />
Я выбрал stable-версию 2.0.5 и скачал её:<br />
wget http://www.process-one.net/downloads/ejabberd/2.0.5/ejabberd-2.0.5.tar.gz<br />
<br />
Конечно же, у вас есть эта удобнейшая утилита - wget. ;)<br />
<br />
Ещё нам понадобится свеженький [[ru_wikipedia:Erlang|Erlang]] - это компилятор языка, на котором написан ejabberd. Если Erlang есть в вашем репозитории, то лучше воспользоваться им. Если нет - покажу, как собрать его из [http://erlang.org/download.html исходных кодов].<br />
<br />
Как программист, не удержусь от пояснения, зачем было использовать этот с виду громоздкий и неудобный язык. Он громоздок и неудобен действительно лишь с виду, для написания программ вроде hello world, однако предоставляет прекрасный инструментарий многопоточного и распределённого программирования. Это позволит вам единожды написанную и собранную программу использовать на огромных кластерах, состоящих из машин любой архитектуры, в которые будет проще простого добавить новые вычислительные мощности. Даже Java не обладает подобными возможностями. Именно поэтому ejabberd считается одним из самых быстрых и масштабируемых серверов протокола XMPP.<br />
<br />
Но довольно лирики.<br />
wget http://erlang.org/download/otp_src_R13B01.tar.gz<br />
<br />
Если у вас наличествуют все инструменты, библиотеки и исходные коды, приступим.<br />
<br />
Создадим временный каталог для наших сборок:<br />
mkdir buildtmp<br />
<br />
===erlang===<br />
В моём случае скачанный архив называется otp_src_R13B01.tar.gz. Распаковываем его во временный каталог:<br />
tar zxf otp_src_R13B01.tar.gz -C buildtmp<br />
<br />
Переходим в каталог и собираем erlang:<br />
cd buildtmp/otp_src_R13B01<br />
./configure --prefix=/usr --sysconfdir=/etc<br />
make<br />
make install<br />
<br />
Конечно же, следим за процессом, а не просто набираем команды. Программа сборки может сообщить об ошибке, но не каждый error или warning означает неисправимую ошибку. Например, процесс конфигурирования (команда configure) может сообщить, что не нашла компилятора java, библиотек odbc и wx, но это не является ошибкой. Просто соответствующие части erlang-а будут отключены. Перечисленные библиотеки нам не понадобятся для работы ejabberd.<br />
<br />
После сборки вернёмся в домашний каталог командой '''cd'''.<br />
<br />
===ejabberd===<br />
В моём случае архив называется ejabberd-2.0.5.tar.gz. Распаковываем его во временный каталог:<br />
tar zxf ejabberd-2.0.5.tar.gz -С buildtmp <br />
<br />
Переходим в каталог с исходниками и собираем ejabberd:<br />
cd buildtmp/ejabberd-2.0.5/src<br />
./configure<br />
make<br />
make install<br />
<br />
После всех этих манипуляций все нужные файлы разложены согласно традициям UNIX/Linux. Конфиги, в частности,- в /etc/ejabberd. Скрипт запуска - /sbin/ejabberdctl - отрабатывает команду start, что позволяет сразу добавить в rc.d, хотя лучше всё же написать правильный скрипт управления службой согласно правилам вашего дистрибутива.<br />
}}<br />
<br />
==Настройка==<br />
А дальше надо настроить сервер: что делать при загрузке, какие модули использовать, какие порты прослушивать, и т.п.<br />
<br />
Настройка сервера сводится к редактированию файла конфигурации '''/etc/ejabberd/ejabberd.yml''' (путь показан на примере Debian GNU/Linux, в других дистрибутивах или при самостоятельной сборке из исходных кодов путь может отличаться). Откройте этот файл от пользователя '''root''' в любом удобном для Вас текстовом редакторе, после чего найдите следующие секции: секцию '''acl''' и секцию '''hosts'''.<br />
<br />
В первом параметре задается [[Jabber ID]] администратора, а во втором - доменное имя сервера. Приведите эти строки примерно к такому виду:<br />
<br />
<pre><br />
acl:<br />
admin:<br />
user:<br />
- "admin": "myjabber.ath.cx"<br />
## hosts: Domains served by ejabberd.<br />
## You can define one or several, for example:<br />
## hosts:<br />
## - "example.net"<br />
## - "example.com"<br />
## - "example.org"<br />
hosts:<br />
- "myjabber.ath.cx"<br />
</pre><br />
<br />
В данном случае [[JID]] администратора задан [xmpp:admin@myjabber.ath.cx admin@myjabber.ath.cx], а имя сервера, как уже условились выше - myjabber.ath.cx.<br />
<br />
Теперь в том же файле найдите секцию access_rules, а в ней - параметр register:<br />
<br />
<pre><br />
access_rules:<br />
register:<br />
- allow<br />
</pre><br />
<br />
и замените '''deny''' на '''allow''' - без этого пользователи сервера не смогут регистрироваться напрямую из своего Jabber-клиента. <br />
<br />
Сохраните изменения и перезапустите ejabberd командой<br />
<br />
/etc/init.d/ejabberd restart<br />
<br />
<center><br />
<gallery><br />
Изображение:Ejabber lin install login 01.png|Логин в веб-интерфейсе<br />
Изображение:Ejabberd lin install 01.png|Сервисы и статистика сервера<br />
</gallery><br />
</center><br />
<br />
После этого создайте нового пользователя [xmpp:admin@myjabber.ath.cx admin@myjabber.ath.cx] используя Ваш Jabber-клиент. В [[Браузер сервисов|браузере сервисов]] для этой учетной записи будут доступны основные функции администрирования, а используя параметры этого аккаунта Вы сможете авторизоваться в веб-интерфейсе по адресу http://myjabber.ath.cx:5280/admin<br />
<br />
==Ссылки==<br />
<br />
* [[Свой сервер: подробное руководство по установке ejabberd]]<br />
* [http://ylsoftware.com/news/499 Настройка ведения логов в конференции]<br />
* [http://linuxoid.in/RRD:_Статистика_онлайн-пользователей_для_ejabberd Графическая статистика онлайн-пользователей]<br />
<br />
[[Category:Свой сервер]]</div>Rainhttps://jabberworld.info/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_ejabberd_%D0%BF%D0%BE%D0%B4_Linux&diff=10211Установка ejabberd под Linux2023-11-02T15:36:09Z<p>Rain: К черту OpenSUSE. Штатно в репозитории нет, ссылка неактуальна, в актуальных пусто.</p>
<hr />
<div>Рассмотрим установку сервера [[ejabberd]] на компьютеры под управлением одного из дистрибутивов GNU/Linux для использования в локальной сети с открытым доступом из Интернет и с использованием службы DynDNS.<br />
<br />
Предполагается, что у Вас уже установлена операционная система, настроен доступ в Интернет, а доменное имя на DynDNS (допустим, это будет '''myjabber.ath.cx''') указывает на внешний адрес Вашего компьютера (либо тот, который доступен из Вашей локальной сети, если Вы настраиваете сервер без возможности подключения к нему из Интернета).<br />
<br />
[[Ejabberd]] может быть установлен на ваш сервер различными способами. Опишу три по убыванию предпочтительности:<br />
<br />
# Установка из репозитория/портов. Идеальный по оптимизации и самый простой вариант.<br />
# Сборка из исходного кода. Если этого пакета нет в репозиториях к вашему дистрибутиву, но очень хочется, чтобы сервер был оптимизированным и работал без ошибок - засучиваем рукава и переходим к соответствующему разделу. Тут вам понадобятся некоторые знания о Linux и/или помощь [[ru_wikipedia:Гуру|гуру]].<br />
# Предварительно собранные бинарные файлы с инсталлятором. Вариант весьма прост, но вряд ли оптимизирован именно под ваш дистрибутив. <br />
<br />
Далее подробно рассмотрены эти варианты.<br />
__TOC__<br />
==Установка из репозитория==<br />
Дистрибутивов Linux великое множество, и нет никакой возможности рассмотреть детали установки в каждом из них. Упомянем наиболее популярные (предполагается наличие прав root):<br />
<br />
===Fedora===<br />
По умолчанию нужный репозиторий обычно подключен.<br />
yum install ejabberd<br />
<br />
===Debian-based дистрибутивы (Debian, *Ubuntu и другие)===<br />
Ejabberd входит в основную ветку репозитория, поэтому для установки просто скомандуйте:<br />
apt-get install ejabberd<br />
<br />
===Gentoo===<br />
Для установки ejabberd в Gentoo GNU/Linux выполните команды<br />
echo "net-im/ejabberd pam ssl zlib mod_muc mod_pubsub web" >> /etc/portage/package.use<br />
emerge ejabberd<br />
<br />
==Установка готовых бинарников==<br />
Установка из готовых бинарных пакетов делается за несколько простых шагов:<br />
<br />
* Скачиваете подходящий '''run'''-файл по адресу https://www.process-one.net/en/ejabberd/archive/<br />
* Запускаете командой '''bash ejabberd-*.run'''<br />
* Cледуете указаниям программы установки.<br />
<br />
==Сборка из исходников==<br />
{{Hider hiding<br />
|title=Пример для версии 2.0.5<br />
|content=<br />
Рассмотрим сборку stable-версии ejabberd-2.0.5.<br />
<br />
Для начала нужно, чтобы на сервере был установлен компилятор gcc и необходимые библиотеки (включая devel-части). Проверьте, есть ли у вас:<br />
* GNU Make<br />
* GNU C compiler (GCC)<br />
* libexpat 1.95 или выше<br />
* OpenSSL 0.9.6 или выше<br />
* Zlib 1.2.3<br />
* GNU Iconv 1.8 или выше<br />
* flex/yacc<br />
<br />
В разных дистрибутивах проверка и установка делается разными способами. Дистрибутивов много, описывать каждый смысла не имеет. Если вы не знаете, как это сделать на вашем сервере, обратитесь к документации или гуру по данному дистрибутиву.<br />
<br />
Для простоты операций будем работать пользователем root в его домашнем каталоге. Не забудьте потом прибраться.<br />
<br />
Итак, нам нужен исходный код ejabberd. Идём на [http://www.ejabberd.im официальный сайт] и выбираем, что нужно. Лучше выбирать stable версию, но если вы очень любите новые фишки и не боитесь нестабильной работы, то берите beta, testing или [[ru_wikipedia:Subversion|SVN]] версии.<br />
<br />
Я выбрал stable-версию 2.0.5 и скачал её:<br />
wget http://www.process-one.net/downloads/ejabberd/2.0.5/ejabberd-2.0.5.tar.gz<br />
<br />
Конечно же, у вас есть эта удобнейшая утилита - wget. ;)<br />
<br />
Ещё нам понадобится свеженький [[ru_wikipedia:Erlang|Erlang]] - это компилятор языка, на котором написан ejabberd. Если Erlang есть в вашем репозитории, то лучше воспользоваться им. Если нет - покажу, как собрать его из [http://erlang.org/download.html исходных кодов].<br />
<br />
Как программист, не удержусь от пояснения, зачем было использовать этот с виду громоздкий и неудобный язык. Он громоздок и неудобен действительно лишь с виду, для написания программ вроде hello world, однако предоставляет прекрасный инструментарий многопоточного и распределённого программирования. Это позволит вам единожды написанную и собранную программу использовать на огромных кластерах, состоящих из машин любой архитектуры, в которые будет проще простого добавить новые вычислительные мощности. Даже Java не обладает подобными возможностями. Именно поэтому ejabberd считается одним из самых быстрых и масштабируемых серверов протокола XMPP.<br />
<br />
Но довольно лирики.<br />
wget http://erlang.org/download/otp_src_R13B01.tar.gz<br />
<br />
Если у вас наличествуют все инструменты, библиотеки и исходные коды, приступим.<br />
<br />
Создадим временный каталог для наших сборок:<br />
mkdir buildtmp<br />
<br />
===erlang===<br />
В моём случае скачанный архив называется otp_src_R13B01.tar.gz. Распаковываем его во временный каталог:<br />
tar zxf otp_src_R13B01.tar.gz -C buildtmp<br />
<br />
Переходим в каталог и собираем erlang:<br />
cd buildtmp/otp_src_R13B01<br />
./configure --prefix=/usr --sysconfdir=/etc<br />
make<br />
make install<br />
<br />
Конечно же, следим за процессом, а не просто набираем команды. Программа сборки может сообщить об ошибке, но не каждый error или warning означает неисправимую ошибку. Например, процесс конфигурирования (команда configure) может сообщить, что не нашла компилятора java, библиотек odbc и wx, но это не является ошибкой. Просто соответствующие части erlang-а будут отключены. Перечисленные библиотеки нам не понадобятся для работы ejabberd.<br />
<br />
После сборки вернёмся в домашний каталог командой '''cd'''.<br />
<br />
===ejabberd===<br />
В моём случае архив называется ejabberd-2.0.5.tar.gz. Распаковываем его во временный каталог:<br />
tar zxf ejabberd-2.0.5.tar.gz -С buildtmp <br />
<br />
Переходим в каталог с исходниками и собираем ejabberd:<br />
cd buildtmp/ejabberd-2.0.5/src<br />
./configure<br />
make<br />
make install<br />
<br />
После всех этих манипуляций все нужные файлы разложены согласно традициям UNIX/Linux. Конфиги, в частности,- в /etc/ejabberd. Скрипт запуска - /sbin/ejabberdctl - отрабатывает команду start, что позволяет сразу добавить в rc.d, хотя лучше всё же написать правильный скрипт управления службой согласно правилам вашего дистрибутива.<br />
}}<br />
<br />
==Настройка==<br />
А дальше надо настроить сервер: что делать при загрузке, какие модули использовать, какие порты прослушивать, и т.п.<br />
<br />
Настройка сервера сводится к редактированию файла конфигурации '''/etc/ejabberd/ejabberd.yml''' (путь показан на примере Debian GNU/Linux, в других дистрибутивах или при самостоятельной сборке из исходных кодов путь может отличаться). Откройте этот файл от пользователя '''root''' в любом удобном для Вас текстовом редакторе, после чего найдите следующие секции: секцию '''acl''' и секцию '''hosts'''.<br />
<br />
В первом параметре задается [[Jabber ID]] администратора, а во втором - доменное имя сервера. Приведите эти строки примерно к такому виду:<br />
<br />
<pre><br />
acl:<br />
admin:<br />
user:<br />
- "admin": "myjabber.ath.cx"<br />
## hosts: Domains served by ejabberd.<br />
## You can define one or several, for example:<br />
## hosts:<br />
## - "example.net"<br />
## - "example.com"<br />
## - "example.org"<br />
hosts:<br />
- "myjabber.ath.cx"<br />
</pre><br />
<br />
В данном случае [[JID]] администратора задан [xmpp:admin@myjabber.ath.cx admin@myjabber.ath.cx], а имя сервера, как уже условились выше - myjabber.ath.cx.<br />
<br />
Теперь в том же файле найдите секцию access_rules, а в ней - параметр register:<br />
<br />
<pre><br />
access_rules:<br />
register:<br />
- allow<br />
</pre><br />
<br />
и замените '''deny''' на '''allow''' - без этого пользователи сервера не смогут регистрироваться напрямую из своего Jabber-клиента.<br />
<br />
[[Изображение:Ejabber lin install login 01.png|thumb|left|Логин в веб-интерфейсе]]<br />
<br />
<br />
Сохраните изменения и перезапустите ejabberd командой<br />
<br />
/etc/init.d/ejabberd restart<br />
{{-}}<br />
<br />
[[Изображение:Ejabberd lin install 01.png|thumb|left|Сервисы и статистика сервера]]<br />
<br />
<br />
После этого создайте нового пользователя [xmpp:admin@myjabber.ath.cx admin@myjabber.ath.cx] используя Ваш Jabber-клиент. В [[Браузер сервисов|браузере сервисов]] для этой учетной записи будут доступны основные функции администрирования, а используя параметры этого аккаунта Вы сможете авторизоваться в веб-интерфейсе по адресу http://myjabber.ath.cx:5280/admin<br />
{{-}}<br />
<br />
==Ссылки==<br />
<br />
* [[Свой сервер: подробное руководство по установке ejabberd]]<br />
* [http://ylsoftware.com/news/499 Настройка ведения логов в конференции]<br />
* [http://linuxoid.in/RRD:_Статистика_онлайн-пользователей_для_ejabberd Графическая статистика онлайн-пользователей]<br />
<br />
[[Category:Свой сервер]]</div>Rainhttps://jabberworld.info/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_ejabberd_%D0%BF%D0%BE%D0%B4_Linux&diff=10210Установка ejabberd под Linux2023-11-02T15:29:53Z<p>Rain: /* Настройка */</p>
<hr />
<div>Рассмотрим установку сервера [[ejabberd]] на компьютеры под управлением одного из дистрибутивов GNU/Linux для использования в локальной сети с открытым доступом из Интернет и с использованием службы DynDNS.<br />
<br />
Предполагается, что у Вас уже установлена операционная система, настроен доступ в Интернет, а доменное имя на DynDNS (допустим, это будет '''myjabber.ath.cx''') указывает на внешний адрес Вашего компьютера (либо тот, который доступен из Вашей локальной сети, если Вы настраиваете сервер без возможности подключения к нему из Интернета).<br />
<br />
[[Ejabberd]] может быть установлен на ваш сервер различными способами. Опишу три по убыванию предпочтительности:<br />
<br />
# Установка из репозитория/портов. Идеальный по оптимизации и самый простой вариант.<br />
# Сборка из исходного кода. Если этого пакета нет в репозиториях к вашему дистрибутиву, но очень хочется, чтобы сервер был оптимизированным и работал без ошибок - засучиваем рукава и переходим к соответствующему разделу. Тут вам понадобятся некоторые знания о Linux и/или помощь [[ru_wikipedia:Гуру|гуру]].<br />
# Предварительно собранные бинарные файлы с инсталлятором. Вариант весьма прост, но вряд ли оптимизирован именно под ваш дистрибутив. <br />
<br />
Далее подробно рассмотрены эти варианты.<br />
__TOC__<br />
==Установка из репозитория==<br />
Дистрибутивов Linux великое множество, и нет никакой возможности рассмотреть детали установки в каждом из них. Упомянем наиболее популярные (предполагается наличие прав root):<br />
<br />
===openSuSE 11.4===<br />
Сначала подключим репозиторий, посвящённый программам обмена сообщениями:<br />
<nowiki>zypper addrepo http://download.opensuse.org/repositories/server:/messaging/openSUSE_11.4/ Messaging</nowiki><br />
:Потом установим сервер:<br />
zypper install ejabberd<br />
<br />
===Fedora===<br />
По умолчанию нужный репозиторий обычно подключен.<br />
yum install ejabberd<br />
<br />
===Debian-based дистрибутивы (Debian, *Ubuntu и другие)===<br />
Ejabberd входит в основную ветку репозитория, поэтому для установки просто скомандуйте:<br />
apt-get install ejabberd<br />
<br />
===Gentoo===<br />
Для установки ejabberd в Gentoo GNU/Linux выполните команды<br />
echo "net-im/ejabberd pam ssl zlib mod_muc mod_pubsub web" >> /etc/portage/package.use<br />
emerge ejabberd<br />
<br />
==Установка готовых бинарников==<br />
Установка из готовых бинарных пакетов делается за несколько простых шагов:<br />
<br />
* Скачиваете подходящий '''run'''-файл по адресу https://www.process-one.net/en/ejabberd/archive/<br />
* Запускаете командой '''bash ejabberd-*.run'''<br />
* Cледуете указаниям программы установки.<br />
<br />
==Сборка из исходников==<br />
{{Hider hiding<br />
|title=Пример для версии 2.0.5<br />
|content=<br />
Рассмотрим сборку stable-версии ejabberd-2.0.5.<br />
<br />
Для начала нужно, чтобы на сервере был установлен компилятор gcc и необходимые библиотеки (включая devel-части). Проверьте, есть ли у вас:<br />
* GNU Make<br />
* GNU C compiler (GCC)<br />
* libexpat 1.95 или выше<br />
* OpenSSL 0.9.6 или выше<br />
* Zlib 1.2.3<br />
* GNU Iconv 1.8 или выше<br />
* flex/yacc<br />
<br />
В разных дистрибутивах проверка и установка делается разными способами. Дистрибутивов много, описывать каждый смысла не имеет. Если вы не знаете, как это сделать на вашем сервере, обратитесь к документации или гуру по данному дистрибутиву.<br />
<br />
Для простоты операций будем работать пользователем root в его домашнем каталоге. Не забудьте потом прибраться.<br />
<br />
Итак, нам нужен исходный код ejabberd. Идём на [http://www.ejabberd.im официальный сайт] и выбираем, что нужно. Лучше выбирать stable версию, но если вы очень любите новые фишки и не боитесь нестабильной работы, то берите beta, testing или [[ru_wikipedia:Subversion|SVN]] версии.<br />
<br />
Я выбрал stable-версию 2.0.5 и скачал её:<br />
wget http://www.process-one.net/downloads/ejabberd/2.0.5/ejabberd-2.0.5.tar.gz<br />
<br />
Конечно же, у вас есть эта удобнейшая утилита - wget. ;)<br />
<br />
Ещё нам понадобится свеженький [[ru_wikipedia:Erlang|Erlang]] - это компилятор языка, на котором написан ejabberd. Если Erlang есть в вашем репозитории, то лучше воспользоваться им. Если нет - покажу, как собрать его из [http://erlang.org/download.html исходных кодов].<br />
<br />
Как программист, не удержусь от пояснения, зачем было использовать этот с виду громоздкий и неудобный язык. Он громоздок и неудобен действительно лишь с виду, для написания программ вроде hello world, однако предоставляет прекрасный инструментарий многопоточного и распределённого программирования. Это позволит вам единожды написанную и собранную программу использовать на огромных кластерах, состоящих из машин любой архитектуры, в которые будет проще простого добавить новые вычислительные мощности. Даже Java не обладает подобными возможностями. Именно поэтому ejabberd считается одним из самых быстрых и масштабируемых серверов протокола XMPP.<br />
<br />
Но довольно лирики.<br />
wget http://erlang.org/download/otp_src_R13B01.tar.gz<br />
<br />
Если у вас наличествуют все инструменты, библиотеки и исходные коды, приступим.<br />
<br />
Создадим временный каталог для наших сборок:<br />
mkdir buildtmp<br />
<br />
===erlang===<br />
В моём случае скачанный архив называется otp_src_R13B01.tar.gz. Распаковываем его во временный каталог:<br />
tar zxf otp_src_R13B01.tar.gz -C buildtmp<br />
<br />
Переходим в каталог и собираем erlang:<br />
cd buildtmp/otp_src_R13B01<br />
./configure --prefix=/usr --sysconfdir=/etc<br />
make<br />
make install<br />
<br />
Конечно же, следим за процессом, а не просто набираем команды. Программа сборки может сообщить об ошибке, но не каждый error или warning означает неисправимую ошибку. Например, процесс конфигурирования (команда configure) может сообщить, что не нашла компилятора java, библиотек odbc и wx, но это не является ошибкой. Просто соответствующие части erlang-а будут отключены. Перечисленные библиотеки нам не понадобятся для работы ejabberd.<br />
<br />
После сборки вернёмся в домашний каталог командой '''cd'''.<br />
<br />
===ejabberd===<br />
В моём случае архив называется ejabberd-2.0.5.tar.gz. Распаковываем его во временный каталог:<br />
tar zxf ejabberd-2.0.5.tar.gz -С buildtmp <br />
<br />
Переходим в каталог с исходниками и собираем ejabberd:<br />
cd buildtmp/ejabberd-2.0.5/src<br />
./configure<br />
make<br />
make install<br />
<br />
После всех этих манипуляций все нужные файлы разложены согласно традициям UNIX/Linux. Конфиги, в частности,- в /etc/ejabberd. Скрипт запуска - /sbin/ejabberdctl - отрабатывает команду start, что позволяет сразу добавить в rc.d, хотя лучше всё же написать правильный скрипт управления службой согласно правилам вашего дистрибутива.<br />
}}<br />
<br />
==Настройка==<br />
А дальше надо настроить сервер: что делать при загрузке, какие модули использовать, какие порты прослушивать, и т.п.<br />
<br />
Настройка сервера сводится к редактированию файла конфигурации '''/etc/ejabberd/ejabberd.yml''' (путь показан на примере Debian GNU/Linux, в других дистрибутивах или при самостоятельной сборке из исходных кодов путь может отличаться). Откройте этот файл от пользователя '''root''' в любом удобном для Вас текстовом редакторе, после чего найдите следующие секции: секцию '''acl''' и секцию '''hosts'''.<br />
<br />
В первом параметре задается [[Jabber ID]] администратора, а во втором - доменное имя сервера. Приведите эти строки примерно к такому виду:<br />
<br />
<pre><br />
acl:<br />
admin:<br />
user:<br />
- "admin": "myjabber.ath.cx"<br />
## hosts: Domains served by ejabberd.<br />
## You can define one or several, for example:<br />
## hosts:<br />
## - "example.net"<br />
## - "example.com"<br />
## - "example.org"<br />
hosts:<br />
- "myjabber.ath.cx"<br />
</pre><br />
<br />
В данном случае [[JID]] администратора задан [xmpp:admin@myjabber.ath.cx admin@myjabber.ath.cx], а имя сервера, как уже условились выше - myjabber.ath.cx.<br />
<br />
Теперь в том же файле найдите секцию access_rules, а в ней - параметр register:<br />
<br />
<pre><br />
access_rules:<br />
register:<br />
- allow<br />
</pre><br />
<br />
и замените '''deny''' на '''allow''' - без этого пользователи сервера не смогут регистрироваться напрямую из своего Jabber-клиента.<br />
<br />
[[Изображение:Ejabber lin install login 01.png|thumb|left|Логин в веб-интерфейсе]]<br />
<br />
<br />
Сохраните изменения и перезапустите ejabberd командой<br />
<br />
/etc/init.d/ejabberd restart<br />
{{-}}<br />
<br />
[[Изображение:Ejabberd lin install 01.png|thumb|left|Сервисы и статистика сервера]]<br />
<br />
<br />
После этого создайте нового пользователя [xmpp:admin@myjabber.ath.cx admin@myjabber.ath.cx] используя Ваш Jabber-клиент. В [[Браузер сервисов|браузере сервисов]] для этой учетной записи будут доступны основные функции администрирования, а используя параметры этого аккаунта Вы сможете авторизоваться в веб-интерфейсе по адресу http://myjabber.ath.cx:5280/admin<br />
{{-}}<br />
<br />
==Ссылки==<br />
<br />
* [[Свой сервер: подробное руководство по установке ejabberd]]<br />
* [http://ylsoftware.com/news/499 Настройка ведения логов в конференции]<br />
* [http://linuxoid.in/RRD:_Статистика_онлайн-пользователей_для_ejabberd Графическая статистика онлайн-пользователей]<br />
<br />
[[Category:Свой сервер]]</div>Rainhttps://jabberworld.info/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_ejabberd_%D0%BF%D0%BE%D0%B4_Linux&diff=10209Установка ejabberd под Linux2023-11-02T15:29:26Z<p>Rain: Под современный конфиг</p>
<hr />
<div>Рассмотрим установку сервера [[ejabberd]] на компьютеры под управлением одного из дистрибутивов GNU/Linux для использования в локальной сети с открытым доступом из Интернет и с использованием службы DynDNS.<br />
<br />
Предполагается, что у Вас уже установлена операционная система, настроен доступ в Интернет, а доменное имя на DynDNS (допустим, это будет '''myjabber.ath.cx''') указывает на внешний адрес Вашего компьютера (либо тот, который доступен из Вашей локальной сети, если Вы настраиваете сервер без возможности подключения к нему из Интернета).<br />
<br />
[[Ejabberd]] может быть установлен на ваш сервер различными способами. Опишу три по убыванию предпочтительности:<br />
<br />
# Установка из репозитория/портов. Идеальный по оптимизации и самый простой вариант.<br />
# Сборка из исходного кода. Если этого пакета нет в репозиториях к вашему дистрибутиву, но очень хочется, чтобы сервер был оптимизированным и работал без ошибок - засучиваем рукава и переходим к соответствующему разделу. Тут вам понадобятся некоторые знания о Linux и/или помощь [[ru_wikipedia:Гуру|гуру]].<br />
# Предварительно собранные бинарные файлы с инсталлятором. Вариант весьма прост, но вряд ли оптимизирован именно под ваш дистрибутив. <br />
<br />
Далее подробно рассмотрены эти варианты.<br />
__TOC__<br />
==Установка из репозитория==<br />
Дистрибутивов Linux великое множество, и нет никакой возможности рассмотреть детали установки в каждом из них. Упомянем наиболее популярные (предполагается наличие прав root):<br />
<br />
===openSuSE 11.4===<br />
Сначала подключим репозиторий, посвящённый программам обмена сообщениями:<br />
<nowiki>zypper addrepo http://download.opensuse.org/repositories/server:/messaging/openSUSE_11.4/ Messaging</nowiki><br />
:Потом установим сервер:<br />
zypper install ejabberd<br />
<br />
===Fedora===<br />
По умолчанию нужный репозиторий обычно подключен.<br />
yum install ejabberd<br />
<br />
===Debian-based дистрибутивы (Debian, *Ubuntu и другие)===<br />
Ejabberd входит в основную ветку репозитория, поэтому для установки просто скомандуйте:<br />
apt-get install ejabberd<br />
<br />
===Gentoo===<br />
Для установки ejabberd в Gentoo GNU/Linux выполните команды<br />
echo "net-im/ejabberd pam ssl zlib mod_muc mod_pubsub web" >> /etc/portage/package.use<br />
emerge ejabberd<br />
<br />
==Установка готовых бинарников==<br />
Установка из готовых бинарных пакетов делается за несколько простых шагов:<br />
<br />
* Скачиваете подходящий '''run'''-файл по адресу https://www.process-one.net/en/ejabberd/archive/<br />
* Запускаете командой '''bash ejabberd-*.run'''<br />
* Cледуете указаниям программы установки.<br />
<br />
==Сборка из исходников==<br />
{{Hider hiding<br />
|title=Пример для версии 2.0.5<br />
|content=<br />
Рассмотрим сборку stable-версии ejabberd-2.0.5.<br />
<br />
Для начала нужно, чтобы на сервере был установлен компилятор gcc и необходимые библиотеки (включая devel-части). Проверьте, есть ли у вас:<br />
* GNU Make<br />
* GNU C compiler (GCC)<br />
* libexpat 1.95 или выше<br />
* OpenSSL 0.9.6 или выше<br />
* Zlib 1.2.3<br />
* GNU Iconv 1.8 или выше<br />
* flex/yacc<br />
<br />
В разных дистрибутивах проверка и установка делается разными способами. Дистрибутивов много, описывать каждый смысла не имеет. Если вы не знаете, как это сделать на вашем сервере, обратитесь к документации или гуру по данному дистрибутиву.<br />
<br />
Для простоты операций будем работать пользователем root в его домашнем каталоге. Не забудьте потом прибраться.<br />
<br />
Итак, нам нужен исходный код ejabberd. Идём на [http://www.ejabberd.im официальный сайт] и выбираем, что нужно. Лучше выбирать stable версию, но если вы очень любите новые фишки и не боитесь нестабильной работы, то берите beta, testing или [[ru_wikipedia:Subversion|SVN]] версии.<br />
<br />
Я выбрал stable-версию 2.0.5 и скачал её:<br />
wget http://www.process-one.net/downloads/ejabberd/2.0.5/ejabberd-2.0.5.tar.gz<br />
<br />
Конечно же, у вас есть эта удобнейшая утилита - wget. ;)<br />
<br />
Ещё нам понадобится свеженький [[ru_wikipedia:Erlang|Erlang]] - это компилятор языка, на котором написан ejabberd. Если Erlang есть в вашем репозитории, то лучше воспользоваться им. Если нет - покажу, как собрать его из [http://erlang.org/download.html исходных кодов].<br />
<br />
Как программист, не удержусь от пояснения, зачем было использовать этот с виду громоздкий и неудобный язык. Он громоздок и неудобен действительно лишь с виду, для написания программ вроде hello world, однако предоставляет прекрасный инструментарий многопоточного и распределённого программирования. Это позволит вам единожды написанную и собранную программу использовать на огромных кластерах, состоящих из машин любой архитектуры, в которые будет проще простого добавить новые вычислительные мощности. Даже Java не обладает подобными возможностями. Именно поэтому ejabberd считается одним из самых быстрых и масштабируемых серверов протокола XMPP.<br />
<br />
Но довольно лирики.<br />
wget http://erlang.org/download/otp_src_R13B01.tar.gz<br />
<br />
Если у вас наличествуют все инструменты, библиотеки и исходные коды, приступим.<br />
<br />
Создадим временный каталог для наших сборок:<br />
mkdir buildtmp<br />
<br />
===erlang===<br />
В моём случае скачанный архив называется otp_src_R13B01.tar.gz. Распаковываем его во временный каталог:<br />
tar zxf otp_src_R13B01.tar.gz -C buildtmp<br />
<br />
Переходим в каталог и собираем erlang:<br />
cd buildtmp/otp_src_R13B01<br />
./configure --prefix=/usr --sysconfdir=/etc<br />
make<br />
make install<br />
<br />
Конечно же, следим за процессом, а не просто набираем команды. Программа сборки может сообщить об ошибке, но не каждый error или warning означает неисправимую ошибку. Например, процесс конфигурирования (команда configure) может сообщить, что не нашла компилятора java, библиотек odbc и wx, но это не является ошибкой. Просто соответствующие части erlang-а будут отключены. Перечисленные библиотеки нам не понадобятся для работы ejabberd.<br />
<br />
После сборки вернёмся в домашний каталог командой '''cd'''.<br />
<br />
===ejabberd===<br />
В моём случае архив называется ejabberd-2.0.5.tar.gz. Распаковываем его во временный каталог:<br />
tar zxf ejabberd-2.0.5.tar.gz -С buildtmp <br />
<br />
Переходим в каталог с исходниками и собираем ejabberd:<br />
cd buildtmp/ejabberd-2.0.5/src<br />
./configure<br />
make<br />
make install<br />
<br />
После всех этих манипуляций все нужные файлы разложены согласно традициям UNIX/Linux. Конфиги, в частности,- в /etc/ejabberd. Скрипт запуска - /sbin/ejabberdctl - отрабатывает команду start, что позволяет сразу добавить в rc.d, хотя лучше всё же написать правильный скрипт управления службой согласно правилам вашего дистрибутива.<br />
}}<br />
<br />
==Настройка==<br />
А дальше надо настроить сервер: что делать при загрузке, какие модули использовать, какие порты прослушивать, и т.п.<br />
<br />
Настройка сервера сводится к редактированию файла конфигурации '''/etc/ejabberd/ejabberd.yml''' (путь показан на примере Debian GNU/Linux, в других дистрибутивах или при самостоятельной сборке из исходных кодов путь может отличаться). Откройте этот файл от пользователя root в любом удобном для Вас текстовом редакторе, после чего найдите следующие секции: секцию '''acl''' и секцию '''hosts'''.<br />
<br />
В первом параметре задается [[Jabber ID]] администратора, а во втором - доменное имя сервера. Приведите эти строки примерно к такому виду:<br />
<br />
<pre><br />
acl:<br />
admin:<br />
user:<br />
- "admin": "myjabber.ath.cx"<br />
## hosts: Domains served by ejabberd.<br />
## You can define one or several, for example:<br />
## hosts:<br />
## - "example.net"<br />
## - "example.com"<br />
## - "example.org"<br />
hosts:<br />
- "myjabber.ath.cx"<br />
</pre><br />
<br />
В данном случае [[JID]] администратора задан [xmpp:admin@myjabber.ath.cx admin@myjabber.ath.cx], а имя сервера, как уже условились выше - myjabber.ath.cx.<br />
<br />
Теперь в том же файле найдите секцию access_rules, а в ней - параметр register:<br />
<br />
<pre><br />
access_rules:<br />
register:<br />
- allow<br />
</pre><br />
<br />
и замените '''deny''' на '''allow''' - без этого пользователи сервера не смогут регистрироваться напрямую из своего Jabber-клиента.<br />
<br />
[[Изображение:Ejabber lin install login 01.png|thumb|left|Логин в веб-интерфейсе]]<br />
<br />
<br />
Сохраните изменения и перезапустите ejabberd командой<br />
<br />
/etc/init.d/ejabberd restart<br />
{{-}}<br />
<br />
[[Изображение:Ejabberd lin install 01.png|thumb|left|Сервисы и статистика сервера]]<br />
<br />
<br />
После этого создайте нового пользователя [xmpp:admin@myjabber.ath.cx admin@myjabber.ath.cx] используя Ваш Jabber-клиент. В [[Браузер сервисов|браузере сервисов]] для этой учетной записи будут доступны основные функции администрирования, а используя параметры этого аккаунта Вы сможете авторизоваться в веб-интерфейсе по адресу http://myjabber.ath.cx:5280/admin<br />
{{-}}<br />
<br />
==Ссылки==<br />
<br />
* [[Свой сервер: подробное руководство по установке ejabberd]]<br />
* [http://ylsoftware.com/news/499 Настройка ведения логов в конференции]<br />
* [http://linuxoid.in/RRD:_Статистика_онлайн-пользователей_для_ejabberd Графическая статистика онлайн-пользователей]<br />
<br />
[[Category:Свой сервер]]</div>Rainhttps://jabberworld.info/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_ejabberd_%D0%BF%D0%BE%D0%B4_Linux&diff=10208Установка ejabberd под Linux2023-11-02T13:00:36Z<p>Rain: Актуализировал</p>
<hr />
<div>Рассмотрим установку сервера [[ejabberd]] на компьютеры под управлением одного из дистрибутивов GNU/Linux для использования в локальной сети с открытым доступом из Интернет и с использованием службы DynDNS.<br />
<br />
Предполагается, что у Вас уже установлена операционная система, настроен доступ в Интернет, а доменное имя на DynDNS (допустим, это будет '''myjabber.ath.cx''') указывает на внешний адрес Вашего компьютера (либо тот, который доступен из Вашей локальной сети, если Вы настраиваете сервер без возможности подключения к нему из Интернета).<br />
<br />
[[Ejabberd]] может быть установлен на ваш сервер различными способами. Опишу три по убыванию предпочтительности:<br />
<br />
# Установка из репозитория/портов. Идеальный по оптимизации и самый простой вариант.<br />
# Сборка из исходного кода. Если этого пакета нет в репозиториях к вашему дистрибутиву, но очень хочется, чтобы сервер был оптимизированным и работал без ошибок - засучиваем рукава и переходим к соответствующему разделу. Тут вам понадобятся некоторые знания о Linux и/или помощь [[ru_wikipedia:Гуру|гуру]].<br />
# Предварительно собранные бинарные файлы с инсталлятором. Вариант весьма прост, но вряд ли оптимизирован именно под ваш дистрибутив. <br />
<br />
Далее подробно рассмотрены эти варианты.<br />
__TOC__<br />
==Установка из репозитория==<br />
Дистрибутивов Linux великое множество, и нет никакой возможности рассмотреть детали установки в каждом из них. Упомянем наиболее популярные (предполагается наличие прав root):<br />
<br />
===openSuSE 11.4===<br />
Сначала подключим репозиторий, посвящённый программам обмена сообщениями:<br />
<nowiki>zypper addrepo http://download.opensuse.org/repositories/server:/messaging/openSUSE_11.4/ Messaging</nowiki><br />
:Потом установим сервер:<br />
zypper install ejabberd<br />
<br />
===Fedora===<br />
По умолчанию нужный репозиторий обычно подключен.<br />
yum install ejabberd<br />
<br />
===Debian-based дистрибутивы (Debian, *Ubuntu и другие)===<br />
Ejabberd входит в основную ветку репозитория, поэтому для установки просто скомандуйте:<br />
apt-get install ejabberd<br />
<br />
===Gentoo===<br />
Для установки ejabberd в Gentoo GNU/Linux выполните команды<br />
echo "net-im/ejabberd pam ssl zlib mod_muc mod_pubsub web" >> /etc/portage/package.use<br />
emerge ejabberd<br />
<br />
==Установка готовых бинарников==<br />
Установка из готовых бинарных пакетов делается за несколько простых шагов:<br />
<br />
* Скачиваете подходящий '''run'''-файл по адресу https://www.process-one.net/en/ejabberd/archive/<br />
* Запускаете командой '''bash ejabberd-*.run'''<br />
* Cледуете указаниям программы установки.<br />
<br />
==Сборка из исходников==<br />
{{Hider hiding<br />
|title=Пример для версии 2.0.5<br />
|content=<br />
Рассмотрим сборку stable-версии ejabberd-2.0.5.<br />
<br />
Для начала нужно, чтобы на сервере был установлен компилятор gcc и необходимые библиотеки (включая devel-части). Проверьте, есть ли у вас:<br />
* GNU Make<br />
* GNU C compiler (GCC)<br />
* libexpat 1.95 или выше<br />
* OpenSSL 0.9.6 или выше<br />
* Zlib 1.2.3<br />
* GNU Iconv 1.8 или выше<br />
* flex/yacc<br />
<br />
В разных дистрибутивах проверка и установка делается разными способами. Дистрибутивов много, описывать каждый смысла не имеет. Если вы не знаете, как это сделать на вашем сервере, обратитесь к документации или гуру по данному дистрибутиву.<br />
<br />
Для простоты операций будем работать пользователем root в его домашнем каталоге. Не забудьте потом прибраться.<br />
<br />
Итак, нам нужен исходный код ejabberd. Идём на [http://www.ejabberd.im официальный сайт] и выбираем, что нужно. Лучше выбирать stable версию, но если вы очень любите новые фишки и не боитесь нестабильной работы, то берите beta, testing или [[ru_wikipedia:Subversion|SVN]] версии.<br />
<br />
Я выбрал stable-версию 2.0.5 и скачал её:<br />
wget http://www.process-one.net/downloads/ejabberd/2.0.5/ejabberd-2.0.5.tar.gz<br />
<br />
Конечно же, у вас есть эта удобнейшая утилита - wget. ;)<br />
<br />
Ещё нам понадобится свеженький [[ru_wikipedia:Erlang|Erlang]] - это компилятор языка, на котором написан ejabberd. Если Erlang есть в вашем репозитории, то лучше воспользоваться им. Если нет - покажу, как собрать его из [http://erlang.org/download.html исходных кодов].<br />
<br />
Как программист, не удержусь от пояснения, зачем было использовать этот с виду громоздкий и неудобный язык. Он громоздок и неудобен действительно лишь с виду, для написания программ вроде hello world, однако предоставляет прекрасный инструментарий многопоточного и распределённого программирования. Это позволит вам единожды написанную и собранную программу использовать на огромных кластерах, состоящих из машин любой архитектуры, в которые будет проще простого добавить новые вычислительные мощности. Даже Java не обладает подобными возможностями. Именно поэтому ejabberd считается одним из самых быстрых и масштабируемых серверов протокола XMPP.<br />
<br />
Но довольно лирики.<br />
wget http://erlang.org/download/otp_src_R13B01.tar.gz<br />
<br />
Если у вас наличествуют все инструменты, библиотеки и исходные коды, приступим.<br />
<br />
Создадим временный каталог для наших сборок:<br />
mkdir buildtmp<br />
<br />
===erlang===<br />
В моём случае скачанный архив называется otp_src_R13B01.tar.gz. Распаковываем его во временный каталог:<br />
tar zxf otp_src_R13B01.tar.gz -C buildtmp<br />
<br />
Переходим в каталог и собираем erlang:<br />
cd buildtmp/otp_src_R13B01<br />
./configure --prefix=/usr --sysconfdir=/etc<br />
make<br />
make install<br />
<br />
Конечно же, следим за процессом, а не просто набираем команды. Программа сборки может сообщить об ошибке, но не каждый error или warning означает неисправимую ошибку. Например, процесс конфигурирования (команда configure) может сообщить, что не нашла компилятора java, библиотек odbc и wx, но это не является ошибкой. Просто соответствующие части erlang-а будут отключены. Перечисленные библиотеки нам не понадобятся для работы ejabberd.<br />
<br />
После сборки вернёмся в домашний каталог командой '''cd'''.<br />
<br />
===ejabberd===<br />
В моём случае архив называется ejabberd-2.0.5.tar.gz. Распаковываем его во временный каталог:<br />
tar zxf ejabberd-2.0.5.tar.gz -С buildtmp <br />
<br />
Переходим в каталог с исходниками и собираем ejabberd:<br />
cd buildtmp/ejabberd-2.0.5/src<br />
./configure<br />
make<br />
make install<br />
<br />
После всех этих манипуляций все нужные файлы разложены согласно традициям UNIX/Linux. Конфиги, в частности,- в /etc/ejabberd. Скрипт запуска - /sbin/ejabberdctl - отрабатывает команду start, что позволяет сразу добавить в rc.d, хотя лучше всё же написать правильный скрипт управления службой согласно правилам вашего дистрибутива.<br />
}}<br />
<br />
==Настройка==<br />
А дальше надо настроить сервер: что делать при загрузке, какие модули использовать, какие порты прослушивать, и т.п.<br />
<br />
Настройка сервера сводится к редактированию файла конфигурации '''/etc/ejabberd/ejabberd.cfg''' (путь показан на примере Debian GNU/Linux, в других дистрибутивах или при самостоятельной сборке из исходных кодов путь может отличаться). Откройте этот файл от пользователя root в любом удобном для Вас текстовом редакторе, после чего найдите следующие строки:<br />
<br />
%% Admin user<br />
{acl, admin, {user, "", "localhost"}}.<br><br />
%% Hostname<br />
{hosts, ["example.com"]}.<br />
<br />
В первом параметре задается [[Jabber ID]] администратора, а во втором - доменное имя сервера. Приведите эти строки примерно к такому виду:<br />
<br />
%% Admin user<br />
{acl, admin, {user, "admin", "myjabber.ath.cx"}}.<br><br />
%% Hostname<br />
{hosts, ["myjabber.ath.cx"]}.<br />
<br />
В данном случае [[JID]] администратора задан [xmpp:admin@myjabber.ath.cx admin@myjabber.ath.cx], а имя сервера, как уже условились выше - myjabber.ath.cx.<br />
<br />
Теперь в том же файле найдите строки<br />
<br />
%% No username can be registered via in-band registration:<br />
%% To enable in-band registration, replace 'deny' with 'allow'<br />
{access, register, [{deny, all}]}.<br />
<br />
и замените '''deny''' на '''allow''' - без этого пользователи сервера не смогут регистрироваться напрямую из своего Jabber-клиента.<br />
<br />
[[Изображение:Ejabber lin install login 01.png|thumb|left|Логин в веб-интерфейсе]]<br />
<br />
<br />
Сохраните изменения и перезапустите ejabberd командой<br />
<br />
/etc/init.d/ejabberd restart<br />
{{-}}<br />
<br />
[[Изображение:Ejabberd lin install 01.png|thumb|left|Сервисы и статистика сервера]]<br />
<br />
<br />
После этого создайте нового пользователя [xmpp:admin@myjabber.ath.cx admin@myjabber.ath.cx] используя Ваш Jabber-клиент. В [[Браузер сервисов|браузере сервисов]] для этой учетной записи будут доступны основные функции администрирования, а используя параметры этого аккаунта Вы сможете авторизоваться в веб-интерфейсе по адресу http://myjabber.ath.cx:5280/admin<br />
{{-}}<br />
<br />
==Ссылки==<br />
<br />
* [[Свой сервер: подробное руководство по установке ejabberd]]<br />
* [http://ylsoftware.com/news/499 Настройка ведения логов в конференции]<br />
* [http://linuxoid.in/RRD:_Статистика_онлайн-пользователей_для_ejabberd Графическая статистика онлайн-пользователей]<br />
<br />
[[Category:Свой сервер]]</div>Rainhttps://jabberworld.info/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_ejabberd_%D0%BF%D0%BE%D0%B4_Linux&diff=10207Установка ejabberd под Linux2023-11-02T12:52:50Z<p>Rain: Поменял местами блоки</p>
<hr />
<div>Рассмотрим установку сервера [[ejabberd]] на компьютеры под управлением одного из дистрибутивов GNU/Linux для использования в локальной сети с открытым доступом из Интернет и с использованием службы DynDNS.<br />
<br />
Предполагается, что у Вас уже установлена операционная система, настроен доступ в Интернет, а доменное имя на DynDNS (допустим, это будет '''myjabber.ath.cx''') указывает на внешний адрес Вашего компьютера (либо тот, который доступен из Вашей локальной сети, если Вы настраиваете сервер без возможности подключения к нему из Интернета).<br />
<br />
[[Ejabberd]] может быть установлен на ваш сервер различными способами. Опишу три по убыванию предпочтительности:<br />
<br />
# Установка из репозитория/портов. Идеальный по оптимизации и самый простой вариант.<br />
# Сборка из исходного кода. Если этого пакета нет в репозиториях к вашему дистрибутиву, но очень хочется, чтобы сервер был оптимизированным и работал без ошибок - засучиваем рукава и переходим к соответствующему разделу. Тут вам понадобятся некоторые знания о Linux и/или помощь [[ru_wikipedia:Гуру|гуру]].<br />
# Предварительно собранные бинарные файлы с инсталлятором. Вариант весьма прост, но вряд ли оптимизирован именно под ваш дистрибутив. <br />
<br />
Далее подробно рассмотрены эти варианты.<br />
__TOC__<br />
==Установка из репозитория==<br />
Дистрибутивов Linux великое множество, и нет никакой возможности рассмотреть детали установки в каждом из них. Упомянем наиболее популярные (предполагается наличие прав root):<br />
<br />
===openSuSE 11.4===<br />
Сначала подключим репозиторий, посвящённый программам обмена сообщениями:<br />
<nowiki>zypper addrepo http://download.opensuse.org/repositories/server:/messaging/openSUSE_11.4/ Messaging</nowiki><br />
:Потом установим сервер:<br />
zypper install ejabberd<br />
<br />
===Fedora===<br />
По умолчанию нужный репозиторий обычно подключен.<br />
yum install ejabberd<br />
<br />
===Debian-based дистрибутивы (Debian, *Ubuntu и другие)===<br />
Ejabberd входит в основную ветку репозитория, поэтому для установки просто скомандуйте:<br />
apt-get install ejabberd<br />
<br />
===Gentoo===<br />
Для установки ejabberd в Gentoo GNU/Linux выполните команды<br />
echo "net-im/ejabberd pam ssl zlib mod_muc mod_pubsub web" >> /etc/portage/package.use<br />
emerge ejabberd<br />
<br />
==Установка готовых бинарников==<br />
Рассмотрим установку stable-версии 2.1.8 для 32-битного Linux. Для начала нужно скачать инсталлятор:<br />
wget http://www.process-one.net/downloads/ejabberd/2.1.8/ejabberd-2.1.8-linux-x86-installer.bin.gz<br />
<br />
Распаковать его:<br />
gunzip ejabberd-2.1.8-linux-x86-installer.bin.gz<br />
<br />
И запустить:<br />
chmod +x ejabberd-2.1.8-linux-x86-installer.bin<br />
./ejabberd-2.1.8-linux-x86-installer.bin<br />
<br />
Далее следуйте указаниям программы установки.<br />
<br />
==Сборка из исходников==<br />
{{Hider hiding<br />
|title=Пример для версии 2.0.5<br />
|content=<br />
Рассмотрим сборку stable-версии ejabberd-2.0.5.<br />
<br />
Для начала нужно, чтобы на сервере был установлен компилятор gcc и необходимые библиотеки (включая devel-части). Проверьте, есть ли у вас:<br />
* GNU Make<br />
* GNU C compiler (GCC)<br />
* libexpat 1.95 или выше<br />
* OpenSSL 0.9.6 или выше<br />
* Zlib 1.2.3<br />
* GNU Iconv 1.8 или выше<br />
* flex/yacc<br />
<br />
В разных дистрибутивах проверка и установка делается разными способами. Дистрибутивов много, описывать каждый смысла не имеет. Если вы не знаете, как это сделать на вашем сервере, обратитесь к документации или гуру по данному дистрибутиву.<br />
<br />
Для простоты операций будем работать пользователем root в его домашнем каталоге. Не забудьте потом прибраться.<br />
<br />
Итак, нам нужен исходный код ejabberd. Идём на [http://www.ejabberd.im официальный сайт] и выбираем, что нужно. Лучше выбирать stable версию, но если вы очень любите новые фишки и не боитесь нестабильной работы, то берите beta, testing или [[ru_wikipedia:Subversion|SVN]] версии.<br />
<br />
Я выбрал stable-версию 2.0.5 и скачал её:<br />
wget http://www.process-one.net/downloads/ejabberd/2.0.5/ejabberd-2.0.5.tar.gz<br />
<br />
Конечно же, у вас есть эта удобнейшая утилита - wget. ;)<br />
<br />
Ещё нам понадобится свеженький [[ru_wikipedia:Erlang|Erlang]] - это компилятор языка, на котором написан ejabberd. Если Erlang есть в вашем репозитории, то лучше воспользоваться им. Если нет - покажу, как собрать его из [http://erlang.org/download.html исходных кодов].<br />
<br />
Как программист, не удержусь от пояснения, зачем было использовать этот с виду громоздкий и неудобный язык. Он громоздок и неудобен действительно лишь с виду, для написания программ вроде hello world, однако предоставляет прекрасный инструментарий многопоточного и распределённого программирования. Это позволит вам единожды написанную и собранную программу использовать на огромных кластерах, состоящих из машин любой архитектуры, в которые будет проще простого добавить новые вычислительные мощности. Даже Java не обладает подобными возможностями. Именно поэтому ejabberd считается одним из самых быстрых и масштабируемых серверов протокола XMPP.<br />
<br />
Но довольно лирики.<br />
wget http://erlang.org/download/otp_src_R13B01.tar.gz<br />
<br />
Если у вас наличествуют все инструменты, библиотеки и исходные коды, приступим.<br />
<br />
Создадим временный каталог для наших сборок:<br />
mkdir buildtmp<br />
<br />
===erlang===<br />
В моём случае скачанный архив называется otp_src_R13B01.tar.gz. Распаковываем его во временный каталог:<br />
tar zxf otp_src_R13B01.tar.gz -C buildtmp<br />
<br />
Переходим в каталог и собираем erlang:<br />
cd buildtmp/otp_src_R13B01<br />
./configure --prefix=/usr --sysconfdir=/etc<br />
make<br />
make install<br />
<br />
Конечно же, следим за процессом, а не просто набираем команды. Программа сборки может сообщить об ошибке, но не каждый error или warning означает неисправимую ошибку. Например, процесс конфигурирования (команда configure) может сообщить, что не нашла компилятора java, библиотек odbc и wx, но это не является ошибкой. Просто соответствующие части erlang-а будут отключены. Перечисленные библиотеки нам не понадобятся для работы ejabberd.<br />
<br />
После сборки вернёмся в домашний каталог командой '''cd'''.<br />
<br />
===ejabberd===<br />
В моём случае архив называется ejabberd-2.0.5.tar.gz. Распаковываем его во временный каталог:<br />
tar zxf ejabberd-2.0.5.tar.gz -С buildtmp <br />
<br />
Переходим в каталог с исходниками и собираем ejabberd:<br />
cd buildtmp/ejabberd-2.0.5/src<br />
./configure<br />
make<br />
make install<br />
<br />
После всех этих манипуляций все нужные файлы разложены согласно традициям UNIX/Linux. Конфиги, в частности,- в /etc/ejabberd. Скрипт запуска - /sbin/ejabberdctl - отрабатывает команду start, что позволяет сразу добавить в rc.d, хотя лучше всё же написать правильный скрипт управления службой согласно правилам вашего дистрибутива.<br />
}}<br />
<br />
==Настройка==<br />
А дальше надо настроить сервер: что делать при загрузке, какие модули использовать, какие порты прослушивать, и т.п.<br />
<br />
Настройка сервера сводится к редактированию файла конфигурации '''/etc/ejabberd/ejabberd.cfg''' (путь показан на примере Debian GNU/Linux, в других дистрибутивах или при самостоятельной сборке из исходных кодов путь может отличаться). Откройте этот файл от пользователя root в любом удобном для Вас текстовом редакторе, после чего найдите следующие строки:<br />
<br />
%% Admin user<br />
{acl, admin, {user, "", "localhost"}}.<br><br />
%% Hostname<br />
{hosts, ["example.com"]}.<br />
<br />
В первом параметре задается [[Jabber ID]] администратора, а во втором - доменное имя сервера. Приведите эти строки примерно к такому виду:<br />
<br />
%% Admin user<br />
{acl, admin, {user, "admin", "myjabber.ath.cx"}}.<br><br />
%% Hostname<br />
{hosts, ["myjabber.ath.cx"]}.<br />
<br />
В данном случае [[JID]] администратора задан [xmpp:admin@myjabber.ath.cx admin@myjabber.ath.cx], а имя сервера, как уже условились выше - myjabber.ath.cx.<br />
<br />
Теперь в том же файле найдите строки<br />
<br />
%% No username can be registered via in-band registration:<br />
%% To enable in-band registration, replace 'deny' with 'allow'<br />
{access, register, [{deny, all}]}.<br />
<br />
и замените '''deny''' на '''allow''' - без этого пользователи сервера не смогут регистрироваться напрямую из своего Jabber-клиента.<br />
<br />
[[Изображение:Ejabber lin install login 01.png|thumb|left|Логин в веб-интерфейсе]]<br />
<br />
<br />
Сохраните изменения и перезапустите ejabberd командой<br />
<br />
/etc/init.d/ejabberd restart<br />
{{-}}<br />
<br />
[[Изображение:Ejabberd lin install 01.png|thumb|left|Сервисы и статистика сервера]]<br />
<br />
<br />
После этого создайте нового пользователя [xmpp:admin@myjabber.ath.cx admin@myjabber.ath.cx] используя Ваш Jabber-клиент. В [[Браузер сервисов|браузере сервисов]] для этой учетной записи будут доступны основные функции администрирования, а используя параметры этого аккаунта Вы сможете авторизоваться в веб-интерфейсе по адресу http://myjabber.ath.cx:5280/admin<br />
{{-}}<br />
<br />
==Ссылки==<br />
<br />
* [[Свой сервер: подробное руководство по установке ejabberd]]<br />
* [http://ylsoftware.com/news/499 Настройка ведения логов в конференции]<br />
* [http://linuxoid.in/RRD:_Статистика_онлайн-пользователей_для_ejabberd Графическая статистика онлайн-пользователей]<br />
<br />
[[Category:Свой сервер]]</div>Rainhttps://jabberworld.info/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_ejabberd_%D0%BF%D0%BE%D0%B4_Linux&diff=10206Установка ejabberd под Linux2023-11-02T12:51:46Z<p>Rain: Спрятал простыню. Мало кому сейчас будет интересна сборка</p>
<hr />
<div>Рассмотрим установку сервера [[ejabberd]] на компьютеры под управлением одного из дистрибутивов GNU/Linux для использования в локальной сети с открытым доступом из Интернет и с использованием службы DynDNS.<br />
<br />
Предполагается, что у Вас уже установлена операционная система, настроен доступ в Интернет, а доменное имя на DynDNS (допустим, это будет '''myjabber.ath.cx''') указывает на внешний адрес Вашего компьютера (либо тот, который доступен из Вашей локальной сети, если Вы настраиваете сервер без возможности подключения к нему из Интернета).<br />
<br />
[[Ejabberd]] может быть установлен на ваш сервер различными способами. Опишу три по убыванию предпочтительности:<br />
<br />
# Установка из репозитория/портов. Идеальный по оптимизации и самый простой вариант.<br />
# Сборка из исходного кода. Если этого пакета нет в репозиториях к вашему дистрибутиву, но очень хочется, чтобы сервер был оптимизированным и работал без ошибок - засучиваем рукава и переходим к соответствующему разделу. Тут вам понадобятся некоторые знания о Linux и/или помощь [[ru_wikipedia:Гуру|гуру]].<br />
# Предварительно собранные бинарные файлы с инсталлятором. Вариант весьма прост, но вряд ли оптимизирован именно под ваш дистрибутив. <br />
<br />
Далее подробно рассмотрены эти варианты.<br />
__TOC__<br />
==Установка из репозитория==<br />
Дистрибутивов Linux великое множество, и нет никакой возможности рассмотреть детали установки в каждом из них. Упомянем наиболее популярные (предполагается наличие прав root):<br />
<br />
===openSuSE 11.4===<br />
Сначала подключим репозиторий, посвящённый программам обмена сообщениями:<br />
<nowiki>zypper addrepo http://download.opensuse.org/repositories/server:/messaging/openSUSE_11.4/ Messaging</nowiki><br />
:Потом установим сервер:<br />
zypper install ejabberd<br />
<br />
===Fedora===<br />
По умолчанию нужный репозиторий обычно подключен.<br />
yum install ejabberd<br />
<br />
===Debian-based дистрибутивы (Debian, *Ubuntu и другие)===<br />
Ejabberd входит в основную ветку репозитория, поэтому для установки просто скомандуйте:<br />
apt-get install ejabberd<br />
<br />
===Gentoo===<br />
Для установки ejabberd в Gentoo GNU/Linux выполните команды<br />
echo "net-im/ejabberd pam ssl zlib mod_muc mod_pubsub web" >> /etc/portage/package.use<br />
emerge ejabberd<br />
<br />
==Сборка из исходников==<br />
{{Hider hiding<br />
|title=Пример для версии 2.0.5<br />
|content=<br />
Рассмотрим сборку stable-версии ejabberd-2.0.5.<br />
<br />
Для начала нужно, чтобы на сервере был установлен компилятор gcc и необходимые библиотеки (включая devel-части). Проверьте, есть ли у вас:<br />
* GNU Make<br />
* GNU C compiler (GCC)<br />
* libexpat 1.95 или выше<br />
* OpenSSL 0.9.6 или выше<br />
* Zlib 1.2.3<br />
* GNU Iconv 1.8 или выше<br />
* flex/yacc<br />
<br />
В разных дистрибутивах проверка и установка делается разными способами. Дистрибутивов много, описывать каждый смысла не имеет. Если вы не знаете, как это сделать на вашем сервере, обратитесь к документации или гуру по данному дистрибутиву.<br />
<br />
Для простоты операций будем работать пользователем root в его домашнем каталоге. Не забудьте потом прибраться.<br />
<br />
Итак, нам нужен исходный код ejabberd. Идём на [http://www.ejabberd.im официальный сайт] и выбираем, что нужно. Лучше выбирать stable версию, но если вы очень любите новые фишки и не боитесь нестабильной работы, то берите beta, testing или [[ru_wikipedia:Subversion|SVN]] версии.<br />
<br />
Я выбрал stable-версию 2.0.5 и скачал её:<br />
wget http://www.process-one.net/downloads/ejabberd/2.0.5/ejabberd-2.0.5.tar.gz<br />
<br />
Конечно же, у вас есть эта удобнейшая утилита - wget. ;)<br />
<br />
Ещё нам понадобится свеженький [[ru_wikipedia:Erlang|Erlang]] - это компилятор языка, на котором написан ejabberd. Если Erlang есть в вашем репозитории, то лучше воспользоваться им. Если нет - покажу, как собрать его из [http://erlang.org/download.html исходных кодов].<br />
<br />
Как программист, не удержусь от пояснения, зачем было использовать этот с виду громоздкий и неудобный язык. Он громоздок и неудобен действительно лишь с виду, для написания программ вроде hello world, однако предоставляет прекрасный инструментарий многопоточного и распределённого программирования. Это позволит вам единожды написанную и собранную программу использовать на огромных кластерах, состоящих из машин любой архитектуры, в которые будет проще простого добавить новые вычислительные мощности. Даже Java не обладает подобными возможностями. Именно поэтому ejabberd считается одним из самых быстрых и масштабируемых серверов протокола XMPP.<br />
<br />
Но довольно лирики.<br />
wget http://erlang.org/download/otp_src_R13B01.tar.gz<br />
<br />
Если у вас наличествуют все инструменты, библиотеки и исходные коды, приступим.<br />
<br />
Создадим временный каталог для наших сборок:<br />
mkdir buildtmp<br />
<br />
===erlang===<br />
В моём случае скачанный архив называется otp_src_R13B01.tar.gz. Распаковываем его во временный каталог:<br />
tar zxf otp_src_R13B01.tar.gz -C buildtmp<br />
<br />
Переходим в каталог и собираем erlang:<br />
cd buildtmp/otp_src_R13B01<br />
./configure --prefix=/usr --sysconfdir=/etc<br />
make<br />
make install<br />
<br />
Конечно же, следим за процессом, а не просто набираем команды. Программа сборки может сообщить об ошибке, но не каждый error или warning означает неисправимую ошибку. Например, процесс конфигурирования (команда configure) может сообщить, что не нашла компилятора java, библиотек odbc и wx, но это не является ошибкой. Просто соответствующие части erlang-а будут отключены. Перечисленные библиотеки нам не понадобятся для работы ejabberd.<br />
<br />
После сборки вернёмся в домашний каталог командой '''cd'''.<br />
<br />
===ejabberd===<br />
В моём случае архив называется ejabberd-2.0.5.tar.gz. Распаковываем его во временный каталог:<br />
tar zxf ejabberd-2.0.5.tar.gz -С buildtmp <br />
<br />
Переходим в каталог с исходниками и собираем ejabberd:<br />
cd buildtmp/ejabberd-2.0.5/src<br />
./configure<br />
make<br />
make install<br />
<br />
После всех этих манипуляций все нужные файлы разложены согласно традициям UNIX/Linux. Конфиги, в частности,- в /etc/ejabberd. Скрипт запуска - /sbin/ejabberdctl - отрабатывает команду start, что позволяет сразу добавить в rc.d, хотя лучше всё же написать правильный скрипт управления службой согласно правилам вашего дистрибутива.<br />
}}<br />
<br />
==Установка готовых бинарников==<br />
Рассмотрим установку stable-версии 2.1.8 для 32-битного Linux. Для начала нужно скачать инсталлятор:<br />
wget http://www.process-one.net/downloads/ejabberd/2.1.8/ejabberd-2.1.8-linux-x86-installer.bin.gz<br />
<br />
Распаковать его:<br />
gunzip ejabberd-2.1.8-linux-x86-installer.bin.gz<br />
<br />
И запустить:<br />
chmod +x ejabberd-2.1.8-linux-x86-installer.bin<br />
./ejabberd-2.1.8-linux-x86-installer.bin<br />
<br />
Далее следуйте указаниям программы установки.<br />
<br />
==Настройка==<br />
А дальше надо настроить сервер: что делать при загрузке, какие модули использовать, какие порты прослушивать, и т.п.<br />
<br />
Настройка сервера сводится к редактированию файла конфигурации '''/etc/ejabberd/ejabberd.cfg''' (путь показан на примере Debian GNU/Linux, в других дистрибутивах или при самостоятельной сборке из исходных кодов путь может отличаться). Откройте этот файл от пользователя root в любом удобном для Вас текстовом редакторе, после чего найдите следующие строки:<br />
<br />
%% Admin user<br />
{acl, admin, {user, "", "localhost"}}.<br><br />
%% Hostname<br />
{hosts, ["example.com"]}.<br />
<br />
В первом параметре задается [[Jabber ID]] администратора, а во втором - доменное имя сервера. Приведите эти строки примерно к такому виду:<br />
<br />
%% Admin user<br />
{acl, admin, {user, "admin", "myjabber.ath.cx"}}.<br><br />
%% Hostname<br />
{hosts, ["myjabber.ath.cx"]}.<br />
<br />
В данном случае [[JID]] администратора задан [xmpp:admin@myjabber.ath.cx admin@myjabber.ath.cx], а имя сервера, как уже условились выше - myjabber.ath.cx.<br />
<br />
Теперь в том же файле найдите строки<br />
<br />
%% No username can be registered via in-band registration:<br />
%% To enable in-band registration, replace 'deny' with 'allow'<br />
{access, register, [{deny, all}]}.<br />
<br />
и замените '''deny''' на '''allow''' - без этого пользователи сервера не смогут регистрироваться напрямую из своего Jabber-клиента.<br />
<br />
[[Изображение:Ejabber lin install login 01.png|thumb|left|Логин в веб-интерфейсе]]<br />
<br />
<br />
Сохраните изменения и перезапустите ejabberd командой<br />
<br />
/etc/init.d/ejabberd restart<br />
{{-}}<br />
<br />
[[Изображение:Ejabberd lin install 01.png|thumb|left|Сервисы и статистика сервера]]<br />
<br />
<br />
После этого создайте нового пользователя [xmpp:admin@myjabber.ath.cx admin@myjabber.ath.cx] используя Ваш Jabber-клиент. В [[Браузер сервисов|браузере сервисов]] для этой учетной записи будут доступны основные функции администрирования, а используя параметры этого аккаунта Вы сможете авторизоваться в веб-интерфейсе по адресу http://myjabber.ath.cx:5280/admin<br />
{{-}}<br />
<br />
==Ссылки==<br />
<br />
* [[Свой сервер: подробное руководство по установке ejabberd]]<br />
* [http://ylsoftware.com/news/499 Настройка ведения логов в конференции]<br />
* [http://linuxoid.in/RRD:_Статистика_онлайн-пользователей_для_ejabberd Графическая статистика онлайн-пользователей]<br />
<br />
[[Category:Свой сервер]]</div>Rainhttps://jabberworld.info/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B8_%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_Jabber-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0&diff=10205Установка и настройка Jabber-сервера2023-11-02T12:33:56Z<p>Rain: +deadlink +убрал лишнее</p>
<hr />
<div>Требования для работы и процедура установки собственного сервера Jabber являются не такими сложными, как это кажется непосвящённому. Jabber не сильно требователен к ресурсам, поэтому сервер для него возможно устроить практически где угодно. Сложность в установке не превышает сложности установки типичного веб-форума, а местами и ещё проще.<br />
<br />
==Подготовка==<br />
<br />
===Компьютер===<br />
<br />
Для работы сервера Jabber вполне достаточно старенького компьютера с процессором с тактовой частотой 500 МГц, размером оперативной памяти 128 Мб и жёстким диском 4 Гб. Разумеется, возможно использовать и более мощные компьютеры. Если вы планируете хранить историю сообщений на сервере, потребуется более объемистый жесткий диск. Можно установить Jabber-сервер и на машину, которая уже работает как сервер, это не повредит другим программам, как вы можете догадаться. А можно использовать свой настольный компьютер, если вы не выключаете его на ночь. Ниже приведены наиболее оптимальные применения для основных Jabber-серверов:<br />
<br />
* [[Ejabberd]] — наиболее универсальный вариант, рекомендуется. Сервер поддерживает кластеризацию. У сервера высокая отказоустойчивость.<br />
* [[Prosody]] — персональный сервер с низкой нагрузкой. Простой в настройке, но не отличается стабильной работой при высокой нагрузке. Нет кластеризации.<br />
* [[Openfire]] — предприятия. Прост в настройке, но из-за виртуальной машины java потребляет много ресурсов.<br />
* [[Jabberd]] — старые компьютеры с низкой вычислительной мощностью.<br />
<br />
Подробнее смотрите в статье «[[Выбор сервера]]»<br />
<br />
===Интернет===<br />
<br />
Возможно сделать так, чтобы к вашему серверу можно было подключиться не только из локальной сети или предприятия. Но не каждый провайдер позволяет своим клиентам использовать собственный сервер в интернете. Для работы сервера нужно, чтобы ваше подключение к интернету было с так называемым «публичным», или «белым» адресом IP. Проверить его наличие можно с помощью [[Выявление NAT|этой инструкции]]. Также желательно, чтобы этот IP-адрес был фиксированным, чтобы к нему можно было легко привязать доменное имя. Все эти проблемы отпадут сами собой, если вы используете сервер VPS или Dedicated от поставщика услуг хостинга — они всегда подразумевают предоставление в ваше распоряжение фиксированных «белых» IP. Наконец, важным фактором является стабильность подключения — проблемы со стороны сервера сказываются на всех подключённых пользователях одновременно.<br />
<br />
==Практика==<br />
<br />
===Регистрация доменного имени===<br />
<br />
Как уже было сказано раньше, для работы jabber-сервера необходимо обзавестись доменным именем. Конечно, в крайнем случае можно обойтись и без него, но, согласитесь, вряд ли вам захочется видеть и использовать [[Jabber ID]] вида "'''vasya@169.254.96.124'''" или "'''petya@2001:470:0f3b:28fa::1'''". Поэтому последним шагом перед, собственно, установкой сервера будет регистрация собственного доменного имени, тем более сделать это так просто! Подробнее об этом, а также о привязке домена к IP-адресу своего сервера читайте в статье "[[Регистрация доменного имени]]". Возможно использование и динамического адреса.<br />
<br />
===Установка и настройка программы-сервера===<br />
<br />
Подготовив "железо" для будущего сервера, подключив его к сети и привязав к нему доменное имя в этой сети, можно переходить непосредственно к установке [[Выбор сервера|необходимого программного обеспечения]]. Ниже приводятся подробные инструкции для упомянутых трех популярных серверов в варианте для двух операционных систем - семейства юниксоподобных ОС (в частности дистрибутивов GNU/Linux и BSD) и Windows. Если у вас нет особых причин использовать Windows для сервера - мы рекомендуем в качестве основы взять GNU/Linux, как более защищенную и стабильно работающую платформу.<br />
<br />
<center><br />
{| border=0 width=75%<br />
|rowspan=3 width=100|[[Изображение:Linux bsd.png|120px]]<br />
|width=35% align=left height=35|[[Установка ejabberd под Linux|ejabberd]]<br />
|rowspan=3 width=100|[[Изображение:Windows logo.png|110px]]<br />
|width=35% align=left|[[Установка ejabberd под Windows|ejabberd]]<br />
|-<br />
|height=35 align=left|[[Установка jabberd 2 под Linux|jabberd2]]<br />
|align=left|[[Установка jabberd 2 под Windows|jabberd2]]<br />
|-<br />
| height=35 align=left|[[Установка Openfire под Linux|Openfire]]<br />
|align=left|[[Установка Openfire под Windows|Openfire]]<br />
|-<br />
|}<br />
</center><br />
<br />
==Ссылки==<br />
* [[Свой сервер: подробное руководство по установке ejabberd|Подробное руководство по установке ejabberd]]<br />
* [[Свой сервер: подробное руководство по установке Prosody|Подробное руководство по установке Prosody]]<br />
* [http://wiki.unixforum.org/wiki/Делаем_Jabber-сервер Делаем Jabber-сервер] {{deadlink}}<br />
* [http://habrahabr.ru/blogs/jabber/50182/ Популярные ошибки администраторов jabber-серверов]<br />
* [http://habrahabr.ru/blogs/im/50009/ Настройка Jabber сервера на своем домене с помощью Google apps] {{deadlink}}<br />
<br />
[[Category:Свой сервер]]</div>Rainhttps://jabberworld.info/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_jabberd_2_%D0%BF%D0%BE%D0%B4_Windows&diff=10204Установка jabberd 2 под Windows2023-11-02T12:32:26Z<p>Rain: +deadlink</p>
<hr />
<div>{{Old|Данный сервер устарел и не поддерживает современные функции}}<br />
<br />
Рассмотрим установку сервера [[Jabberd 2|Jabberd2]] на компьютеры под управлением ОС Windows с поддержкой сервиса [[Конференции|конференций]] для использования в локальной сети с открытым доступом из Интернет и с использованием службы DynDNS.<br />
<br />
Предполагается, что у Вас уже установлена операционная система, настроен доступ в Интернет, а доменное имя на DynDNS (допустим, это будет '''myjabber.ath.cx''') указывает на внешний адрес Вашего компьютера (либо тот, который доступен из Вашей локальной сети, если Вы настраиваете сервер без возможности подключения к нему из Интернета).<br />
<br />
Первым делом скачайте программу-установщик на свой компьютер, сделать это можно в [http://www.nanoant.com/projects/jabberd2-win32 разделе загрузки] на сайте проекта nanoANT, занимающегося портом Jabberd2 для Win32. Помимо этого, для поддержки [[Конференции|конференций]] Вам потребуется [http://www.nanoant.com/projects/muc-win32 отдельно скачать] MUC-модуль.<br />
<br />
Для установки сервера требуется наличие в системе Microsoft Visual C++ 2008 SP1 Redistributable Package, скачать его можно с [http://www.microsoft.com/downloads/details.aspx?familyid=A5C84275-3B97-4AB7-A40D-3802B2AF5FC2&displaylang=en официального сайта].<br />
<br />
После загрузки файлов запустите установщик сервера.<br />
<br />
==Установка==<br />
<br />
После запуска установщика Вам потребуется ответить на несколько вопросов:<br />
<br />
* Принятие лицензионного соглашения. Jabberd2 распространяется на условиях лицензии GPL.<br />
* Каталог для установки программы. Здесь будут находиться основные исполняемые файлы сервера и модулей, их файлы конфигурации, а также база данных пользовательских аккаунтов.<br />
* Доменное имя сервера. Как уже говорили выше, пусть это будет '''myjabber.ath.cx'''.<br />
<br />
После ответа на эти вопросы начнется установка сервера. Затем распакуйте архив с MUC-модулем в тот же каталог, что был указан при установке. После этого выполните команду "'''muc.exe -I'''" для установки модуля как сервиса системы, иначе Вам каждый раз придется запускать его вручную.<br />
<br />
Сервер занимает менее 4 Мб в базовой комплектации и около 6 Мб с MUC-модулем.<br />
<br />
При установке Jabberd2 добавляет себя и свои модули в список сервисов системы, при необходимости перезапуска всего сервера перезапустите сервис "'''Jabberd2 Router'''".<br />
<br />
<center><br />
<gallery perrow=5><br />
Изображение:Jabberd win install 01.png|Старт мастера установки<br />
Изображение:Jabberd win install 02.png|Лицензионное соглашение<br />
Изображение:Jabberd win install 03.png|Каталог для установки сервера<br />
Изображение:Jabberd win install 04.png|Ввод имени домена<br />
Изображение:Jabberd win install 06.png|Установка сервера<br />
</gallery><br />
</center><br />
<br />
==Настройка==<br />
<br />
<br />
Сервер практически сразу готов к использованию, но для завершения установки требуется настроить MUC-модуль и указать в файлах конфигурации [[Jabber ID]] администратора. Первым делом проделайте следующие шаги:<br />
<br />
* Откройте в каталоге сервера файл '''sm.xml'''<br />
* Найдите секцию с названием '''acl'''.<br />
* Добавьте туда следующую подсекцию:<br />
<pre><br />
<acl type='all'><br />
<jid>admin@myjabber.ath.cx</jid><br />
</acl> <br />
</pre><br />
* Через Jabber-клиент создайте пользователя с указанным JID'ом, он и будет являться администратором сервера<br />
* Перезапустите сервер<br />
<br />
После этого необходимо настроить MUC-модуль:<br />
* Откройте в каталоге сервера файл '''muc.xml'''<br />
* Изменить параметры '''name''' и '''host''', приведя их к такому виду:<br />
<pre><br />
<name>conference.myjabber.ath.cx</name> <!-- the jid of your component --><br />
<host>conference.myjabber.ath.cx</host> <!-- this should be the same as above --><br />
</pre><br />
* В секции '''sadmin''' добавьте JID администратора конференций (этот пользователь будет иметь права владельца в любой конференции).<br />
* Перезапустите сервер<br />
<br />
[[Изображение:Jabberd win install 08.png|thumb|left|Работающий сервер с MUC-модулем и клиент]]<br />
<br />
Вот и все.<br />
<br />
Теперь к Вашему серверу можно подключаться с других компьютеров, пользователи могут заводить учетные записи, общаться между собой и устраивать конференции.<br />
{{-}}<br />
<br />
==Ссылки==<br />
<br />
* [http://jabberd2.xiaoka.com/wiki/InstallGuide/CommonConfigurationTasks Описание настройки сервера на официальной вики] {{deadlink}}<br />
<br />
[[Category:Свой сервер]]</div>Rainhttps://jabberworld.info/index.php?title=%D0%A0%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D1%8F_%D0%B4%D0%BE%D0%BC%D0%B5%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B8%D0%BC%D0%B5%D0%BD%D0%B8&diff=10203Регистрация доменного имени2023-11-02T12:29:34Z<p>Rain: /* Практика */</p>
<hr />
<div>Получить доменное имя для [[Установка и настройка Jabber-сервера|своего сервера]] можно самыми разными способами.<br />
<br />
Самый простой и быстрый вариант - воспользоваться бесплатными сервисами, предоставляющими доменные имена 3-го уровня для клиентов с динамическими адресами, например, http://no-ip.com. Как следует из описания, эти сервисы могут сильно пригодиться, если провайдер каждый раз при подключении выделяет Вам новый IP-адрес - благодаря малому времени жизни DNS-записей на таких сервисах, а также специальным утилитам, выбранный домен всегда будет ссылаться на Ваш IP-адрес.<br />
<br />
Другой способ - попросить кого-то из знакомых, владеющих полноценным доменом, создать новый поддомен и сделать так, чтобы он ссылался на Ваш адрес.<br />
<br />
Третий вариант - зарегистрировать собственное доменное имя 2-го или 3-го уровня у одного из популярных бесплатных или платных регистраторов.<br />
<br />
В двух последних случаях потребуется, чтобы у Вашего будущего сервера был статический (постоянный) IP-адрес, а также публичный IP-адрес, если планируется доступ к серверу из Интернета.<br />
<br />
==Практика==<br />
<br />
Рассмотрим получение своего домена на первом примере с использованием сервиса http://dyndns.com, что позволит уже через несколько минут приступить к установке сервера.<br />
<br />
{{Msg|Материал устарел, dyndns.com больше не предоставляет бесплатный dyndns, рекомендуется использовать другой сервис - например, [https://afraid.org afraid.org]}}<br />
<br />
* Для начала [https://www.dyndns.com/account/entrance/ зарегистрируйте новую учетную запись] на сервисе.<br />
* После получения электронного письма активируйте учетную запись.<br />
* Войдите в созданную учетную запись и перейдите на [https://www.dyndns.com/account/services/ страницу своих сервисов]<br />
<br />
<center><br />
<gallery><br />
Изображение:Dyndnscom 01.png|Регистрируем новое доменное имя<br />
Изображение:Dyndnscom 02.png|Домен активен<br />
Изображение:Dyndnscom 03.png|Прописываем аккаунт в DynDNS Updater<br />
Изображение:Dyndnscom 04.png|DynDNS Updater успешно обновляет адрес<br />
</gallery><br />
</center><br />
<br />
* Нажмите ссылку "[https://www.dyndns.com/account/services/hosts/add.html Add hostname]" для добавления нового домена.<br />
* Вам будет предложено ввести желаемое имя 3-го уровня, а также выбрать понравившийся домен 2-го уровня из списка и ввести IP-адрес (можете воспользоваться предложенным значением) - см. первый скриншот.<br />
* Активируйте добавленный сервис, для чего нажмите "'''Add to cart -> Next -> Activate Services'''"<br />
* Перед Вами появится страница, подобная той, что показана на втором скриншоте. Через пару минут созданный домен начнет ссылаться на указанный адрес (Вы можете проверить это утилитами host, dig или nslookup).<br />
<br />
После этого необходимо установить утилиту, которая будет периодически обновлять адрес на сайте. В ОС GNU/Linux для этого просто установите пакет '''ddclient''', который входит в большинство дистрибутивов. Обычно вся настройка (а именно: указание логина и пароля для сервиса DynDNS, а также сетевого интерфейса и домена, для которого будут делаться обновления) выполняется прямо во время или сразу после установки пакета (в зависимости от дистрибутива), после чего он работает в фоне как еще один сервис системы.<br />
<br />
Для Windows придется отдельно скачать и установить программу [http://www.dyndns.com/support/clients/ DynDNS Updater]. Во время установки можете согласиться установить DynDNS Updater как сервис системы - это позволит ему работать в полностью автоматическом режиме, без участия человека. После установки и запуска приложения введите параметры учетной записи для DynDNS (см. третий скриншот). Через несколько секунд будет получен список доступных хостов, где необходимо отметить только что зарегистрированный домен. Нажмите '''Apply''', после чего DynDNS Updater начнет периодически обновлять параметры DNS на сервисе http://dyndns.com.<br />
<br />
[[Category:Свой сервер]]</div>Rainhttps://jabberworld.info/index.php?title=%D0%A1%D0%B2%D0%BE%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80:_%D0%BF%D0%BE%D0%B4%D1%80%D0%BE%D0%B1%D0%BD%D0%BE%D0%B5_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B5_Prosody&diff=10202Свой сервер: подробное руководство по установке Prosody2023-11-02T10:35:33Z<p>Rain: Виртуалхост</p>
<hr />
<div>В этой статье приводится пример настройки [[Prosody]] - одного из самых популярных и легковесных jabber-серверов. Для сервера написано просто-таки огромное число модулей на все случаи жизни, поэтому в руководстве, основанном на версии 0.12.4, будет показано подключение актуальных и популярных функций. В качестве сертификатов будем использовать Let's Encrypt - и все это на Debian GNU/Linux.<br />
<br />
Рассмотрим особенности данной конфигурации.<br />
<br />
__TOC__<br />
<br />
== [[ru_wikipedia:DNS|DNS-записи]] ==<br />
<br />
Хотя для базового варианта своего jabber-сервера вполне достаточно [[Регистрация доменного имени|бесплатного DynDNS-домена]], для полноценной конфигурации все же нужно обзавестись собственным доменом, где можно будет добавить все необходимые DNS-записи и сделать субдомены для сервисов. Выбор регистратора и покупка домена остается за рамками данной статьи, тут только приводятся шаги, которые надо сделать после покупки домена в его админке.<br />
<br />
Всего понадобится около 15 записей в DNS:<br />
<br />
# Для удобства, чтобы в случае миграции сервера с одного IP на другой не приходилось переписывать все записи, стоит завести для него субдомен, который будет ссылаться на нужный IP с помощью А-записи (или 2 таких субдомена в случае использования IPv4+IPv6 - один с A-записью, а второй с AAAA), а все остальные записи сделать CNAME-алиасами для него. Например, для данного сервера ('''jabberworld.info''') сделаны 2 субдомена '''xmpp.jabberworld.info''', ссылающиеся на IPv4 и IPv6-адреса.<br />
# Создаем субдомены для необходимых сервисов сервера<ref>Да, если планируется использовать, например, конференции исключительно локально, то можно обойтись и без DNS-записей - сервер и так знает, куда ему подключаться, так как он этот сервис и предоставляет. Но если хочется полноценный сервис, с которым смогут взаимодействовать и другие сервера - то все же потребуются указанные записи в DNS.</ref> - '''conference''' (для [[Конференции|конференций]]), '''proxy''' (прокси для прямой [[Передача файлов|передачи файлов]]), '''pubsub''' (сервисы типа "Публикация/подписка", где может сохраняться самая разная информация) и '''upload''' (сервис для [[Передача файлов|передачи файлов]] через HTTP Upload). Все эти записи создаем как CNAME на наш субдомен из 1-го пункта.<br />
# Создаем ряд SRV-записей для нашего основного домена - они показывают, где именно какой сервис находится. Конечно, если у вас все на одном адресе, то будет работать и так, но мы ведь решили все делать правильно, верно? Итак, нужны такие SRV-записи:<br />
<br />
:: '''_xmpp-client._tcp.EXAMPLE.COM''' (порт '''5222''') - чтобы указать, куда подключаться [[Клиенты Jabber|jabber-клиенту]]<br />
:: '''_xmpps-client._tcp.EXAMPLE.COM''' (порт '''5223''') - аналогичная запись для [https://xmpp.org/extensions/xep-0368.html TLS-подключений клиентов]<br />
:: '''_xmpp-server._tcp.EXAMPLE.COM''' (порт '''5269''') - чтобы указать, куда подключаться [[Публичные серверы Jabber|jabber-серверу]]<br />
:: '''_xmpps-server._tcp.EXAMPLE.COM''' (порт '''5270''') - аналогичная запись для [https://xmpp.org/extensions/xep-0368.html TLS-подключений серверов].<br />
<br />
:: Записи ниже служат для работы сервиса аудио/видеозвонков через jabber<ref name="avcalls">https://prosody.im/doc/turn</ref>. Для максимальной совместимости будем использовать как [[ru_wikipedia:STUN|STUN]], так и [[ru_wikipedia:Traversal Using Relay NAT|TURN]] - все возможные варианты:<br />
<br />
:: '''_stun._tcp.EXAMPLE.COM''' (порт '''3478''') - [[ru_wikipedia:STUN|STUN]] через [[ru_wikipedia:TCP|TCP]]<br />
:: '''_stun._udp.EXAMPLE.COM''' (порт '''3478''') - STUN через UDP<br />
:: '''_stuns._tcp.EXAMPLE.COM''' (порт '''5349''') - шифрованный STUN через TCP<br />
:: '''_turn._tcp.EXAMPLE.COM''' (порт '''3478''') - [[ru_wikipedia:Traversal Using Relay NAT|TURN]] через [[ru_wikipedia:TCP|TCP]]<br />
:: '''_turn._udp.EXAMPLE.COM''' (порт '''3478''') - TURN через UDP<br />
:: '''_turns._tcp.EXAMPLE.COM''' (порт '''5349''') - шифрованный TURN через TCP<br />
<br />
:: Во всех случаях target'ом для записей служит наш алиас из первого пункта.<br />
{{Hider hiding|<br />
|title=Для продвинутых<br />
|content=<br />
:: Самый полный вариант подразумевает в том числе создание SRV-записей для каждого из сервисов-субдоменов - тех, к которым будут подключаться сторонние серверы. Например, для конференций это может выглядеть так:<br />
<br />
:: '''_xmpp-server._tcp.conference.EXAMPLE.COM''' (порт '''5269''')<br />
:: '''_xmpps-server._tcp.conference.EXAMPLE.COM''' (порт '''5270''' для TLS)<br />
<br />
:: Но, как уже говорилось выше, это для совсем уж необычных конфигураций - когда сам домен указывает на один адрес (например, там может работать веб-сервер, предоставляющий чат-логи на сайте https://conference.example.com), а сам jabber-сервер при этом находится совершенно на другом.<br />
}}<br />
Вот как выглядят записи для данного сервера в админке бесплатного DNS-провайдера [https://dns.he.net Hurricane Electric]:<br />
<br />
<center>[[Файл:Jabber srv.png]]</center><br />
<br />
== Сертификаты ==<br />
<br />
<br />
В современном мире стандартной практикой является шифрование соединений, а для этого, в свою очередь, требуются [[ru_wikipedia:Цифровой сертификат|сертификаты]] от доверенных центров сертификации. Можно, конечно, использовать самоподписанный сертификат, но, во-первых, не все серверы будут их принимать - а значит, к ним не получится подключиться и общаться с их пользователями, а во-вторых, в подключающихся клиентах будут появляться сообщения о недоверенном сертификате, что тоже будет доставлять определенные неудобства. Поэтому стоит воспользоваться услугами одного из популярных бесплатных центров сертификации - [https://letsencrypt.org Let's Encrypt].<br />
<br />
Для работы с сертификатами от Let's Encrypt в Debian есть специальный пакет - '''certbot''', поэтому установите его следующей командой:<br />
<br />
sudo apt-get install certbot<br />
<br />
Сертификаты от Let's Encrypt выдаются сроком на 3 месяца, поэтому в конце этого срока их нужно обновлять. Для подтверждения владения доменом, а также для автоматизации обновления сертификатов в дальнейшем со стороны Let's Encrypt делается запрос на веб-сервер для указанного домена, поэтому для полноценной работы стоит установить какой-нибудь популярный вариант и прописать там виртуальные хосты для нашего jabber-сервера, а также сервисов на нем (сертификаты будут делаться в том числе для сервисов). Пример конфигурации веб-сервера Apache для данного сервера:<br />
<br />
{{Hider hiding<br />
|title=apache_to_jabber_service_domains.conf<br />
|content=<pre><br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@jabberworld.info<br />
DocumentRoot /var/www/jabberworld.info/htdocs<br />
ServerName jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@upload.jabberworld.info<br />
DocumentRoot /var/www/upload.jabberworld.info/htdocs<br />
ServerName upload.jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@pubsub.jabberworld.info<br />
DocumentRoot /var/www/pubsub.jabberworld.info/htdocs<br />
ServerName pubsub.jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@conference.jabberworld.info<br />
DocumentRoot /var/www/conference.jabberworld.info/htdocs<br />
ServerName conference.jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@proxy.jabberworld.info<br />
DocumentRoot /var/www/proxy.jabberworld.info/htdocs<br />
ServerName proxy.jabberworld.info<br />
</VirtualHost><br />
</pre><br />
}}<br />
<br />
В каталогах сервера не обязательно должен быть какой-то контент, хотя, например, на основном домене можно разместить какую-то страничку, посвященную jabber-серверу, а на поддомене '''conference''' разместить чат-логи [[Конференции|конференций]]. Субдомен '''upload''' можно приспособить под загружаемые через HTTP Upload файлы, чтобы в дальнейшем их раздавал веб-сервер<ref name="http_upload">В таком случае ему нужно обеспечить доступ к каталогу '''/var/lib/prosody/http_upload/''' - а лучше указать опцию '''http_upload_path''' с путем за пределами домашнего каталога Prosody, плюс обеспечить нужные права веб-серверу, чтобы он мог читать файлы, загруженные через jabber-сервер. Такое решение имеет еще одно преимущество: разнообразные клиенты (не только Jabber) будут гораздо охотнее показывать превью для обычных HTTP/HTTPS-ссылок (т.е., на 80 или 443-м порту), а не тех, где контент отдается на "необычном" порту - вроде 5281 в данном примере.</ref>.<br />
<br />
После всех приготовлений<ref>Более подробно можно почитать тут: [[Свой сервер: подготовка веб-сервера и сертификатов]]</ref> создайте все необходимые сертификаты. Для этого воспользуйтесь следующими командами (выполнять надо от пользователя '''root'''):<br />
<br />
certbot certonly --webroot --webroot-path /var/www/EXAMPLE.COM/htdocs/ -d EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/conference.EXAMPLE.COM/htdocs/ -d conference.EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/upload.EXAMPLE.COM/htdocs/ -d upload.EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/pubsub.EXAMPLE.COM/htdocs/ -d pubsub.EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/proxy.EXAMPLE.COM/htdocs/ -d proxy.EXAMPLE.COM --rsa-key-size 4096<br />
<br />
В параметрах после '''--webroot-path''' указывается каталог веб-сервера для данного домена, а после '''-d''' - сам домен.<br />
<br />
После успешного выполнения команд будет выдана информация о созданном сертификате, в том числе 2 файла - цепочка ключей и приватный ключ - сохраните эти пути для дальнейшего использования, они нам еще пригодятся. Всего получится 10 файлов. certbot обновляет сертификаты автоматически, если срок их истечения составляет менее 30 дней - т.е., обновление происходит раз в 2 месяца.<br />
<br />
Так как Prosody работает от своего пользователя и не имеет доступа к сертификатам, созданным certbot от рута, то надо каким-то образом предоставить доступ ejabberd'у к сертификатам. Самым простым и корректным вариантом на сейчас является выполнение следующей команды от рута<ref>https://prosody.im/doc/letsencrypt</ref>:<br />
<br />
prosodyctl --root cert import /etc/letsencrypt/live<br />
<br />
В дальнейшем эту команду можно использовать после каждого обновления сертификатов - например, указав ее в качестве deploy hook для certbot.<br />
<br />
== Установка и настройка Prosody ==<br />
<br />
Все подготовительные процедуры завершены, теперь можно приступать непосредственно к установке и настройке своего jabber-сервера. Для поддержки звонков потребуется еще STUN/TURN-сервер - в качестве него будем использовать Coturn. В Debian установить Prosody с поддержкой MySQL<ref>На самом деле выбор MySQL обусловлен с одной стороны ее популярностью на веб-хостингах, с другой - возможностью хранить большие объемы данных, которые могут потребоваться, если вы хотите хранить, например, архив сообщений за длительное время. Однако если таких планов нет и это будет сервер для одного или нескольких человек со скромными запросами - то вполне можно обойтись Sqlite.</ref> и Coturn можно командой<br />
<br />
apt-get install prosody coturn lua-dbi-mysql<br />
<br />
'''Примечание''': на момент написания статьи самая последняя версия Prosody - 0.12.4 - доступна в репозитории '''backports'''. Чтобы установить сервер оттуда - добавьте к команде выше ключ '''-t bookworm-backports''' (само-собой, репозиторий должен быть прописан в '''/etc/apt/sources.list''').<br />
<br />
Настройку начнем с Coturn - она очень простая и сводится к включению сервиса в файле '''/etc/default/coturn''' опции '''TURNSERVER_ENABLED=1''', а также приведению конфиг-файла '''/etc/turnserver.conf''' к такому виду:<br />
<br />
{{Hider hiding<br />
|title=/etc/turnserver.conf<br />
|content=<pre><br />
listening-port=3478<br />
tls-listening-port=5349<br />
verbose<br />
use-auth-secret<br />
static-auth-secret=MYSUPERSECRETKEY<br />
userdb=/var/lib/turn/turndb<br />
realm=EXAMPLE.COM<br />
cert=/etc/turncerts/EXAMPLE.COM.fullchain.pem<br />
pkey=/etc/turncerts/EXAMPLE.COM.privkey.pem<br />
syslog<br />
prod<br />
no-multicast-peers<br />
no-cli<br />
no-tlsv1<br />
no-tlsv1_1<br />
no-rfc5780<br />
no-stun-backward-compatibility<br />
response-origin-only-with-rfc5780<br />
</pre><br />
}}<br />
<br />
Фактически, изменения в конфиге сводятся по-большей части к следующему:<br />
<br />
* Указываем прослушиваемые порты - они должны быть такие же, как были указаны в SRV-записях в DNS.<br />
* Включаем '''use-auth-secret''' и указываем придуманный '''ключ-пароль''' - его мы потом укажем в конфиг-файле у Prosody.<br />
* Указываем '''realm''' - домен и сертификат с ключом для него.<br />
<br />
Да, так как Coturn не может напрямую прочитать сертификаты из каталога Let's Encrypt - для правильной работы можно создать отдельный каталог, куда копировать сертификаты с нужными правами. В примере выше это '''/etc/turncerts'''. Команду копирования и изменения прав можно объединить в одном скрипте с командой копирования сертификатов для Prosody и вызывать этот скрипт в качестве deploy hook для Let's Encrypt (или просто по Cron'у, например, раз в неделю).<br />
<br />
Закончив правку конфиг-файла, перезапускаем TURN-сервер:<br />
<br />
systemctl restart coturn.service<br />
<br />
Теперь переходим к настройке Prosody. Как уже говорилось, под него есть множество разнообразных модулей. Для удобства добавления модулей добавьте следующие пакеты:<br />
<br />
apt-get install luarocks liblua5.4-dev lua-luaossl --no-install-recommends<br />
<br />
После чего можно сразу установить полезные модули:<br />
<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_admin_web # Поддержка WEB-интерфейса для управления сервером<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_vcard_muc # Поддержка vCard для конференций<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_muc_moderation # Модерирование конференций и возможность удалять спам<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_cloud_notify # Поддержка PUSH-уведомлений<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_cloud_notify_extensions # Дополнительные модули для PUSH<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_http_upload # Поддержка файлообмена через HTTP Upload<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_register_web # Поддержка регистрации через веб-страницу<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_muc_hats_adhoc # Указание дополнительных ролей в конференциях<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_muc_hats_api # См. выше<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_mam_adhoc # Возможность управлять настройками MAM-архива из jabber-клиента<br />
<br />
Конфигурационный файл у Prosody состоит из нескольких секций:<br />
* Общие параметры<br />
* Параметры виртуал-хоста<br />
* Параметры сервисов.<br />
<br />
Для удобства то, что относится к виртуал-хосту и его сервисам, вынесено в отдельный файл. Для включения нужного виртуал-хоста поместите симлинк на его конфиг в '''/etc/prosody/conf.d'''.<br />
<br />
{{Hider hiding<br />
|title=/etc/prosody/prosody.cfg.lua<br />
|content=<pre><br />
-- Prosody Example Configuration File<br />
--<br />
-- Information on configuring Prosody can be found on our<br />
-- website at https://prosody.im/doc/configure<br />
--<br />
-- Tip: You can check that the syntax of this file is correct<br />
-- when you have finished by running this command:<br />
-- prosodyctl check config<br />
-- If there are any errors, it will let you know what and where<br />
-- they are, otherwise it will keep quiet.<br />
--<br />
-- The only thing left to do is rename this file to remove the .dist ending, and fill in the<br />
-- blanks. Good luck, and happy Jabbering!<br />
<br />
<br />
---------- Server-wide settings ----------<br />
-- Settings in this section apply to the whole server and are the default settings<br />
-- for any virtual hosts<br />
<br />
-- This is a (by default, empty) list of accounts that are admins<br />
-- for the server. Note that you must create the accounts separately<br />
-- (see https://prosody.im/doc/creating_accounts for info)<br />
-- Example: admins = { "user1@example.com", "user2@example.net" }<br />
admins = {<br />
"admin@EXAMPLE.COM"<br />
}<br />
<br />
-- This option allows you to specify additional locations where Prosody<br />
-- will search first for modules. For additional modules you can install, see<br />
-- the community module repository at https://modules.prosody.im/<br />
-- For a local administrator it's common to place local modifications<br />
-- under /usr/local/ hierarchy:<br />
plugin_paths = {<br />
"/usr/lib/prosody/modules",<br />
"/var/lib/prosody/custom_plugins/"<br />
}<br />
<br />
-- This is the list of modules Prosody will load on startup.<br />
-- Documentation for bundled modules can be found at: https://prosody.im/doc/modules<br />
modules_enabled = {<br />
<br />
-- Generally required<br />
"disco"; -- Service discovery<br />
"roster"; -- Allow users to have a roster. Recommended ;)<br />
"saslauth"; -- Authentication for clients and servers. Recommended if you want to log in.<br />
"tls"; -- Add support for secure TLS on c2s/s2s connections<br />
<br />
-- Not essential, but recommended<br />
"blocklist"; -- Allow users to block communications with other users<br />
"bookmarks"; -- Synchronise the list of open rooms between clients<br />
"carbons"; -- Keep multiple online clients in sync<br />
"dialback"; -- Support for verifying remote servers using DNS<br />
"limits"; -- Enable bandwidth limiting for XMPP connections<br />
"pep"; -- Allow users to store public and private data in their account<br />
"private"; -- Legacy account storage mechanism (XEP-0049)<br />
"smacks"; -- Stream management and resumption (XEP-0198)<br />
"vcard4"; -- User profiles (stored in PEP)<br />
"vcard_legacy"; -- Conversion between legacy vCard and PEP Avatar, vcard<br />
<br />
-- Nice to have<br />
"csi_simple"; -- Simple but effective traffic optimizations for mobile devices<br />
--"invites"; -- Create and manage invites<br />
--"invites_adhoc"; -- Allow admins/users to create invitations via their client<br />
--"invites_register"; -- Allows invited users to create accounts<br />
"ping"; -- Replies to XMPP pings with pongs<br />
"register"; -- Allow users to register on this server using a client and change passwords<br />
"time"; -- Let others know the time here on this server<br />
"uptime"; -- Report how long server has been running<br />
"version"; -- Replies to server version requests<br />
"mam"; -- Store recent messages to allow multi-device synchronization<br />
"turn_external"; -- Provide external STUN/TURN service for e.g. audio/video calls<br />
<br />
-- Admin interfaces<br />
"admin_adhoc"; -- Allows administration via an XMPP client that supports ad-hoc commands<br />
"admin_shell"; -- Allow secure administration via 'prosodyctl shell'<br />
<br />
-- HTTP modules<br />
"bosh"; -- Enable BOSH clients, aka "Jabber over HTTP"<br />
--"http_openmetrics"; -- for exposing metrics to stats collectors<br />
"websocket"; -- XMPP over WebSockets<br />
<br />
-- Other specific functionality<br />
"posix"; -- POSIX functionality, sends server to background, enables syslog, etc.<br />
"announce"; -- Send announcement to all online users<br />
--"groups"; -- Shared roster support<br />
--"legacyauth"; -- Legacy authentication. Only used by some old clients and bots.<br />
--"mimicking"; -- Prevent address spoofing<br />
--"motd"; -- Send a message to users when they log in<br />
"s2s_bidi"; -- Bi-directional server-to-server (XEP-0288)<br />
"server_contact_info"; -- Publish contact information for this service<br />
"tombstones"; -- Prevent registration of deleted accounts<br />
"watchregistrations"; -- Alert admins of registrations<br />
"welcome"; -- Welcome users who register accounts<br />
<br />
"cloud_notify"; -- push support<br />
"cloud_notify_extensions"; -- meta-module that simply enables all the modules required to support Siskin or Snikket iOS on a Prosody server<br />
"register_web"; -- registrations via web interface<br />
"mam_adhoc"; -- allowing clients to change archiving preferences<br />
"throttle_presence"; -- automatically cuts down on presence traffic when clients indicate they are inactive<br />
"external_services"; -- calls<br />
"admin_adhoc"; -- ad-hoc administration of server<br />
}<br />
<br />
-- These modules are auto-loaded, but should you want<br />
-- to disable them then uncomment them here:<br />
modules_disabled = {<br />
-- "offline"; -- Store offline messages<br />
-- "c2s"; -- Handle client connections<br />
-- "s2s"; -- Handle server-to-server connections<br />
}<br />
<br />
-- Debian:<br />
-- Please, don't change this option since /run/prosody/<br />
-- is one of the few directories Prosody is allowed to write to<br />
--<br />
pidfile = "/run/prosody/prosody.pid";<br />
<br />
-- Server-to-server authentication<br />
-- Require valid certificates for server-to-server connections?<br />
-- If false, other methods such as dialback (DNS) may be used instead.<br />
<br />
s2s_secure_auth = true<br />
<br />
-- Some servers have invalid or self-signed certificates. You can list<br />
-- remote domains here that will not be required to authenticate using<br />
-- certificates. They will be authenticated using other methods instead,<br />
-- even when s2s_secure_auth is enabled.<br />
<br />
--s2s_insecure_domains = { "insecure.example" }<br />
<br />
-- Even if you disable s2s_secure_auth, you can still require valid<br />
-- certificates for some domains by specifying a list here.<br />
<br />
--s2s_secure_domains = { "jabber.org" }<br />
<br />
<br />
-- Rate limits<br />
-- Enable rate limits for incoming client and server connections. These help<br />
-- protect from excessive resource consumption and denial-of-service attacks.<br />
<br />
limits = {<br />
c2s = {<br />
rate = "3kb/s";<br />
};<br />
s2sin = {<br />
rate = "50kb/s";<br />
};<br />
}<br />
<br />
-- Authentication<br />
-- Select the authentication backend to use. The 'internal' providers<br />
-- use Prosody's configured data storage to store the authentication data.<br />
-- For more information see https://prosody.im/doc/authentication<br />
<br />
authentication = "internal_hashed"<br />
<br />
-- Many authentication providers, including the default one, allow you to<br />
-- create user accounts via Prosody's admin interfaces. For details, see the<br />
-- documentation at https://prosody.im/doc/creating_accounts<br />
<br />
<br />
-- Storage<br />
-- Select the storage backend to use. By default Prosody uses flat files<br />
-- in its configured data directory, but it also supports more backends<br />
-- through modules. An "sql" backend is included by default, but requires<br />
-- additional dependencies. See https://prosody.im/doc/storage for more info.<br />
<br />
storage = "sql" -- Default is "internal" (Debian: "sql" requires one of the<br />
-- lua-dbi-sqlite3, lua-dbi-mysql or lua-dbi-postgresql packages to work)<br />
<br />
-- For the "sql" backend, you can uncomment *one* of the below to configure:<br />
--sql = { driver = "SQLite3", database = "prosody.sqlite" } -- Default. 'database' is the filename.<br />
sql = { driver = "MySQL", database = "jabber_example_com", username = "jabberuser", password = "MYSECRETPASSWORD", host = "localhost" }<br />
--sql = { driver = "PostgreSQL", database = "prosody", username = "prosody", password = "secret", host = "localhost" }<br />
<br />
<br />
-- Archiving configuration<br />
-- If mod_mam is enabled, Prosody will store a copy of every message. This<br />
-- is used to synchronize conversations between multiple clients, even if<br />
-- they are offline. This setting controls how long Prosody will keep<br />
-- messages in the archive before removing them.<br />
<br />
archive_expires_after = "1w" -- Remove archived messages after 1 week<br />
max_archive_query_results = 20;<br />
<br />
-- You can also configure messages to be stored in-memory only. For more<br />
-- archiving options, see https://prosody.im/doc/modules/mod_mam<br />
<br />
<br />
-- Audio/video call relay (STUN/TURN)<br />
-- To ensure clients connected to the server can establish connections for<br />
-- low-latency media streaming (such as audio and video calls), it is<br />
-- recommended to run a STUN/TURN server for clients to use. If you do this,<br />
-- specify the details here so clients can discover it.<br />
-- Find more information at https://prosody.im/doc/turn<br />
<br />
-- Specify the address of the TURN service (you may use the same domain as XMPP)<br />
turn_external_host = "xmpp.EXAMPLE.COM"<br />
<br />
-- This secret must be set to the same value in both Prosody and the TURN server<br />
turn_external_secret = "MYSUPERSECRETKEY"<br />
<br />
<br />
-- Logging configuration<br />
-- For advanced logging see https://prosody.im/doc/logging<br />
--<br />
-- Debian:<br />
-- Logs info and higher to /var/log<br />
-- Logs errors to syslog also<br />
log = {<br />
-- Log files (change 'info' to 'debug' for debug logs):<br />
info = "/var/log/prosody/prosody.log";<br />
error = "/var/log/prosody/prosody.err";<br />
-- Syslog:<br />
{ levels = { "error" }; to = "syslog"; };<br />
}<br />
<br />
<br />
-- Uncomment to enable statistics<br />
-- For more info see https://prosody.im/doc/statistics<br />
statistics = "internal"<br />
<br />
<br />
-- Certificates<br />
-- Every virtual host and component needs a certificate so that clients and<br />
-- servers can securely verify its identity. Prosody will automatically load<br />
-- certificates/keys from the directory specified here.<br />
-- For more information, including how to use 'prosodyctl' to auto-import certificates<br />
-- (from e.g. Let's Encrypt) see https://prosody.im/doc/certificates<br />
<br />
-- Location of directory to find certificates in (relative to main config file):<br />
certificates = "certs"<br />
<br />
c2s_direct_tls_ports = { 5223 }<br />
s2s_direct_tls_ports = { 5270 }<br />
c2s_require_encryption = true<br />
s2s_require_encryption = true<br />
tls_profile = "intermediate" -- "modern" if you don't need TLS 1.2<br />
<br />
contact_info = {<br />
abuse = { "xmpp:admin@EXAMPLE.COM" };<br />
admin = { "xmpp:admin@EXAMPLE.COM" };<br />
feedback = { "xmpp:admin@EXAMPLE.COM" };<br />
support = { "https://EXAMPLE.COM", "xmpp:admin@EXAMPLE.COM" };<br />
}<br />
<br />
external_services = {<br />
{<br />
type = "stun",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "stun",<br />
transport = "udp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "turn",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "turn",<br />
transport = "udp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "stuns",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 5349<br />
}, {<br />
type = "turns",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 5349<br />
}<br />
}<br />
<br />
consider_websocket_secure = true<br />
consider_bosh_secure = true<br />
<br />
----------- Virtual hosts -----------<br />
-- You need to add a VirtualHost entry for each domain you wish Prosody to serve.<br />
-- Settings under each VirtualHost entry apply *only* to that host.<br />
-- It's customary to maintain VirtualHost entries in separate config files<br />
-- under /etc/prosody/conf.d/ directory. Examples of such config files can<br />
-- be found in /etc/prosody/conf.avail/ directory.<br />
<br />
------ Additional config files ------<br />
-- For organizational purposes you may prefer to add VirtualHost and<br />
-- Component definitions in their own config files. This line includes<br />
-- all config files in /etc/prosody/conf.d/<br />
<br />
-- VirtualHost "localhost"<br />
-- Prosody requires at least one enabled VirtualHost to function. You can<br />
-- safely remove or disable 'localhost' once you have added another.<br />
<br />
<br />
--VirtualHost "example.com"<br />
<br />
------ Components ------<br />
-- You can specify components to add hosts that provide special services,<br />
-- like multi-user conferences, and transports.<br />
-- For more information on components, see https://prosody.im/doc/components<br />
<br />
---Set up a MUC (multi-user chat) room server on conference.example.com:<br />
--Component "conference.example.com" "muc"<br />
--- Store MUC messages in an archive and allow users to access it<br />
--modules_enabled = { "muc_mam" }<br />
<br />
---Set up a file sharing component<br />
--Component "share.example.com" "http_file_share"<br />
<br />
---Set up an external component (default component port is 5347)<br />
--<br />
-- External components allow adding various services, such as gateways/<br />
-- bridges to non-XMPP networks and services. For more info<br />
-- see: https://prosody.im/doc/components#adding_an_external_component<br />
--<br />
--Component "gateway.example.com"<br />
-- component_secret = "password"<br />
<br />
Include "conf.d/*.cfg.lua"<br />
<br />
---------- End of the Prosody Configuration file ----------<br />
-- You usually **DO NOT** want to add settings here at the end, as they would<br />
-- only apply to the last defined VirtualHost or Component.<br />
--<br />
-- Settings for the global section should go higher up, before the first<br />
-- VirtualHost or Component line, while settings intended for specific hosts<br />
-- should go under the corresponding VirtualHost or Component line.<br />
--<br />
-- For more information see https://prosody.im/doc/configure<br />
<br />
</pre><br />
}}<br />
<br />
{{Hider hiding<br />
|title=Виртуал хост /etc/prosody/conf.avail/EXAMPLE.COM.cfg.lua<br />
|content=<pre><br />
-- Section for example.com<br />
<br />
VirtualHost "EXAMPLE.COM"<br />
enabled = true<br />
<br />
-- Assign this host a certificate for TLS, otherwise it would use the one<br />
-- set in the global section (if any).<br />
-- Note that old-style SSL on port 5223 only supports one certificate, and will always<br />
-- use the global one.<br />
ssl = {<br />
key = "/etc/prosody/certs/EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
<br />
modules_enabled = {<br />
"admin_web"<br />
}<br />
allow_registration = false -- Allow users to register new accounts via in-band<br />
<br />
------ Components ------<br />
-- You can specify components to add hosts that provide special services,<br />
-- like multi-user conferences, and transports.<br />
-- For more information on components, see http://prosody.im/doc/components<br />
<br />
<br />
-- Set up a SOCKS5 bytestream proxy for server-proxied file transfers:<br />
Component "proxy.EXAMPLE.COM" "proxy65"<br />
ssl = {<br />
key = "/etc/prosody/certs/proxy.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/proxy.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
-- proxy65_address = "proxy.EXAMPLE.COM"<br />
proxy65_acl = { "EXAMPLE.COM" }<br />
<br />
-- Set up a MUC (multi-user chat) room server on conference.example.com:<br />
Component "conference.EXAMPLE.COM" "muc"<br />
modules_enabled = {<br />
"muc_mam",<br />
"vcard_muc",<br />
"muc_moderation",<br />
"muc_hats_adhoc"<br />
}<br />
ssl = {<br />
key = "/etc/prosody/certs/conference.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/conference.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
muc_log_by_default = true<br />
muc_log_presences = false<br />
log_all_rooms = false<br />
muc_log_expires_after = "1w"<br />
muc_log_cleanup_interval = 4 * 60 * 60<br />
restrict_room_creation = "local"<br />
<br />
Component "upload.EXAMPLE.COM" "http_upload"<br />
ssl = {<br />
key = "/etc/prosody/certs/upload.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/upload.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
<br />
http_upload_file_size_limit = 1024*1024*10 -- 10 MB<br />
-- http_max_content_size = 1024*1024*30<br />
http_upload_quota = 1024*1024*250 -- 250 MB<br />
http_upload_expire_after = 60*60*24*7 -- 1 week<br />
<br />
Component "pubsub.EXAMPLE.COM" "pubsub"<br />
ssl = {<br />
key = "/etc/prosody/certs/pubsub.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/pubsub.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
</pre><br />
}}<br />
<br />
Файл конфигурации Prosody очень хорошо комментирован, поэтому рассмотрим ключевые моменты, а также опции, добавленные для дополнительно установленных модулей.<br />
<br />
* Первым в конфиг-файле идет [[Jabber ID]] будущего администратора - ему будут доступны команды управления сервером, а также будут присылаться различные уведомления.<br />
* В '''plugin_paths''' добавляется путь к каталогу с устанавливаемыми плагинами.<br />
* Далее идет обширный список модулей. Рассмотрим некоторые:<br />
** '''invites''' и сопутствующие ему модули позволяют сделать регистрацию по приглашениям. Однако есть одно но (на сейчас): это отключит обычную регистрацию. Поэтому какой вариант оставить - решайте сами.<br />
** '''turn_external''' позволит нам подключить настроенный ранее Coturn к Prosody для работы звонков.<br />
** '''cloud_notify''' включит поддержку PUSH-уведомлений.<br />
** '''register_web''' включает регистрацию через веб-страницу. Она доступна по адресу https://EXAMPLE.COM:5281/register_web. Штатно тут включена простенькая CAPTCHA, но можно использовать reCaptcha, для этого дополнительно необходимо будет указать ключи для этого сервиса.<br />
** '''admin_adhoc''' позволит выполнять ряд команд на сервере с JID'а администратора из тех клиентов, которые умеют [[Ad-Hoc]].<br />
* Далее следуют настройки, в которых можно усилить или ослабить проверки сертификатов для других серверов.<br />
* Следующей ключевой настройкой будет указание сервера баз данных. Как мы уже условились выше, для хранения данных сервера [[Свой сервер: подготовка базы данных|будем использовать MySQL или MariaDB]]. Prosody имеет весьма простую структуру базы и встроенную схему, поэтому дополнительных действий не требуется.<br />
* В '''archive_expires_after''' можем указать, как скоро нужно чистить архив сообщений для MAM. Для конференций есть отдельная настройка, она будет описана ниже.<br />
* В '''turn_external_host''' и '''turn_external_secret''' указывается адрес Coturn и тот самый ключ, который прописывали в '''/etc/turnserver.conf'''.<br />
* Далее - несколько опций касательно безопасности:<br />
** '''c2s_direct_tls_ports''' и '''s2s_direct_tls_ports''' включает работу с TLS-портами - они должны быть те же, что указывались в SRV-записях в DNS.<br />
** '''c2s_require_encryption''' и '''s2s_require_encryption''' означает использование исключительно шифрованных соединений между серверами, а также между сервером и клиентом.<br />
** '''tls_profile''' настраивает перечень шифров и протоколов, которые может использовать Prosody.<br />
* В '''contact_info''' можно перечислить контакты администратора и, например, адрес конференции поддержки сервера.<br />
* '''external_services''' описывает сервисы, которые предоставляет Coturn.<br />
<br />
На этом настройка основной части завершена и далее идет настройка виртуальных хостов и их сервисов:<br />
<br />
* В секции VirtualHost идет указание SSL-сертификатов для домена, а также разрешение регистрации через jabber-клиент и включение веб-интерфейса для управления сервером, который доступен по адресу https://example.com:5281/admin.<br />
<br />
Далее перечисляется несколько компонентов - сервисов для данного сервера. В показанном примере это [[конференции]], [[Передача файлов|proxy]], [[Передача файлов|HTTP Upload]] и [[PEP|pubsub]]. Для каждого из них указывается своя пара сертификатов и ключей.<br />
<br />
* Для '''proxy''' можно указать субдомен, на котором он будет доступен, а опция '''proxy65_acl''' перечисляет домены, которые смогут передавать файлы через этот прокси.<br />
* Для конференций включается поддержка MAM, модерирования и дополнительных ролей в конференциях. В опциях задается включение MAM по-умолчанию, время устаревания MAM-архива, а также правила доступа на создание новых конференций.<br />
* Для модуля '''http_upload''' перечисляются лимиты на размеры одиночных файлов, а также общий размер хранилища для пользователя и время устаревания загруженных файлов. Для Prosody сделано несколько реализаций HTTP Upload - например, можно переключиться на '''mod_http_file_share''', если mod_http_upload чем-то не устроит или вообще использовать [https://github.com/horazont/xmpp-http-upload внешний сервис] через '''http_upload_external'''.<br />
<br />
{{ToDo|Доделать}}<br />
<br />
==Сноски==<br />
<br />
<references/><br />
<br />
==Ссылки==<br />
<br />
* https://prosody.im - домашняя страница Prosody и [https://prosody.im/doc ссылка на документацию]<br />
* [https://open-networks.ru/d/67-prosody-im-v012x-ustanovka-i-nastroyka-xmpp-servera-coturn-fail2ban Очень подробное пользовательское руководство по настройке Prosody]<br />
* [https://www.8host.com/blog/ustanovka-prosody-v-ubuntu-18-04/ Еще одно руководство по установке и настройке]<br />
<br />
[[Category:Свой сервер]]</div>Rainhttps://jabberworld.info/index.php?title=Ad-Hoc&diff=10201Ad-Hoc2023-11-02T00:07:47Z<p>Rain: +серверы</p>
<hr />
<div>Ad-Hoc - это расширение Jabber для удаленного выполения команд. Данное расширение используется в:<br />
* [[Транспорт|Транспортах]]. [[JRD:J2J|J2J]] и [[Виды ICQ транспортов|PyICQt]] транспорты используют Ad-Hoc для управления настройками. Например, можно установить расширенный статус (X-status) в транспорте ICQ или настроить автоответчик в транспорте J2J.<br />
* [[JID полезных Jabber-ботов|Сервисах]]. Активно используют Ad-Hoc различного рода переводчики и словари.<br />
* Ботах [http://gluxi.inhex.net Gluxi] и [[Isida|iSida]]. Используется для конфигурации бота отдельно для каждой конференции, доступно админам и овнерам.<br />
* Удаленном управлении. Ad-Hoc используется для удаленного управления Jabber-клиентами и серверами.<br />
<br />
Одним из полезных применений Ad-Hoc является удаленное управление клиентом. При этом возможно выполнять некоторые примитивные команды, такие как смена [[Пользовательские статусы|статуса]] или пересылка непрочитанных сообщений с другого клиента. По соображениям безопасности, удаленное управление чаще всего возможно только с того же [[Jabber ID]], но при некоторой настройке клиентов возможно управление и с другого [[JID]]'а. <br />
<br />
Клиенты, которыми возможно управлять через Ad-Hoc:<br />
<br />
* [[Изображение:Logo 16-16 gajim.png]] [[Gajim]]<br />
* [[Изображение:Logo 16-16 tkabber.png]] [[Tkabber]]<br />
* [[Изображение:Icon 16-16 miranda.png]] [[Miranda]]<br />
* [[Изображение:Icon 16-16 psi.png]] [[Psi]]<br />
* [[Изображение:Logo 16-16 bombus.png]] [[Bombus|BombusMod]]<br />
* [[Изображение:Logo 16-16 bombus.png]] [[Bombus|Bombus+]]<br />
<br />
== Примеры ==<br />
<center><br />
<gallery><br />
Изображение:Ad-hoc.png|[[Tkabber]] удаленно меняет статус [[Jabbim]]<br />
Файл:Tkabber-adhoc-iSida1.png|Меню Ad-hoc команд при настройке бота [[iSida]] через [[Tkabber]]<br />
Файл:Tkabber-adhoc-iSida2.png|Прочие настройки бота [[iSida]] через Ad-Hoc команды [[Tkabber]]<br />
</gallery><br />
</center><br />
<br />
[[Category:Тонкости работы]]</div>Rainhttps://jabberworld.info/index.php?title=%D0%A1%D0%B2%D0%BE%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80:_%D0%BF%D0%BE%D0%B4%D1%80%D0%BE%D0%B1%D0%BD%D0%BE%D0%B5_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B5_Prosody&diff=10200Свой сервер: подробное руководство по установке Prosody2023-11-02T00:05:27Z<p>Rain: MAM для конфы</p>
<hr />
<div>В этой статье приводится пример настройки [[Prosody]] - одного из самых популярных и легковесных jabber-серверов. Для сервера написано просто-таки огромное число модулей на все случаи жизни, поэтому в руководстве, основанном на версии 0.12.4, будет показано подключение актуальных и популярных функций. В качестве сертификатов будем использовать Let's Encrypt - и все это на Debian GNU/Linux.<br />
<br />
Рассмотрим особенности данной конфигурации.<br />
<br />
__TOC__<br />
<br />
== [[ru_wikipedia:DNS|DNS-записи]] ==<br />
<br />
Хотя для базового варианта своего jabber-сервера вполне достаточно [[Регистрация доменного имени|бесплатного DynDNS-домена]], для полноценной конфигурации все же нужно обзавестись собственным доменом, где можно будет добавить все необходимые DNS-записи и сделать субдомены для сервисов. Выбор регистратора и покупка домена остается за рамками данной статьи, тут только приводятся шаги, которые надо сделать после покупки домена в его админке.<br />
<br />
Всего понадобится около 15 записей в DNS:<br />
<br />
# Для удобства, чтобы в случае миграции сервера с одного IP на другой не приходилось переписывать все записи, стоит завести для него субдомен, который будет ссылаться на нужный IP с помощью А-записи (или 2 таких субдомена в случае использования IPv4+IPv6 - один с A-записью, а второй с AAAA), а все остальные записи сделать CNAME-алиасами для него. Например, для данного сервера ('''jabberworld.info''') сделаны 2 субдомена '''xmpp.jabberworld.info''', ссылающиеся на IPv4 и IPv6-адреса.<br />
# Создаем субдомены для необходимых сервисов сервера<ref>Да, если планируется использовать, например, конференции исключительно локально, то можно обойтись и без DNS-записей - сервер и так знает, куда ему подключаться, так как он этот сервис и предоставляет. Но если хочется полноценный сервис, с которым смогут взаимодействовать и другие сервера - то все же потребуются указанные записи в DNS.</ref> - '''conference''' (для [[Конференции|конференций]]), '''proxy''' (прокси для прямой [[Передача файлов|передачи файлов]]), '''pubsub''' (сервисы типа "Публикация/подписка", где может сохраняться самая разная информация) и '''upload''' (сервис для [[Передача файлов|передачи файлов]] через HTTP Upload). Все эти записи создаем как CNAME на наш субдомен из 1-го пункта.<br />
# Создаем ряд SRV-записей для нашего основного домена - они показывают, где именно какой сервис находится. Конечно, если у вас все на одном адресе, то будет работать и так, но мы ведь решили все делать правильно, верно? Итак, нужны такие SRV-записи:<br />
<br />
:: '''_xmpp-client._tcp.EXAMPLE.COM''' (порт '''5222''') - чтобы указать, куда подключаться [[Клиенты Jabber|jabber-клиенту]]<br />
:: '''_xmpps-client._tcp.EXAMPLE.COM''' (порт '''5223''') - аналогичная запись для [https://xmpp.org/extensions/xep-0368.html TLS-подключений клиентов]<br />
:: '''_xmpp-server._tcp.EXAMPLE.COM''' (порт '''5269''') - чтобы указать, куда подключаться [[Публичные серверы Jabber|jabber-серверу]]<br />
:: '''_xmpps-server._tcp.EXAMPLE.COM''' (порт '''5270''') - аналогичная запись для [https://xmpp.org/extensions/xep-0368.html TLS-подключений серверов].<br />
<br />
:: Записи ниже служат для работы сервиса аудио/видеозвонков через jabber<ref name="avcalls">https://prosody.im/doc/turn</ref>. Для максимальной совместимости будем использовать как [[ru_wikipedia:STUN|STUN]], так и [[ru_wikipedia:Traversal Using Relay NAT|TURN]] - все возможные варианты:<br />
<br />
:: '''_stun._tcp.EXAMPLE.COM''' (порт '''3478''') - [[ru_wikipedia:STUN|STUN]] через [[ru_wikipedia:TCP|TCP]]<br />
:: '''_stun._udp.EXAMPLE.COM''' (порт '''3478''') - STUN через UDP<br />
:: '''_stuns._tcp.EXAMPLE.COM''' (порт '''5349''') - шифрованный STUN через TCP<br />
:: '''_turn._tcp.EXAMPLE.COM''' (порт '''3478''') - [[ru_wikipedia:Traversal Using Relay NAT|TURN]] через [[ru_wikipedia:TCP|TCP]]<br />
:: '''_turn._udp.EXAMPLE.COM''' (порт '''3478''') - TURN через UDP<br />
:: '''_turns._tcp.EXAMPLE.COM''' (порт '''5349''') - шифрованный TURN через TCP<br />
<br />
:: Во всех случаях target'ом для записей служит наш алиас из первого пункта.<br />
{{Hider hiding|<br />
|title=Для продвинутых<br />
|content=<br />
:: Самый полный вариант подразумевает в том числе создание SRV-записей для каждого из сервисов-субдоменов - тех, к которым будут подключаться сторонние серверы. Например, для конференций это может выглядеть так:<br />
<br />
:: '''_xmpp-server._tcp.conference.EXAMPLE.COM''' (порт '''5269''')<br />
:: '''_xmpps-server._tcp.conference.EXAMPLE.COM''' (порт '''5270''' для TLS)<br />
<br />
:: Но, как уже говорилось выше, это для совсем уж необычных конфигураций - когда сам домен указывает на один адрес (например, там может работать веб-сервер, предоставляющий чат-логи на сайте https://conference.example.com), а сам jabber-сервер при этом находится совершенно на другом.<br />
}}<br />
Вот как выглядят записи для данного сервера в админке бесплатного DNS-провайдера [https://dns.he.net Hurricane Electric]:<br />
<br />
<center>[[Файл:Jabber srv.png]]</center><br />
<br />
== Сертификаты ==<br />
<br />
<br />
В современном мире стандартной практикой является шифрование соединений, а для этого, в свою очередь, требуются [[ru_wikipedia:Цифровой сертификат|сертификаты]] от доверенных центров сертификации. Можно, конечно, использовать самоподписанный сертификат, но, во-первых, не все серверы будут их принимать - а значит, к ним не получится подключиться и общаться с их пользователями, а во-вторых, в подключающихся клиентах будут появляться сообщения о недоверенном сертификате, что тоже будет доставлять определенные неудобства. Поэтому стоит воспользоваться услугами одного из популярных бесплатных центров сертификации - [https://letsencrypt.org Let's Encrypt].<br />
<br />
Для работы с сертификатами от Let's Encrypt в Debian есть специальный пакет - '''certbot''', поэтому установите его следующей командой:<br />
<br />
sudo apt-get install certbot<br />
<br />
Сертификаты от Let's Encrypt выдаются сроком на 3 месяца, поэтому в конце этого срока их нужно обновлять. Для подтверждения владения доменом, а также для автоматизации обновления сертификатов в дальнейшем со стороны Let's Encrypt делается запрос на веб-сервер для указанного домена, поэтому для полноценной работы стоит установить какой-нибудь популярный вариант и прописать там виртуальные хосты для нашего jabber-сервера, а также сервисов на нем (сертификаты будут делаться в том числе для сервисов). Пример конфигурации веб-сервера Apache для данного сервера:<br />
<br />
{{Hider hiding<br />
|title=apache_to_jabber_service_domains.conf<br />
|content=<pre><br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@jabberworld.info<br />
DocumentRoot /var/www/jabberworld.info/htdocs<br />
ServerName jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@upload.jabberworld.info<br />
DocumentRoot /var/www/upload.jabberworld.info/htdocs<br />
ServerName upload.jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@pubsub.jabberworld.info<br />
DocumentRoot /var/www/pubsub.jabberworld.info/htdocs<br />
ServerName pubsub.jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@conference.jabberworld.info<br />
DocumentRoot /var/www/conference.jabberworld.info/htdocs<br />
ServerName conference.jabberworld.info<br />
</VirtualHost><br />
<br />
<VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80><br />
ServerAdmin webmaster@proxy.jabberworld.info<br />
DocumentRoot /var/www/proxy.jabberworld.info/htdocs<br />
ServerName proxy.jabberworld.info<br />
</VirtualHost><br />
</pre><br />
}}<br />
<br />
В каталогах сервера не обязательно должен быть какой-то контент, хотя, например, на основном домене можно разместить какую-то страничку, посвященную jabber-серверу, а на поддомене '''conference''' разместить чат-логи [[Конференции|конференций]]. Субдомен '''upload''' можно приспособить под загружаемые через HTTP Upload файлы, чтобы в дальнейшем их раздавал веб-сервер<ref name="http_upload">В таком случае ему нужно обеспечить доступ к каталогу '''/var/lib/prosody/http_upload/''' - а лучше указать опцию '''http_upload_path''' с путем за пределами домашнего каталога Prosody, плюс обеспечить нужные права веб-серверу, чтобы он мог читать файлы, загруженные через jabber-сервер. Такое решение имеет еще одно преимущество: разнообразные клиенты (не только Jabber) будут гораздо охотнее показывать превью для обычных HTTP/HTTPS-ссылок (т.е., на 80 или 443-м порту), а не тех, где контент отдается на "необычном" порту - вроде 5281 в данном примере.</ref>.<br />
<br />
После всех приготовлений<ref>Более подробно можно почитать тут: [[Свой сервер: подготовка веб-сервера и сертификатов]]</ref> создайте все необходимые сертификаты. Для этого воспользуйтесь следующими командами (выполнять надо от пользователя '''root'''):<br />
<br />
certbot certonly --webroot --webroot-path /var/www/EXAMPLE.COM/htdocs/ -d EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/conference.EXAMPLE.COM/htdocs/ -d conference.EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/upload.EXAMPLE.COM/htdocs/ -d upload.EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/pubsub.EXAMPLE.COM/htdocs/ -d pubsub.EXAMPLE.COM --rsa-key-size 4096<br />
certbot certonly --webroot --webroot-path /var/www/proxy.EXAMPLE.COM/htdocs/ -d proxy.EXAMPLE.COM --rsa-key-size 4096<br />
<br />
В параметрах после '''--webroot-path''' указывается каталог веб-сервера для данного домена, а после '''-d''' - сам домен.<br />
<br />
После успешного выполнения команд будет выдана информация о созданном сертификате, в том числе 2 файла - цепочка ключей и приватный ключ - сохраните эти пути для дальнейшего использования, они нам еще пригодятся. Всего получится 10 файлов. certbot обновляет сертификаты автоматически, если срок их истечения составляет менее 30 дней - т.е., обновление происходит раз в 2 месяца.<br />
<br />
Так как Prosody работает от своего пользователя и не имеет доступа к сертификатам, созданным certbot от рута, то надо каким-то образом предоставить доступ ejabberd'у к сертификатам. Самым простым и корректным вариантом на сейчас является выполнение следующей команды от рута<ref>https://prosody.im/doc/letsencrypt</ref>:<br />
<br />
prosodyctl --root cert import /etc/letsencrypt/live<br />
<br />
В дальнейшем эту команду можно использовать после каждого обновления сертификатов - например, указав ее в качестве deploy hook для certbot.<br />
<br />
== Установка и настройка Prosody ==<br />
<br />
Все подготовительные процедуры завершены, теперь можно приступать непосредственно к установке и настройке своего jabber-сервера. Для поддержки звонков потребуется еще STUN/TURN-сервер - в качестве него будем использовать Coturn. В Debian установить Prosody с поддержкой MySQL<ref>На самом деле выбор MySQL обусловлен с одной стороны ее популярностью на веб-хостингах, с другой - возможностью хранить большие объемы данных, которые могут потребоваться, если вы хотите хранить, например, архив сообщений за длительное время. Однако если таких планов нет и это будет сервер для одного или нескольких человек со скромными запросами - то вполне можно обойтись Sqlite.</ref> и Coturn можно командой<br />
<br />
apt-get install prosody coturn lua-dbi-mysql<br />
<br />
'''Примечание''': на момент написания статьи самая последняя версия Prosody - 0.12.4 - доступна в репозитории '''backports'''. Чтобы установить сервер оттуда - добавьте к команде выше ключ '''-t bookworm-backports''' (само-собой, репозиторий должен быть прописан в '''/etc/apt/sources.list''').<br />
<br />
Настройку начнем с Coturn - она очень простая и сводится к включению сервиса в файле '''/etc/default/coturn''' опции '''TURNSERVER_ENABLED=1''', а также приведению конфиг-файла '''/etc/turnserver.conf''' к такому виду:<br />
<br />
{{Hider hiding<br />
|title=/etc/turnserver.conf<br />
|content=<pre><br />
listening-port=3478<br />
tls-listening-port=5349<br />
verbose<br />
use-auth-secret<br />
static-auth-secret=MYSUPERSECRETKEY<br />
userdb=/var/lib/turn/turndb<br />
realm=EXAMPLE.COM<br />
cert=/etc/turncerts/EXAMPLE.COM.fullchain.pem<br />
pkey=/etc/turncerts/EXAMPLE.COM.privkey.pem<br />
syslog<br />
prod<br />
no-multicast-peers<br />
no-cli<br />
no-tlsv1<br />
no-tlsv1_1<br />
no-rfc5780<br />
no-stun-backward-compatibility<br />
response-origin-only-with-rfc5780<br />
</pre><br />
}}<br />
<br />
Фактически, изменения в конфиге сводятся по-большей части к следующему:<br />
<br />
* Указываем прослушиваемые порты - они должны быть такие же, как были указаны в SRV-записях в DNS.<br />
* Включаем '''use-auth-secret''' и указываем придуманный '''ключ-пароль''' - его мы потом укажем в конфиг-файле у Prosody.<br />
* Указываем '''realm''' - домен и сертификат с ключом для него.<br />
<br />
Да, так как Coturn не может напрямую прочитать сертификаты из каталога Let's Encrypt - для правильной работы можно создать отдельный каталог, куда копировать сертификаты с нужными правами. В примере выше это '''/etc/turncerts'''. Команду копирования и изменения прав можно объединить в одном скрипте с командой копирования сертификатов для Prosody и вызывать этот скрипт в качестве deploy hook для Let's Encrypt (или просто по Cron'у, например, раз в неделю).<br />
<br />
Закончив правку конфиг-файла, перезапускаем TURN-сервер:<br />
<br />
systemctl restart coturn.service<br />
<br />
Теперь переходим к настройке Prosody. Как уже говорилось, под него есть множество разнообразных модулей. Для удобства добавления модулей добавьте следующие пакеты:<br />
<br />
apt-get install luarocks liblua5.4-dev lua-luaossl --no-install-recommends<br />
<br />
После чего можно сразу установить полезные модули:<br />
<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_admin_web # Поддержка WEB-интерфейса для управления сервером<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_vcard_muc # Поддержка vCard для конференций<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_muc_moderation # Модерирование конференций и возможность удалять спам<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_cloud_notify # Поддержка PUSH-уведомлений<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_cloud_notify_extensions # Дополнительные модули для PUSH<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_http_upload # Поддержка файлообмена через HTTP Upload<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_register_web # Поддержка регистрации через веб-страницу<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_muc_hats_adhoc # Указание дополнительных ролей в конференциях<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_muc_hats_api # См. выше<br />
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_mam_adhoc # Возможность управлять настройками MAM-архива из jabber-клиента<br />
<br />
Конфигурационный файл у Prosody состоит из нескольких секций:<br />
* Общие параметры<br />
* Параметры виртуал-хоста<br />
* Параметры сервисов.<br />
<br />
Для удобства то, что относится к виртуал-хосту и его сервисам, вынесено в отдельный файл. Для включения нужного виртуал-хоста поместите симлинк на его конфиг в '''/etc/prosody/conf.d'''.<br />
<br />
{{Hider hiding<br />
|title=/etc/prosody/prosody.cfg.lua<br />
|content=<pre><br />
-- Prosody Example Configuration File<br />
--<br />
-- Information on configuring Prosody can be found on our<br />
-- website at https://prosody.im/doc/configure<br />
--<br />
-- Tip: You can check that the syntax of this file is correct<br />
-- when you have finished by running this command:<br />
-- prosodyctl check config<br />
-- If there are any errors, it will let you know what and where<br />
-- they are, otherwise it will keep quiet.<br />
--<br />
-- The only thing left to do is rename this file to remove the .dist ending, and fill in the<br />
-- blanks. Good luck, and happy Jabbering!<br />
<br />
<br />
---------- Server-wide settings ----------<br />
-- Settings in this section apply to the whole server and are the default settings<br />
-- for any virtual hosts<br />
<br />
-- This is a (by default, empty) list of accounts that are admins<br />
-- for the server. Note that you must create the accounts separately<br />
-- (see https://prosody.im/doc/creating_accounts for info)<br />
-- Example: admins = { "user1@example.com", "user2@example.net" }<br />
admins = {<br />
"admin@EXAMPLE.COM"<br />
}<br />
<br />
-- This option allows you to specify additional locations where Prosody<br />
-- will search first for modules. For additional modules you can install, see<br />
-- the community module repository at https://modules.prosody.im/<br />
-- For a local administrator it's common to place local modifications<br />
-- under /usr/local/ hierarchy:<br />
plugin_paths = {<br />
"/usr/lib/prosody/modules",<br />
"/var/lib/prosody/custom_plugins/"<br />
}<br />
<br />
-- This is the list of modules Prosody will load on startup.<br />
-- Documentation for bundled modules can be found at: https://prosody.im/doc/modules<br />
modules_enabled = {<br />
<br />
-- Generally required<br />
"disco"; -- Service discovery<br />
"roster"; -- Allow users to have a roster. Recommended ;)<br />
"saslauth"; -- Authentication for clients and servers. Recommended if you want to log in.<br />
"tls"; -- Add support for secure TLS on c2s/s2s connections<br />
<br />
-- Not essential, but recommended<br />
"blocklist"; -- Allow users to block communications with other users<br />
"bookmarks"; -- Synchronise the list of open rooms between clients<br />
"carbons"; -- Keep multiple online clients in sync<br />
"dialback"; -- Support for verifying remote servers using DNS<br />
"limits"; -- Enable bandwidth limiting for XMPP connections<br />
"pep"; -- Allow users to store public and private data in their account<br />
"private"; -- Legacy account storage mechanism (XEP-0049)<br />
"smacks"; -- Stream management and resumption (XEP-0198)<br />
"vcard4"; -- User profiles (stored in PEP)<br />
"vcard_legacy"; -- Conversion between legacy vCard and PEP Avatar, vcard<br />
<br />
-- Nice to have<br />
"csi_simple"; -- Simple but effective traffic optimizations for mobile devices<br />
--"invites"; -- Create and manage invites<br />
--"invites_adhoc"; -- Allow admins/users to create invitations via their client<br />
--"invites_register"; -- Allows invited users to create accounts<br />
"ping"; -- Replies to XMPP pings with pongs<br />
"register"; -- Allow users to register on this server using a client and change passwords<br />
"time"; -- Let others know the time here on this server<br />
"uptime"; -- Report how long server has been running<br />
"version"; -- Replies to server version requests<br />
"mam"; -- Store recent messages to allow multi-device synchronization<br />
"turn_external"; -- Provide external STUN/TURN service for e.g. audio/video calls<br />
<br />
-- Admin interfaces<br />
"admin_adhoc"; -- Allows administration via an XMPP client that supports ad-hoc commands<br />
"admin_shell"; -- Allow secure administration via 'prosodyctl shell'<br />
<br />
-- HTTP modules<br />
"bosh"; -- Enable BOSH clients, aka "Jabber over HTTP"<br />
--"http_openmetrics"; -- for exposing metrics to stats collectors<br />
"websocket"; -- XMPP over WebSockets<br />
<br />
-- Other specific functionality<br />
"posix"; -- POSIX functionality, sends server to background, enables syslog, etc.<br />
"announce"; -- Send announcement to all online users<br />
--"groups"; -- Shared roster support<br />
--"legacyauth"; -- Legacy authentication. Only used by some old clients and bots.<br />
--"mimicking"; -- Prevent address spoofing<br />
--"motd"; -- Send a message to users when they log in<br />
"s2s_bidi"; -- Bi-directional server-to-server (XEP-0288)<br />
"server_contact_info"; -- Publish contact information for this service<br />
"tombstones"; -- Prevent registration of deleted accounts<br />
"watchregistrations"; -- Alert admins of registrations<br />
"welcome"; -- Welcome users who register accounts<br />
<br />
"cloud_notify"; -- push support<br />
"cloud_notify_extensions"; -- meta-module that simply enables all the modules required to support Siskin or Snikket iOS on a Prosody server<br />
"register_web"; -- registrations via web interface<br />
"mam_adhoc"; -- allowing clients to change archiving preferences<br />
"throttle_presence"; -- automatically cuts down on presence traffic when clients indicate they are inactive<br />
"external_services"; -- calls<br />
"admin_adhoc"; -- ad-hoc administration of server<br />
}<br />
<br />
-- These modules are auto-loaded, but should you want<br />
-- to disable them then uncomment them here:<br />
modules_disabled = {<br />
-- "offline"; -- Store offline messages<br />
-- "c2s"; -- Handle client connections<br />
-- "s2s"; -- Handle server-to-server connections<br />
}<br />
<br />
-- Debian:<br />
-- Please, don't change this option since /run/prosody/<br />
-- is one of the few directories Prosody is allowed to write to<br />
--<br />
pidfile = "/run/prosody/prosody.pid";<br />
<br />
-- Server-to-server authentication<br />
-- Require valid certificates for server-to-server connections?<br />
-- If false, other methods such as dialback (DNS) may be used instead.<br />
<br />
s2s_secure_auth = true<br />
<br />
-- Some servers have invalid or self-signed certificates. You can list<br />
-- remote domains here that will not be required to authenticate using<br />
-- certificates. They will be authenticated using other methods instead,<br />
-- even when s2s_secure_auth is enabled.<br />
<br />
--s2s_insecure_domains = { "insecure.example" }<br />
<br />
-- Even if you disable s2s_secure_auth, you can still require valid<br />
-- certificates for some domains by specifying a list here.<br />
<br />
--s2s_secure_domains = { "jabber.org" }<br />
<br />
<br />
-- Rate limits<br />
-- Enable rate limits for incoming client and server connections. These help<br />
-- protect from excessive resource consumption and denial-of-service attacks.<br />
<br />
limits = {<br />
c2s = {<br />
rate = "3kb/s";<br />
};<br />
s2sin = {<br />
rate = "50kb/s";<br />
};<br />
}<br />
<br />
-- Authentication<br />
-- Select the authentication backend to use. The 'internal' providers<br />
-- use Prosody's configured data storage to store the authentication data.<br />
-- For more information see https://prosody.im/doc/authentication<br />
<br />
authentication = "internal_hashed"<br />
<br />
-- Many authentication providers, including the default one, allow you to<br />
-- create user accounts via Prosody's admin interfaces. For details, see the<br />
-- documentation at https://prosody.im/doc/creating_accounts<br />
<br />
<br />
-- Storage<br />
-- Select the storage backend to use. By default Prosody uses flat files<br />
-- in its configured data directory, but it also supports more backends<br />
-- through modules. An "sql" backend is included by default, but requires<br />
-- additional dependencies. See https://prosody.im/doc/storage for more info.<br />
<br />
storage = "sql" -- Default is "internal" (Debian: "sql" requires one of the<br />
-- lua-dbi-sqlite3, lua-dbi-mysql or lua-dbi-postgresql packages to work)<br />
<br />
-- For the "sql" backend, you can uncomment *one* of the below to configure:<br />
--sql = { driver = "SQLite3", database = "prosody.sqlite" } -- Default. 'database' is the filename.<br />
sql = { driver = "MySQL", database = "jabber_example_com", username = "jabberuser", password = "MYSECRETPASSWORD", host = "localhost" }<br />
--sql = { driver = "PostgreSQL", database = "prosody", username = "prosody", password = "secret", host = "localhost" }<br />
<br />
<br />
-- Archiving configuration<br />
-- If mod_mam is enabled, Prosody will store a copy of every message. This<br />
-- is used to synchronize conversations between multiple clients, even if<br />
-- they are offline. This setting controls how long Prosody will keep<br />
-- messages in the archive before removing them.<br />
<br />
archive_expires_after = "1w" -- Remove archived messages after 1 week<br />
max_archive_query_results = 20;<br />
<br />
-- You can also configure messages to be stored in-memory only. For more<br />
-- archiving options, see https://prosody.im/doc/modules/mod_mam<br />
<br />
<br />
-- Audio/video call relay (STUN/TURN)<br />
-- To ensure clients connected to the server can establish connections for<br />
-- low-latency media streaming (such as audio and video calls), it is<br />
-- recommended to run a STUN/TURN server for clients to use. If you do this,<br />
-- specify the details here so clients can discover it.<br />
-- Find more information at https://prosody.im/doc/turn<br />
<br />
-- Specify the address of the TURN service (you may use the same domain as XMPP)<br />
turn_external_host = "xmpp.EXAMPLE.COM"<br />
<br />
-- This secret must be set to the same value in both Prosody and the TURN server<br />
turn_external_secret = "MYSUPERSECRETKEY"<br />
<br />
<br />
-- Logging configuration<br />
-- For advanced logging see https://prosody.im/doc/logging<br />
--<br />
-- Debian:<br />
-- Logs info and higher to /var/log<br />
-- Logs errors to syslog also<br />
log = {<br />
-- Log files (change 'info' to 'debug' for debug logs):<br />
info = "/var/log/prosody/prosody.log";<br />
error = "/var/log/prosody/prosody.err";<br />
-- Syslog:<br />
{ levels = { "error" }; to = "syslog"; };<br />
}<br />
<br />
<br />
-- Uncomment to enable statistics<br />
-- For more info see https://prosody.im/doc/statistics<br />
statistics = "internal"<br />
<br />
<br />
-- Certificates<br />
-- Every virtual host and component needs a certificate so that clients and<br />
-- servers can securely verify its identity. Prosody will automatically load<br />
-- certificates/keys from the directory specified here.<br />
-- For more information, including how to use 'prosodyctl' to auto-import certificates<br />
-- (from e.g. Let's Encrypt) see https://prosody.im/doc/certificates<br />
<br />
-- Location of directory to find certificates in (relative to main config file):<br />
certificates = "certs"<br />
<br />
c2s_direct_tls_ports = { 5223 }<br />
s2s_direct_tls_ports = { 5270 }<br />
c2s_require_encryption = true<br />
s2s_require_encryption = true<br />
tls_profile = "intermediate" -- "modern" if you don't need TLS 1.2<br />
<br />
contact_info = {<br />
abuse = { "xmpp:admin@EXAMPLE.COM" };<br />
admin = { "xmpp:admin@EXAMPLE.COM" };<br />
feedback = { "xmpp:admin@EXAMPLE.COM" };<br />
support = { "https://EXAMPLE.COM", "xmpp:admin@EXAMPLE.COM" };<br />
}<br />
<br />
external_services = {<br />
{<br />
type = "stun",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "stun",<br />
transport = "udp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "turn",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "turn",<br />
transport = "udp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 3478<br />
}, {<br />
type = "stuns",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 5349<br />
}, {<br />
type = "turns",<br />
transport = "tcp",<br />
host = "xmpp.EXAMPLE.COM",<br />
port = 5349<br />
}<br />
}<br />
<br />
consider_websocket_secure = true<br />
consider_bosh_secure = true<br />
<br />
----------- Virtual hosts -----------<br />
-- You need to add a VirtualHost entry for each domain you wish Prosody to serve.<br />
-- Settings under each VirtualHost entry apply *only* to that host.<br />
-- It's customary to maintain VirtualHost entries in separate config files<br />
-- under /etc/prosody/conf.d/ directory. Examples of such config files can<br />
-- be found in /etc/prosody/conf.avail/ directory.<br />
<br />
------ Additional config files ------<br />
-- For organizational purposes you may prefer to add VirtualHost and<br />
-- Component definitions in their own config files. This line includes<br />
-- all config files in /etc/prosody/conf.d/<br />
<br />
-- VirtualHost "localhost"<br />
-- Prosody requires at least one enabled VirtualHost to function. You can<br />
-- safely remove or disable 'localhost' once you have added another.<br />
<br />
<br />
--VirtualHost "example.com"<br />
<br />
------ Components ------<br />
-- You can specify components to add hosts that provide special services,<br />
-- like multi-user conferences, and transports.<br />
-- For more information on components, see https://prosody.im/doc/components<br />
<br />
---Set up a MUC (multi-user chat) room server on conference.example.com:<br />
--Component "conference.example.com" "muc"<br />
--- Store MUC messages in an archive and allow users to access it<br />
--modules_enabled = { "muc_mam" }<br />
<br />
---Set up a file sharing component<br />
--Component "share.example.com" "http_file_share"<br />
<br />
---Set up an external component (default component port is 5347)<br />
--<br />
-- External components allow adding various services, such as gateways/<br />
-- bridges to non-XMPP networks and services. For more info<br />
-- see: https://prosody.im/doc/components#adding_an_external_component<br />
--<br />
--Component "gateway.example.com"<br />
-- component_secret = "password"<br />
<br />
Include "conf.d/*.cfg.lua"<br />
<br />
---------- End of the Prosody Configuration file ----------<br />
-- You usually **DO NOT** want to add settings here at the end, as they would<br />
-- only apply to the last defined VirtualHost or Component.<br />
--<br />
-- Settings for the global section should go higher up, before the first<br />
-- VirtualHost or Component line, while settings intended for specific hosts<br />
-- should go under the corresponding VirtualHost or Component line.<br />
--<br />
-- For more information see https://prosody.im/doc/configure<br />
<br />
</pre><br />
}}<br />
<br />
{{Hider hiding<br />
|title=Виртуал хост /etc/prosody/conf.avail/EXAMPLE.COM.cfg.lua<br />
|content=<pre><br />
-- Section for example.com<br />
<br />
VirtualHost "EXAMPLE.COM"<br />
enabled = true<br />
<br />
-- Assign this host a certificate for TLS, otherwise it would use the one<br />
-- set in the global section (if any).<br />
-- Note that old-style SSL on port 5223 only supports one certificate, and will always<br />
-- use the global one.<br />
ssl = {<br />
key = "/etc/prosody/certs/EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
<br />
modules_enabled = {<br />
"admin_web"<br />
}<br />
allow_registration = false -- Allow users to register new accounts via in-band<br />
<br />
------ Components ------<br />
-- You can specify components to add hosts that provide special services,<br />
-- like multi-user conferences, and transports.<br />
-- For more information on components, see http://prosody.im/doc/components<br />
<br />
<br />
-- Set up a SOCKS5 bytestream proxy for server-proxied file transfers:<br />
Component "proxy.EXAMPLE.COM" "proxy65"<br />
ssl = {<br />
key = "/etc/prosody/certs/proxy.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/proxy.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
proxy65_address = "proxy.EXAMPLE.COM"<br />
proxy65_acl = { "EXAMPLE.COM" }<br />
<br />
-- Set up a MUC (multi-user chat) room server on conference.example.com:<br />
Component "conference.EXAMPLE.COM" "muc"<br />
modules_enabled = {<br />
"muc_mam",<br />
"vcard_muc",<br />
"muc_moderation",<br />
"muc_hats_adhoc"<br />
}<br />
ssl = {<br />
key = "/etc/prosody/certs/conference.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/conference.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
muc_log_by_default = true<br />
muc_log_presences = false<br />
log_all_rooms = false<br />
muc_log_expires_after = "1w"<br />
muc_log_cleanup_interval = 4 * 60 * 60<br />
restrict_room_creation = "local"<br />
<br />
Component "upload.EXAMPLE.COM" "http_upload"<br />
ssl = {<br />
key = "/etc/prosody/certs/upload.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/upload.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
<br />
http_upload_file_size_limit = 1024*1024*10 -- 10 MB<br />
-- http_max_content_size = 1024*1024*30<br />
http_upload_quota = 1024*1024*250 -- 250 MB<br />
http_upload_expire_after = 60*60*24*7 -- 1 week<br />
<br />
Component "pubsub.EXAMPLE.COM" "pubsub"<br />
ssl = {<br />
key = "/etc/prosody/certs/pubsub.EXAMPLE.COM.key";<br />
certificate = "/etc/prosody/certs/pubsub.EXAMPLE.COM.crt";<br />
options = { "no_sslv2", "no_sslv3" }<br />
}<br />
</pre><br />
}}<br />
<br />
Файл конфигурации Prosody очень хорошо комментирован, поэтому рассмотрим ключевые моменты, а также опции, добавленные для дополнительно установленных модулей.<br />
<br />
* Первым в конфиг-файле идет [[Jabber ID]] будущего администратора - ему будут доступны команды управления сервером, а также будут присылаться различные уведомления.<br />
* В '''plugin_paths''' добавляется путь к каталогу с устанавливаемыми плагинами.<br />
* Далее идет обширный список модулей. Рассмотрим некоторые:<br />
** '''invites''' и сопутствующие ему модули позволяют сделать регистрацию по приглашениям. Однако есть одно но (на сейчас): это отключит обычную регистрацию. Поэтому какой вариант оставить - решайте сами.<br />
** '''turn_external''' позволит нам подключить настроенный ранее Coturn к Prosody для работы звонков.<br />
** '''cloud_notify''' включит поддержку PUSH-уведомлений.<br />
** '''register_web''' включает регистрацию через веб-страницу. Она доступна по адресу https://EXAMPLE.COM:5281/register_web. Штатно тут включена простенькая CAPTCHA, но можно использовать reCaptcha, для этого дополнительно необходимо будет указать ключи для этого сервиса.<br />
** '''admin_adhoc''' позволит выполнять ряд команд на сервере с JID'а администратора из тех клиентов, которые умеют [[Ad-Hoc]].<br />
* Далее следуют настройки, в которых можно усилить или ослабить проверки сертификатов для других серверов.<br />
* Следующей ключевой настройкой будет указание сервера баз данных. Как мы уже условились выше, для хранения данных сервера [[Свой сервер: подготовка базы данных|будем использовать MySQL или MariaDB]]. Prosody имеет весьма простую структуру базы и встроенную схему, поэтому дополнительных действий не требуется.<br />
* В '''archive_expires_after''' можем указать, как скоро нужно чистить архив сообщений для MAM. Для конференций есть отдельная настройка, она будет описана ниже.<br />
* В '''turn_external_host''' и '''turn_external_secret''' указывается адрес Coturn и тот самый ключ, который прописывали в '''/etc/turnserver.conf'''.<br />
* Далее - несколько опций касательно безопасности:<br />
** '''c2s_direct_tls_ports''' и '''s2s_direct_tls_ports''' включает работу с TLS-портами - они должны быть те же, что указывались в SRV-записях в DNS.<br />
** '''c2s_require_encryption''' и '''s2s_require_encryption''' означает использование исключительно шифрованных соединений между серверами, а также между сервером и клиентом.<br />
** '''tls_profile''' настраивает перечень шифров и протоколов, которые может использовать Prosody.<br />
* В '''contact_info''' можно перечислить контакты администратора и, например, адрес конференции поддержки сервера.<br />
* '''external_services''' описывает сервисы, которые предоставляет Coturn.<br />
<br />
На этом настройка основной части завершена и далее идет настройка виртуальных хостов и их сервисов:<br />
<br />
* <br />
<br />
{{ToDo|Доделать}}<br />
<br />
==Сноски==<br />
<br />
<references/><br />
<br />
==Ссылки==<br />
<br />
* https://prosody.im - домашняя страница Prosody и [https://prosody.im/doc ссылка на документацию]<br />
* [https://open-networks.ru/d/67-prosody-im-v012x-ustanovka-i-nastroyka-xmpp-servera-coturn-fail2ban Очень подробное пользовательское руководство по настройке Prosody]<br />
* [https://www.8host.com/blog/ustanovka-prosody-v-ubuntu-18-04/ Еще одно руководство по установке и настройке]<br />
<br />
[[Category:Свой сервер]]</div>Rain