Редактирование: Свой сервер: подробное руководство по установке Prosody

Внимание: Вы не вошли в систему. Ваш IP-адрес будет общедоступен, если вы запишете какие-либо изменения. Если вы войдёте или создадите учётную запись, её имя будет использоваться вместо IP-адреса, наряду с другими преимуществами.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий ниже, чтобы убедиться, что это нужная вам правка, и запишите страницу ниже, чтобы отменить правку.

Текущая версия Ваш текст
Строка 1: Строка 1:
В этой статье приводится пример настройки [[Prosody]] - одного из самых популярных и легковесных jabber-серверов. Для сервера написано просто-таки [https://modules.prosody.im/all.html огромное число модулей] на все случаи жизни, поэтому в руководстве, основанном на версии 0.12.4, будет показано подключение актуальных и популярных функций. В качестве сертификатов будем использовать Let's Encrypt, а в качестве хранилища данных, в том числе архива сообщений - MySQL<ref name="mysql"></ref> - и все это на Debian GNU/Linux.
В этой статье приводится пример настройки [[Prosody]] - одного из самых популярных и легковесных jabber-серверов. Для сервера написано просто-таки огромное число модулей на все случаи жизни, поэтому в руководстве, основанном на версии 0.12.4, будет показано подключение актуальных и популярных функций. В качестве сертификатов будем использовать Let's Encrypt - и все это на Debian GNU/Linux.


Рассмотрим особенности данной конфигурации.
Рассмотрим особенности данной конфигурации.
Строка 90: Строка 90:
}}
}}


В каталогах сервера не обязательно должен быть какой-то контент, хотя, например, на основном домене можно разместить какую-то страничку, посвященную 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>.
В каталогах сервера не обязательно должен быть какой-то контент, хотя, например, на основном домене можно разместить какую-то страничку, посвященную 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>.


После всех приготовлений<ref>Более подробно можно почитать тут: [[Свой сервер: подготовка веб-сервера и сертификатов]]</ref> создайте все необходимые сертификаты. Для этого воспользуйтесь следующими командами (выполнять надо от пользователя '''root'''):
После всех приготовлений<ref>Более подробно можно почитать тут: [[Свой сервер: подготовка веб-сервера и сертификатов]]</ref> создайте все необходимые сертификаты. Для этого воспользуйтесь следующими командами (выполнять надо от пользователя '''root'''):
Строка 104: Строка 104:
После успешного выполнения команд будет выдана информация о созданном сертификате, в том числе 2 файла - цепочка ключей и приватный ключ - сохраните эти пути для дальнейшего использования, они нам еще пригодятся. Всего получится 10 файлов. certbot обновляет сертификаты автоматически, если срок их истечения составляет менее 30 дней - т.е., обновление происходит раз в 2 месяца.
После успешного выполнения команд будет выдана информация о созданном сертификате, в том числе 2 файла - цепочка ключей и приватный ключ - сохраните эти пути для дальнейшего использования, они нам еще пригодятся. Всего получится 10 файлов. certbot обновляет сертификаты автоматически, если срок их истечения составляет менее 30 дней - т.е., обновление происходит раз в 2 месяца.


Так как Prosody работает от своего пользователя и не имеет доступа к сертификатам, созданным certbot от рута, то надо каким-то образом предоставить серверу доступ к сертификатам. Самым простым и корректным вариантом на сейчас является выполнение следующей команды от рута<ref>https://prosody.im/doc/letsencrypt</ref>:
Так как Prosody работает от своего пользователя и не имеет доступа к сертификатам, созданным certbot от рута, то надо каким-то образом предоставить доступ ejabberd'у к сертификатам. Самым простым и корректным вариантом на сейчас является выполнение следующей команды от рута<ref>https://prosody.im/doc/letsencrypt</ref>:


  prosodyctl --root cert import /etc/letsencrypt/live
  prosodyctl --root cert import /etc/letsencrypt/live
Строка 112: Строка 112:
== Установка и настройка Prosody ==
== Установка и настройка Prosody ==


Все подготовительные процедуры завершены, теперь можно приступать непосредственно к установке и настройке своего jabber-сервера. Для поддержки звонков потребуется еще STUN/TURN-сервер - в качестве него будем использовать Coturn. В Debian установить Prosody с поддержкой MySQL<ref name="mysql">На самом деле выбор MySQL обусловлен с одной стороны ее популярностью на веб-хостингах, с другой - возможностью хранить большие объемы данных, которые могут потребоваться, если вы хотите хранить, например, архив сообщений за длительное время. Однако если таких планов нет и это будет сервер для одного или нескольких человек со скромными запросами - то вполне можно обойтись Sqlite.</ref> и Coturn можно командой
Все подготовительные процедуры завершены, теперь можно приступать непосредственно к установке и настройке своего jabber-сервера. Для поддержки звонков потребуется еще STUN/TURN-сервер - в качестве него будем использовать Coturn. В Debian установить Prosody с поддержкой MySQL и Coturn можно командой


  apt-get install prosody coturn lua-dbi-mysql
  apt-get install prosody coturn lua-dbi-mysql
