Prosody

Updated 13 May 2019

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

Installing and configuring PostgreSQL

Install and configure PostgreSQL according to the manual. Replace the dbtest database with prosody, and the test user with prosody.

Installing and configuring Prosody

First install Prosody:

emerge -a net-im/prosody

Configure Prosody for 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.