Prosody

Updated 13 May 2019

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

Installing and configuring PostgreSQL

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

Installing and configuring Prosody

First install 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" }

-- Settings for Gentoo init script and net-im/jabber-base permissions system:
daemonize = true;
prosody_user = "jabber";
prosody_group = "jabber";
pidfile = "/var/run/jabber/prosody.pid";

...
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" }

----------- 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"

VirtualHost "xmpp.example.org"
    ssl = {
        certificate = "/etc/letsencrypt/live/xmpp.example.org/fullchain.pem";
        key = "/etc/letsencrypt/live/xmpp.example.org/privkey.pem";
    }

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

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

Starting Prosody

Start the Prosody daemon:

/etc/init.d/prosody start

Add Prosody to autostart:

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

Components

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

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

Adding conferences

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

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

Adding an external component

Для добавления внешнего компонента необходимо сообщить 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 configuration

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 - это порты, которые используются для подключения клиентами и серверами соответственно.

Note

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

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

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

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