Строка 151: Строка 151:


Да, так как Coturn не может напрямую прочитать сертификаты из каталога Let's Encrypt - для правильной работы можно создать отдельный каталог, куда копировать сертификаты с нужными правами. В примере выше это '''/etc/turncerts'''. Команду копирования и изменения прав можно объединить в одном скрипте с командой копирования сертификатов для Prosody и вызывать этот скрипт в качестве deploy hook для Let's Encrypt (или просто по Cron'у, например, раз в неделю).
Да, так как Coturn не может напрямую прочитать сертификаты из каталога Let's Encrypt - для правильной работы можно создать отдельный каталог, куда копировать сертификаты с нужными правами. В примере выше это '''/etc/turncerts'''. Команду копирования и изменения прав можно объединить в одном скрипте с командой копирования сертификатов для Prosody и вызывать этот скрипт в качестве deploy hook для Let's Encrypt (или просто по Cron'у, например, раз в неделю).
Закончив правку конфиг-файла, перезапускаем TURN-сервер:
systemctl restart coturn.service


Теперь переходим к настройке Prosody. Как уже говорилось, под него есть множество разнообразных модулей. Для удобства добавления модулей добавьте следующие пакеты:
Теперь переходим к настройке Prosody. Как уже говорилось, под него есть множество разнообразных модулей. Для удобства добавления модулей добавьте следующие пакеты:
Строка 164: Строка 160:
  prosodyctl install --server=https://modules.prosody.im/rocks/ mod_admin_web # Поддержка WEB-интерфейса для управления сервером
  prosodyctl install --server=https://modules.prosody.im/rocks/ mod_admin_web # Поддержка WEB-интерфейса для управления сервером
  prosodyctl install --server=https://modules.prosody.im/rocks/ mod_vcard_muc # Поддержка vCard для конференций
  prosodyctl install --server=https://modules.prosody.im/rocks/ mod_vcard_muc # Поддержка vCard для конференций
  prosodyctl install --server=https://modules.prosody.im/rocks/ mod_muc_moderation # Модерирование конференций и возможность удалять спам
  prosodyctl install --server=https://modules.prosody.im/rocks/ mod_muc_moderation # Модерирование конференций - возможность удалять спам-сообщения
  prosodyctl install --server=https://modules.prosody.im/rocks/ mod_cloud_notify # Поддержка PUSH-уведомлений
  prosodyctl install --server=https://modules.prosody.im/rocks/ mod_cloud_notify # Поддержка PUSH-уведомлений
  prosodyctl install --server=https://modules.prosody.im/rocks/ mod_cloud_notify_extensions # Дополнительные модули для PUSH
  prosodyctl install --server=https://modules.prosody.im/rocks/ mod_cloud_notify_extensions # Дополнительные модули для PUSH
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_http_upload # Поддержка файлообмена через HTTP Upload
  prosodyctl install --server=https://modules.prosody.im/rocks/ mod_register_web # Поддержка регистрации через веб-страницу
  prosodyctl install --server=https://modules.prosody.im/rocks/ mod_register_web # Поддержка регистрации через веб-страницу
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_muc_hats_adhoc # Указание дополнительных ролей в конференциях
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_muc_hats_api # См. выше
  prosodyctl install --server=https://modules.prosody.im/rocks/ mod_mam_adhoc # Возможность управлять настройками MAM-архива из jabber-клиента
  prosodyctl install --server=https://modules.prosody.im/rocks/ mod_mam_adhoc # Возможность управлять настройками MAM-архива из jabber-клиента


Конфигурационный файл у Prosody состоит из нескольких секций:
Конфигурационный файл у Prosody состоит из нескольких секций: общие параметры, параметры виртуал-хоста и параметры сервисов. Для удобства то, что относится к виртуал-хосту и его сервисом, вынесено в отдельный файл.
* Общие параметры
* Параметры виртуал-хоста
* Параметры сервисов.
 
Для удобства то, что относится к виртуал-хосту и его сервисам, вынесено в отдельный файл. Для включения нужного виртуал-хоста поместите симлинк на его конфиг в '''/etc/prosody/conf.d'''.


{{Hider hiding
{{Hider hiding
Строка 241: Строка 235:
-- Nice to have
-- Nice to have
"csi_simple"; -- Simple but effective traffic optimizations for mobile devices
"csi_simple"; -- Simple but effective traffic optimizations for mobile devices
--"invites"; -- Create and manage invites
--"invites_adhoc"; -- Allow admins/users to create invitations via their client
--"invites_register"; -- Allows invited users to create accounts
"ping"; -- Replies to XMPP pings with pongs
"ping"; -- Replies to XMPP pings with pongs
"register"; -- Allow users to register on this server using a client and change passwords
"register"; -- Allow users to register on this server using a client and change passwords
Строка 349: Строка 346:
-- For the "sql" backend, you can uncomment *one* of the below to configure:
-- For the "sql" backend, you can uncomment *one* of the below to configure:
--sql = { driver = "SQLite3", database = "prosody.sqlite" } -- Default. 'database' is the filename.
--sql = { driver = "SQLite3", database = "prosody.sqlite" } -- Default. 'database' is the filename.
sql = { driver = "MySQL", database = "jabber_example_com", username = "jabberuser", password = "MYSECRETPASSWORD", host = "localhost" }
sql = { driver = "MySQL", database = "prosody_EXAMPLE.COM", username = "prosodyuser", password = "3zEROPqJhF.tk", host = "localhost" }
--sql = { driver = "PostgreSQL", database = "prosody", username = "prosody", password = "secret", host = "localhost" }
--sql = { driver = "PostgreSQL", database = "prosody", username = "prosody", password = "secret", host = "localhost" }


Строка 377: Строка 374:


-- This secret must be set to the same value in both Prosody and the TURN server
-- This secret must be set to the same value in both Prosody and the TURN server
turn_external_secret = "MYSUPERSECRETKEY"
turn_external_secret = "6BuWNTSPL0$5IYM0FKdAJu6ZG7ep8sFHzAZUr4PNO6IKzwp1Vxb4wD"




Строка 536: Строка 533:
         modules_enabled = {
         modules_enabled = {
             "admin_web"
             "admin_web"
    --"invites"; -- Create and manage invites
    --"invites_adhoc"; -- Allow admins/users to create invitations via their client
    --"invites_register"; -- Allows invited users to create accounts
         }
         }
         allow_registration = false -- Allow users to register new accounts via in-band
         allow_registration = false -- Allow users to register new accounts via in-band
Строка 555: Строка 549:
                 options = { "no_sslv2", "no_sslv3" }
                 options = { "no_sslv2", "no_sslv3" }
         }
         }
         -- proxy65_address = "proxy.EXAMPLE.COM"
         proxy65_address = "proxy.EXAMPLE.COM"
         proxy65_acl = { "EXAMPLE.COM" }
         proxy65_acl = { "EXAMPLE.COM" }


Строка 563: Строка 557:
                 "muc_mam",
                 "muc_mam",
                 "vcard_muc",
                 "vcard_muc",
                 "muc_moderation"
                 "muc_moderation",
                "muc_hats_adhoc"
         }
         }
         ssl = {
         ssl = {
Строка 577: Строка 572:
         restrict_room_creation = "local"
         restrict_room_creation = "local"


Component "upload.EXAMPLE.COM" "http_file_share"
Component "upload.EXAMPLE.COM" "http_upload"
         ssl = {
         ssl = {
                 key = "/etc/prosody/certs/upload.EXAMPLE.COM.key";
                 key = "/etc/prosody/certs/upload.EXAMPLE.COM.key";
Строка 584: Строка 579:
         }
         }


         http_file_share_size_limit = 100*1024*1024 -- 100 MB per file
         http_upload_file_size_limit = 1024*1024*10 -- 10 MB
         http_file_share_expires_after = 7*86400 -- file expiration - 1 week
         -- http_max_content_size = 1024*1024*30
         http_file_share_global_quota = 1024*1024*1024*10 -- 10 GiB total
        http_upload_quota = 1024*1024*250 -- 250 MB
         http_upload_expire_after = 60*60*24*7 -- 1 week


Component "pubsub.EXAMPLE.COM" "pubsub"
Component "pubsub.EXAMPLE.COM" "pubsub"
Строка 597: Строка 593:
}}
}}


Файл конфигурации Prosody очень хорошо комментирован, поэтому рассмотрим ключевые моменты, а также опции, добавленные для дополнительно установленных модулей.
* Первым в конфиг-файле идет [[Jabber ID]] будущего администратора - ему будут доступны команды управления сервером, а также будут присылаться различные уведомления.
* В '''plugin_paths''' добавляется путь к каталогу с устанавливаемыми плагинами.
* Далее идет обширный список модулей. Рассмотрим некоторые:
** '''turn_external''' позволит нам подключить настроенный ранее Coturn к Prosody для работы звонков.
** '''cloud_notify''' включит поддержку PUSH-уведомлений.
** '''register_web''' включает регистрацию через веб-страницу. Она доступна по адресу https://EXAMPLE.COM:5281/register_web. Штатно тут включена простенькая CAPTCHA, но можно использовать reCaptcha, для этого дополнительно необходимо будет указать ключи для этого сервиса.
** '''admin_adhoc''' позволит выполнять ряд команд на сервере с JID'а администратора из тех клиентов, которые умеют [[Ad-Hoc]].
* Далее следуют настройки, в которых можно усилить или ослабить проверки сертификатов для других серверов.
* Следующей ключевой настройкой будет указание сервера баз данных. Как мы уже условились выше, для хранения данных сервера [[Свой сервер: подготовка базы данных|будем использовать MySQL или MariaDB]]. Prosody имеет весьма простую структуру базы и встроенную схему, поэтому дополнительных действий не требуется.
* В '''archive_expires_after''' можем указать, как скоро нужно чистить архив сообщений для MAM. Для конференций есть отдельная настройка, она будет описана ниже.
* В '''turn_external_host''' и '''turn_external_secret''' указывается адрес Coturn и тот самый ключ, который прописывали в '''/etc/turnserver.conf'''.
* Далее - несколько опций касательно безопасности:
** '''c2s_direct_tls_ports''' и '''s2s_direct_tls_ports''' включает работу с TLS-портами - они должны быть те же, что указывались в SRV-записях в DNS.
** '''c2s_require_encryption''' и '''s2s_require_encryption''' означает использование исключительно шифрованных соединений между серверами, а также между сервером и клиентом.
** '''tls_profile''' настраивает перечень шифров и протоколов, которые может использовать Prosody.
* В '''contact_info''' можно перечислить контакты администратора и, например, адрес конференции поддержки сервера.
* '''external_services''' описывает сервисы, которые предоставляет Coturn.
На этом настройка основной части завершена и далее идет настройка виртуальных хостов и их сервисов:
* В секции VirtualHost идет указание SSL-сертификатов для домена, а также разрешение регистрации через jabber-клиент и включение веб-интерфейса для управления сервером, который доступен по адресу https://example.com:5281/admin.
* '''invites''' и сопутствующие ему модули позволяют сделать регистрацию по приглашениям. Однако есть одно но (на сейчас): это отключит обычную регистрацию. Поэтому какой вариант оставить - решайте сами.
Далее перечисляется несколько компонентов - сервисов для данного сервера. В показанном примере это [[конференции]], [[Передача файлов|proxy]], [[Передача файлов|HTTP Upload]] и [[PEP|pubsub]]. Для каждого из них указывается своя пара сертификатов и ключей.
* Для '''proxy''' можно указать субдомен, на котором он будет доступен, а опция '''proxy65_acl''' перечисляет домены, которые смогут передавать файлы через этот прокси.
* Для конференций включается поддержка MAM и модерирования. В опциях задается включение MAM по-умолчанию, время устаревания MAM-архива, а также правила доступа на создание новых конференций.
* Для модуля '''http_file_share''' перечисляются лимиты на размеры одиночных файлов, а также общий размер хранилища и время устаревания загруженных файлов. Для Prosody сделано несколько реализаций HTTP Upload - например, можно переключиться на '''mod_http_upload''', если mod_http_file_share чем-то не устроит или вообще использовать [https://github.com/horazont/xmpp-http-upload внешний сервис] через '''http_upload_external'''.
Закончив правку файлов конфигурации - перезапустите Prosody:
systemctl restart prosody
Теперь можете создать пользователя-администратора:
prosodyctl adduser admin@EXAMPLE.COM
А также проверить корректность конфигурации следующими командами:
prosodyctl check config
prosodyctl check certs
prosodyctl check turn


Во всех случаях в конце команда должна возвращать "'''All checks passed, congratulations!'''". Сервер готов к использованию!
{{ToDo|Доделать}}


==Сноски==
==Сноски==
Строка 650: Строка 602:
==Ссылки==
==Ссылки==


* https://prosody.im - домашняя страница Prosody и [https://prosody.im/doc ссылка на документацию]
* https://prosody.im - домашняя страница ejabberd
* [https://open-networks.ru/d/67-prosody-im-v012x-ustanovka-i-nastroyka-xmpp-servera-coturn-fail2ban Очень подробное пользовательское руководство по настройке Prosody]
* [https://www.8host.com/blog/ustanovka-prosody-v-ubuntu-18-04/ Еще одно руководство по установке и настройке]
* [https://pingvinus.ru/note/xmmp-prosody ...и еще одно]


[[Category:Свой сервер]]
[[Category:Свой сервер]]

Обратите внимание, что все добавления и изменения текста статьи рассматриваются как выпущенные на условиях лицензии GNU Free Documentation License 1.2 (см. Мир Jabber:Авторские права). Если вы не хотите, чтобы ваши тексты свободно распространялись и редактировались любым желающим, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого.
НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ МАТЕРИАЛЫ, ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ!

В целях защиты вики от автоматического спама в правках просим вас решить следующую каптчу:

Отменить Справка по редактированию (в новом окне)

Шаблон, используемый на этой странице: