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:
-- 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 выполните:
WARNING: there is already a transaction in progress Enter new password: Retype new password:
Для изменения пароля учётной записи 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 в качестве домена конференций добавьте в файл настроек следующие строки :
Component "muc.xmpp.example.org" "muc" name = "Conferences"
Добавление внешнего компонента
Для добавления внешнего компонента необходимо сообщить Prosody адрес и пароль, с которыми компонент будет подключаться к серверу.
Определите внешний компонент matrix.xmpp.example.org с паролем secret в конце конфигурационного файла:
-- 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.