Установка ejabberd XMPP-сервера на своём VPS — Docker Compose, TLS, LDAP

ejabberd: установка XMPP-сервера на своём VPS за час

Установка ejabberd на собственный VPS занимает меньше часа и даёт компании полный контроль над корпоративной перепиской. Один узел ejabberd на машине с 16 ГБ оперативной памяти обслуживает 200–300 тысяч одновременных подключений — для офиса на 50–500 человек этого хватит с запасом на годы вперёд.

В этом руководстве мы разберём весь путь: от выбора VPS и настройки DNS до подключения Active Directory и запуска групповых чатов с шифрованием OMEMO. Все шаги проверены на Ubuntu 24.04 LTS и ejabberd 26.03.

установка ejabberd

Ключевой тезис: Установка 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 чат-серверов для бизнеса.

Корпоративный XMPP-сервер ejabberd на собственном VPS — безопасная инфраструктура для бизнеса

ejabberd, Prosody или Matrix — сравнение для бизнеса

Перед установкой ejabberd стоит понять, чем он отличается от альтернатив. На рынке открытых мессенджеров три основных игрока: ejabberd, Prosody и Matrix (Synapse/Dendrite). Каждый решает схожую задачу, но архитектура, ресурсоёмкость и модель развёртывания у них различаются кардинально.

Prosody — лёгкий XMPP-сервер на Lua. Он прост в настройке и подходит для небольших команд, но у него нет встроенной кластеризации. Когда компания вырастает за 100 пользователей и потребуется отказоустойчивость, придётся мигрировать. Matrix (Synapse) — современный протокол с богатым интерфейсом Element, но сервер на Python потребляет от 2 ГБ RAM даже на небольших инсталляциях и требует PostgreSQL. ejabberd стартует на 200 МБ и работает с встроенной Mnesia без внешних зависимостей.

КритерийejabberdProsodyMatrix (Synapse)
ЯзыкErlang/OTPLuaPython
Минимум RAM200 МБ50 МБ2 ГБ
КластеризацияВстроенная (Mnesia)НетЧерез workers
Макс. подключений / узел200–300 тыс.10–20 тыс.5–10 тыс.
LDAP / ADДаДаЧерез мост
ЛицензияGPL v2MITApache 2.0
ПротоколXMPPXMPPMatrix

Ключевое преимущество ejabberd — нативная кластеризация. Вы добавляете второй узел командой join_cluster — и получаете отказоустойчивость без внешних инструментов. Erlang обеспечивает горячее обновление кода: мы обновляем ejabberd без отключения пользователей — ни Prosody, ни Synapse такого не умеют.

Отдельно про Mattermost и Rocket.Chat. Это не XMPP-серверы, а монолитные платформы со своим протоколом. Они дают красивый интерфейс из коробки, но потребляют от 4 ГБ RAM, требуют MongoDB или PostgreSQL и не поддерживают федерацию. Если задача — именно защищённый корпоративный чат с минимальными ресурсами, ejabberd выигрывает по всем параметрам. Если сравнение убедило вас в пользу XMPP, установка ejabberd — логичный следующий шаг.

Сравнение ejabberd, Prosody и Matrix Synapse по потреблению RAM и производительности

Требования к 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 человек.

Интеграция ejabberd с Active Directory через LDAP — автоматическая синхронизация пользователей

Клиенты, шифрование 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 без установки программ на компьютеры сотрудников. Если вы ещё выбираете платформу, ознакомьтесь с гидом по выбору корпоративного мессенджера для бизнеса.

Итог

Часто задаваемые вопросы

Ответы на часто задаваемые вопросы по теме статьи.

Для 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 и запустим мессенджер для всей команды за один рабочий день. Узнайте, как получить защищённый корпоративный чат без ежемесячных платежей вендору.