Prosody

Обновлено 28 сентября 2022

Prosody - современный XMPP-сервер для обмена сообщениями, нацеленный на лёгкую настройку и эффективное использование системных ресурсов. Для разработчиков Prosody нацелен ещё и на возможность лёгкого расширения и предоставление гибкой системы для быстрой разработки функциональности или создания прототипов новых протоколов. XMPP, ранее известный как Jabber - открытый, основанный на XML, свободный для использования протокол для мгновенного обмена сообщениями и информацией о присутствии в режиме, близком к режиму реального времени.

Установка и настройка PostgreSQL

Установите и настройте PostgreSQL согласно руководству. Вместо базы данных dbtest из примера создайте базу prosody, а вместо пользователя test создайте prosody.

Установка и настройка Prosody

Установите Prosody:

emerge -a net-im/prosody

Выполните настройку Prosody для xmpp.example.org:

/etc/jabber/prosody.cfg.lua
-- This is a (by default, empty) list of accounts that are admins
-- for the server. Note that you must create the accounts separately
-- (see https://prosody.im/doc/creating_accounts for info)
-- Example: admins = { "user1@example.com", "user2@example.net" }
admins = { "admin@xmpp.example.org" }

...
storage = "sql" -- Default is "internal"

-- 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 = "MySQL", database = "prosody", username = "prosody", password = "secret", host = "localhost" }
sql = { driver = "PostgreSQL", database = "prosody", username = "prosody", password = "secret", host = "localhost" }

...

-- Location of directory to find certificates in (relative to main config file):
certificates = "/etc/letsencrypt/live/xmpp.example.org"

----------- Virtual hosts -----------
-- You need to add a VirtualHost entry for each domain you wish Prosody to serve.
-- Settings under each VirtualHost entry apply *only* to that host.

--VirtualHost "localhost"
-- Prosody requires at least one enabled VirtualHost to function. You can
-- safely remove or disable 'localhost' once you have added another.

VirtualHost "xmpp.example.org"

Получение сертификата Let's Encrypt

Получите сертификат домена xmpp.example.org согласно руководству.

Запуск Prosody

Запустите домон Prosody:

/etc/init.d/prosody start

Добавьте Prosody в автозагрузку:

rc-update add prosody

Управление учётными записями

Для добавления учётной записи admin@xmpp.example.org выполните:

prosodyctl adduser admin@xmpp.example.org
WARNING:  there is already a transaction in progress
Enter new password: 
Retype new password:

Для изменения пароля учётной записи admin@xmpp.example.org выполните:

prosodyctl passwd admin@xmpp.example.org
WARNING:  there is already a transaction in progress
Enter new password: 
Retype new password:

Для удаления учётной записи admin@xmpp.example.org выполните:

prosodyctl deluser admin@xmpp.example.org

Компоненты

Компоненты - это дополнительные сервисы на сервере, доступные клиентам ПО через поддомены главного сервера. Примером компоненты могут быть конференции, пользовательские каталоги, шлюзы к другим протоколам.

Prosody поддерживает как внутренние компоненты (работающие в рамках данного Prosody-сервера), так и внешние - по стандарту XEP-0114.

Добавление конференций

В XMPP отдельный поддомен обычно выделяется для конференций (многопользовательских чатов). Для определения muc.xmpp.example.org в качестве домена конференций добавьте в файл настроек следующие строки :

/etc/jabber/prosody.cfg.lua
Component "muc.xmpp.example.org" "muc"
    name = "Conferences"

Добавление внешнего компонента

Для добавления внешнего компонента необходимо сообщить Prosody адрес и пароль, с которыми компонент будет подключаться к серверу.

Определите внешний компонент matrix.xmpp.example.org с паролем secret в конце конфигурационного файла:

/etc/jabber/prosody.cfg.lua
-- Global config section --
component_interface = "0.0.0.0"
...
Component "matrix.xmpp.example.org"
    component_secret = "secret"

Настройки DNS

SRV-записи позволяют прозрачно на уровне DNS перенаправлять XMPP-сервисы на другие домены и порты. Предположим, что необходимо, чтобы у учётных записей были адреса вида user@example.org, тогда как XMPP-сервер при этом реально будет находиться на xmpp.example.org.

XMPP поддерживает 2 типа SRV-записей: для использования клиентами ('c2s') и для использования другими XMPP-серверами ('s2s').

Для добавления xmpp.example.org в качестве XMPP домена example.org добавьте следующие SRV-записи в DNS:

_xmpp-client._tcp.example.org. 18000 IN SRV 0 5 5222 xmpp.example.org.
_xmpp-server._tcp.example.org. 18000 IN SRV 0 5 5269 xmpp.example.org.

5222 и 5269 - это порты, которые используются для подключения клиентами и серверами соответственно.

Заметка

Целевой домен должен быть существующей A-записью. Это не может быть IP-адрес или запись CNAME.

Чтобы сервисы на поддоменах (такие, как конференции и прочие внешние компоненты) были видны на других серверах, для них также необходимы SRV-записи.

Для определения сервиса конференций muc.example.org добавьте SRV-запись в DNS:

_xmpp-server._tcp.muc.example.org. 18000 IN SRV 0 5 5269 xmpp.example.org.