ejabberd: установка XMPP-сервера на своём VPS за час
Установка ejabberd на собственный VPS занимает меньше часа и даёт компании полный контроль над корпоративной перепиской. Один узел ejabberd на машине с 16 ГБ оперативной памяти обслуживает 200–300 тысяч одновременных подключений — для офиса на 50–500 человек этого хватит с запасом на годы вперёд.
В этом руководстве мы разберём весь путь: от выбора VPS и настройки DNS до подключения Active Directory и запуска групповых чатов с шифрованием OMEMO. Все шаги проверены на Ubuntu 24.04 LTS и ejabberd 26.03.

Ключевой тезис: Установка ejabberd через Docker Compose занимает 40 минут, сервер стартует на 200 МБ оперативной памяти и масштабируется до 300 тысяч онлайн-пользователей на одном узле — это самое эффективное соотношение затрат к производительности среди всех XMPP-серверов с открытым исходным кодом.
Содержание
Зачем бизнесу ejabberd в 2026 году
Корпоративные мессенджеры в облаке решают задачу быстро, но оставляют данные на чужих серверах. Для компаний, которые работают с персональными данными, медицинской документацией или финансовой отчётностью, это неприемлемо. ФЗ-152 обязывает хранить персональные данные граждан РФ на территории России — установка ejabberd на собственном VPS закрывает это требование полностью.
ejabberd развивается с 2002 года и на сегодня остаётся самым распространённым XMPP-сервером в мире. Проект написан на Erlang — языке, который изначально создавался для телеком-систем с требованиями к отказоустойчивости 99,999%. Это не маркетинговый лозунг: один узел ejabberd на машине с 16 ГБ RAM и 4 ядрами обслуживает 200–300 тысяч одновременных подключений. Для сравнения: офис на 500 человек использует меньше 0,3% этой емкости.
Мы разворачиваем ejabberd для клиентов от 20 до 3000 пользователей и видим один и тот же результат: сервер работает месяцами без перезагрузки, потребляет от 200 МБ оперативной памяти и не требует выделенного администратора. При этом XMPP — открытый протокол: сотрудники выбирают клиент под свою платформу (Windows, macOS, Linux, iOS, Android), а компания не привязана к одному поставщику.
Федеративная архитектура — ещё одно преимущество, которое часто недооценивают. Если у компании два офиса с отдельными доменами, серверы ejabberd обмениваются сообщениями напрямую, как почтовые серверы обмениваются письмами. Не нужен центральный концентратор, не нужна общая база данных. Компания сохраняет автономию каждого офиса и при этом даёт сотрудникам единое пространство общения. Для холдингов и групп компаний это решающий аргумент.
Наконец, стоимость. VPS с 2 ядрами и 4 ГБ RAM обойдётся в 800–1500 рублей в месяц у российских провайдеров. Сам ejabberd бесплатен — лицензия GPL v2. Лицензий на пользователя нет, ежемесячных платежей вендору нет. При росте компании с 50 до 500 сотрудников расходы на мессенджер не меняются — это принципиальное отличие от облачных сервисов с ценой за рабочее место. Подробнее о доступных вариантах можно узнать в обзоре self-hosted чат-серверов для бизнеса.

ejabberd, Prosody или Matrix — сравнение для бизнеса
Перед установкой ejabberd стоит понять, чем он отличается от альтернатив. На рынке открытых мессенджеров три основных игрока: ejabberd, Prosody и Matrix (Synapse/Dendrite). Каждый решает схожую задачу, но архитектура, ресурсоёмкость и модель развёртывания у них различаются кардинально.
Prosody — лёгкий XMPP-сервер на Lua. Он прост в настройке и подходит для небольших команд, но у него нет встроенной кластеризации. Когда компания вырастает за 100 пользователей и потребуется отказоустойчивость, придётся мигрировать. Matrix (Synapse) — современный протокол с богатым интерфейсом Element, но сервер на Python потребляет от 2 ГБ RAM даже на небольших инсталляциях и требует PostgreSQL. ejabberd стартует на 200 МБ и работает с встроенной Mnesia без внешних зависимостей.
| Критерий | ejabberd | Prosody | Matrix (Synapse) |
|---|---|---|---|
| Язык | Erlang/OTP | Lua | Python |
| Минимум RAM | 200 МБ | 50 МБ | 2 ГБ |
| Кластеризация | Встроенная (Mnesia) | Нет | Через workers |
| Макс. подключений / узел | 200–300 тыс. | 10–20 тыс. | 5–10 тыс. |
| LDAP / AD | Да | Да | Через мост |
| Лицензия | GPL v2 | MIT | Apache 2.0 |
| Протокол | XMPP | XMPP | Matrix |
Ключевое преимущество ejabberd — нативная кластеризация. Вы добавляете второй узел командой join_cluster — и получаете отказоустойчивость без внешних инструментов. Erlang обеспечивает горячее обновление кода: мы обновляем ejabberd без отключения пользователей — ни Prosody, ни Synapse такого не умеют.
Отдельно про Mattermost и Rocket.Chat. Это не XMPP-серверы, а монолитные платформы со своим протоколом. Они дают красивый интерфейс из коробки, но потребляют от 4 ГБ RAM, требуют MongoDB или PostgreSQL и не поддерживают федерацию. Если задача — именно защищённый корпоративный чат с минимальными ресурсами, ejabberd выигрывает по всем параметрам. Если сравнение убедило вас в пользу XMPP, установка ejabberd — логичный следующий шаг.

Требования к VPS и подготовка окружения
Установка ejabberd начинается с подготовки VPS. Для офиса до 200 человек хватит сервера с 2 виртуальными ядрами, 4 ГБ оперативной памяти и 20 ГБ SSD. Этого достаточно для ejabberd, базы данных Mnesia и архива сообщений за несколько месяцев. Мы рекомендуем брать сервер у российского провайдера с дата-центром в Москве — задержка меньше 10 мс для пользователей в центральном регионе, а данные остаются на территории РФ в соответствии с ФЗ-152.
Операционная система — Ubuntu 24.04 LTS. Мы выбираем её по трём причинам: долгосрочная поддержка до 2029 года, свежие пакеты Docker в официальном репозитории и минимальная базовая установка без лишних сервисов. Debian 12 тоже подойдёт — все команды идентичны. CentOS / RHEL работают, но требуют настройки SELinux и firewalld — это дополнительные 15–20 минут на первичную настройку.
Перед тем как выполнить установку ejabberd, настройте базовую безопасность VPS: создайте отдельного пользователя с правами sudo, отключите вход по паролю в SSH (только ключи), включите ufw с правилами для SSH (22), XMPP-client (5222), XMPP-server (5269) и HTTPS (443). Остальные порты закрыты по умолчанию.
Установите Docker Engine и Docker Compose по официальной инструкции Docker. Не используйте docker.io из репозитория Ubuntu — он отстаёт на 2–3 версии и не включает Compose v2. После установки проверьте: docker –version должен показать 27.x или новее, docker compose version — v2.29+. Добавьте вашего пользователя в группу docker, чтобы не запускать контейнеры от root.
Создайте каталог проекта: /opt/ejabberd. В нём будут docker-compose.yml, конфигурация ejabberd.yml и каталог для томов данных. Все файлы конфигурации храните в Git — это позволит откатить любое изменение за 30 секунд. Общую логику подготовки сервера перед запуском мессенджера мы разбираем в руководстве по развёртыванию мессенджера на своём сервере.
Установка ejabberd через Docker Compose — пошагово
Установка ejabberd выполняется через официальный образ на Docker Hub — ghcr.io/processone/ejabberd. Мы используем именно его, а не сторонние сборки: ProcessOne выпускает обновления каждый месяц, образ подписан и весит около 150 МБ в сжатом виде. Создайте каталог /opt/ejabberd и файл docker-compose.yml:
services:
ejabberd:
image: ghcr.io/processone/ejabberd:26.03
container_name: ejabberd
restart: unless-stopped
ports:
- "5222:5222"
- "5269:5269"
- "5280:5280"
- "5443:5443"
volumes:
- ./ejabberd.yml:/home/ejabberd/conf/ejabberd.yml
- ./database:/home/ejabberd/database
- ./certs:/home/ejabberd/conf/certs
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
Конфигурационный файл ejabberd.yml — сердце всей настройки. Минимальная рабочая конфигурация указывает домен, сертификаты и набор модулей. Обязательный минимум: mod_roster (контакты), mod_offline (офлайн-сообщения), mod_mam (архив), mod_muc (групповые чаты). Создайте файл ejabberd.yml рядом с compose-файлом:
hosts:
- "chat.company.ru"
certfiles:
- "/home/ejabberd/conf/certs/*.pem"
listen:
- port: 5222
ip: "::"
module: ejabberd_c2s
starttls_required: true
- port: 5269
ip: "::"
module: ejabberd_s2s_in
- port: 5443
ip: "::"
module: ejabberd_http
tls: true
request_handlers:
/bosh: mod_bosh
/ws: ejabberd_http_ws
- port: 5280
ip: "::"
module: ejabberd_http
request_handlers:
/admin: ejabberd_web_admin
modules:
mod_roster: {}
mod_offline: {}
mod_mam: {}
mod_muc:
host: conference.@HOST@
mod_vcard: {}
mod_ping: {}
Запустите контейнер и зарегистрируйте первого администратора:
docker compose up -d
docker compose exec ejabberd ejabberdctl status
docker compose exec ejabberd ejabberdctl register admin chat.company.ru ВашПароль
Команда ejabberdctl status должна вернуть «The node ejabberd@localhost is started». После регистрации администратор сразу получает доступ к веб-панели на порту 5280. Директива restart: unless-stopped обязательна — без неё контейнер не поднимется после перезагрузки сервера. Рекомендуем также настроить logging.options с max-size: 10m и max-file: 3 — без этого логи займут весь диск за несколько месяцев. Установка ejabberd через Docker Compose завершена — сервер готов принимать подключения.
TLS-сертификаты, DNS и проброс портов при установке ejabberd
Когда установка ejabberd через Docker Compose выполнена, следующий обязательный шаг — настройка TLS. Без действующего сертификата современные XMPP-клиенты откажутся подключаться к серверу. Мы используем Let’s Encrypt через certbot: сертификат бесплатный, автопродление через cron работает без участия администратора. Установите certbot: apt install certbot. Запросите сертификат командой certbot certonly –standalone -d chat.company.ru. Сертификаты появятся в /etc/letsencrypt/live/chat.company.ru/ — скопируйте fullchain.pem и privkey.pem в каталог /opt/ejabberd/certs/.
ejabberd ожидает объединённый файл: сертификат + ключ в одном .pem. Создайте его командой: cat fullchain.pem privkey.pem > chat.company.ru.pem. В ejabberd.yml укажите certfiles: – /home/ejabberd/conf/certs/*.pem. После обновления сертификата перезагрузите его без остановки сервера: docker compose exec ejabberd ejabberdctl reload_config. Пользователи даже не заметят переключения.
DNS-записи — критически важный этап, который часто пропускают. Без SRV-записей клиенты не найдут сервер автоматически — придётся вписывать IP вручную на каждом устройстве. Создайте четыре записи в DNS-панели вашего регистратора:
1. A-запись: chat.company.ru → IP вашего VPS
2. SRV-запись: _xmpp-client._tcp.company.ru → chat.company.ru, порт 5222, приоритет 0, вес 5
3. SRV-запись: _xmpp-server._tcp.company.ru → chat.company.ru, порт 5269
4. CNAME: conference.chat.company.ru → chat.company.ru (для групповых чатов MUC)
SRV-запись _xmpp-server._tcp нужна для федерации — связи между вашим ejabberd и серверами других компаний. Если федерация не нужна, отключите порт 5269 в ufw и не создавайте эту SRV-запись. Проверить DNS можно через dig SRV _xmpp-client._tcp.company.ru — ответ должен содержать chat.company.ru и порт 5222. Помните: DNS-пропагация занимает от 5 минут до 48 часов в зависимости от TTL. Ставьте TTL 300 (пять минут) на этапе настройки, чтобы быстро исправлять ошибки.
Интеграция ejabberd с Active Directory и LDAP
Если в компании есть Active Directory, установка ejabberd с LDAP-аутентификацией убирает необходимость создавать учётные записи вручную. Модуль mod_ldap подключается к контроллеру домена, и сотрудники входят в мессенджер с тем же паролем, что и в Windows. Это убирает главную проблему корпоративных мессенджеров — ещё один пароль, который пользователи забывают и записывают на стикерах.
Настройка в ejabberd.yml занимает 10–15 строк. Укажите блок auth_method: [ldap], затем параметры подключения: ldap_servers с IP или именем контроллера домена, ldap_port 389 (или 636 для LDAPS), ldap_base с DN контейнера пользователей (например, ou=Users,dc=company,dc=ru), ldap_rootdn с сервисной учётной записью и ldap_password с её паролем. Фильтр ldap_filter позволяет ограничить доступ конкретной группой — например, только сотрудниками с определённым атрибутом: (&(objectClass=person)(memberOf=CN=Jabber,OU=Groups,DC=company,DC=ru)).
Модуль mod_shared_roster_ldap автоматически заполняет список контактов из AD. Новый сотрудник открывает клиент и сразу видит всех коллег, разделённых по отделам — как в адресной книге Outlook. Никаких ручных добавлений. При увольнении учётная запись блокируется в AD — доступ к мессенджеру закрывается автоматически.
Практический совет: создайте в AD сервисную учётную запись svc-ejabberd с правами только на чтение и запретом интерактивного входа. Никогда не используйте администраторскую учётную запись для LDAP-подключения — при компрометации сервера злоумышленник получит полный доступ к домену. Если AD нет, ejabberd работает со встроенной базой Mnesia — пользователи создаются через ejabberdctl register или через REST API. См. также наш Snikket — более простой XMPP-сервер для команд до 30 человек.

Клиенты, шифрование OMEMO и групповые чаты
Установка ejabberd завершена — теперь нужно выбрать клиенты для сотрудников. XMPP — открытый протокол, поэтому клиенты существуют под все платформы. Мы проверили наиболее стабильные варианты для корпоративного использования:
• Windows/macOS/Linux — Gajim (бесплатный, поддерживает OMEMO, групповые чаты, передачу файлов)
• iOS — Monal (бесплатный, поддержка push-уведомлений через APNs) или Siskin IM
• Android — Conversations (бесплатный через F-Droid)
Шифрование OMEMO (XEP-0384) работает по принципу Signal Protocol: ключи хранятся на устройствах, сервер видит только зашифрованные сообщения. Даже администратор сервера не может прочитать переписку. В ejabberd OMEMO работает через mod_pubsub и mod_pep — достаточно включить эти модули, остальное клиенты сделают сами. Gajim и Conversations предлагают включить OMEMO при первом запуске — пользователю достаточно нажать одну кнопку.
Групповые чаты (MUC — Multi-User Chat) — основа командной работы. В ejabberd они настраиваются через mod_muc. Комнаты могут быть постоянными (сохраняются после перезапуска сервера), поддерживать сотни участников и архивировать историю через MAM. Рекомендуем создать комнаты по отделам заранее и сделать их постоянными (persistent: true). Сотрудники увидят список комнат сразу при подключении.
Дополнительные модули, которые стоит включить сразу: mod_http_upload для передачи файлов (фото, документы, снимки экрана), mod_push для push-уведомлений на мобильных устройствах и mod_stream_mgmt (XEP-0198) для надёжной доставки сообщений при нестабильном соединении. ejabberd поддерживает WebSocket и BOSH — при необходимости можно развернуть веб-клиент Converse.js без установки программ на компьютеры сотрудников. Если вы ещё выбираете платформу, ознакомьтесь с гидом по выбору корпоративного мессенджера для бизнеса.
Итог
- Установка ejabberd через Docker Compose занимает 40 минут — от чистого VPS до первого сообщения
- Один узел на 16 ГБ RAM обслуживает 200–300 тысяч подключений — для офиса до 3000 человек хватит с запасом
- Интеграция с Active Directory через mod_ldap убирает отдельные пароли для мессенджера
- OMEMO шифрует сообщения на устройствах — даже администратор сервера не прочитает переписку
- Федерация между серверами работает по аналогии с электронной почтой — офисы общаются напрямую без общей базы данных
Часто задаваемые вопросы
Ответы на часто задаваемые вопросы по теме статьи.
Для 100 пользователей достаточно VPS с 2 виртуальными ядрами, 4 ГБ оперативной памяти и 20 ГБ SSD. Сам ejabberd стартует на 200 МБ RAM. Встроенная база данных Mnesia не требует отдельного сервера баз данных. Стоимость такого VPS у российских провайдеров — 800–1500 рублей в месяц. При росте до 500 пользователей ресурсы увеличивать не нужно.
В файле ejabberd.yml укажите auth_method: [ldap] и параметры подключения: адрес контроллера домена, базовый DN контейнера пользователей, сервисную учётную запись с правами только на чтение. Модуль mod_shared_roster_ldap автоматически заполнит список контактов из AD. Сотрудники войдут в мессенджер с теми же логином и паролем, что и в Windows.
ejabberd потребляет от 200 МБ оперативной памяти, Matrix Synapse — от 2 ГБ. ejabberd имеет встроенную кластеризацию через Mnesia и поддерживает 200–300 тысяч подключений на узел, Synapse — 5–10 тысяч. ejabberd написан на Erlang и поддерживает горячее обновление кода без отключения пользователей. Matrix предлагает более современный интерфейс Element, но требует PostgreSQL и больше вычислительных ресурсов.
Для Windows, macOS и Linux рекомендуем Gajim — бесплатный клиент с поддержкой OMEMO-шифрования, групповых чатов и передачи файлов. На Android — Conversations (бесплатный через F-Droid). На iOS — Monal с поддержкой push-уведомлений. Для работы через браузер подойдёт веб-клиент Converse.js, который подключается к ejabberd по WebSocket.
Мы развернём ejabberd на вашем сервере, настроим TLS, подключим Active Directory и запустим мессенджер для всей команды за один рабочий день. Узнайте, как получить защищённый корпоративный чат без ежемесячных платежей вендору.



