Ejabberd настройка windows server 2012

Обновлено: 07.07.2024

Стоит отметить тот факт, что ejabberd является лидером среди Jabber-серверов. Его используют Facebook, Vkontakte, Yandex, Google, etc.

Ключевыми особеностями ejabberd являются:

ejabberd написан на языке Erlang и конфигурационный файл в том числе, однако знаний языка для правки конфигурационного файла не нужно - он интуитивно понятен.

Перед установкой и настройкой ejabberd, внесем необходимые изменения в DNS, чтобы потом на это не отвлекаться. Для полноценной работы jabber-сервера, необходимо внести A- и SRV-записи. Если используется DNS-сервер BIND9, то записи будут выглядеть примерно так:

Ну и соответственно, нужно проследить, чтобы изменения DNS вступили в силу.
Итак, вернемся непосредственно к ejabberd. Установку ejabberd выполним из системы портов:

Поскольку всю информацию будем хранить в MySQL, то среди опций установки необходимо отметить ODBC (Open DataBase Connectivity):

ejabberd-2.1.13

Во время установки ejabberd будет установлена зависимость - язык Erlang, среди опций установки также необходимо выбрать поддержку ODBC.

По завершению установки, отобразились короткие рекомендации относительно дальнейшей настройки.

Ознакомимся с рекомендациями, начиная "с хвоста".

Согласно месседжа, изменились UID и GID демона ejabberd. Однако, поскольку мы не обновляем ejabberd, а выполняем новую установку, то нас это предупреждение не касается. Кстати, в текущей версии 2.1.13 используется UID и GID с идентификаторами 543.

Домашний каталог - /var/spool/ejabberd. Что ж, в случае чего - заглянем.

А вот информация о том, что есть примеры конфигурационных файлов порадовала. Создадим конфигурационные файлы копированием примеров, установим владельцем файлов пользователя ejabberd:

В принципе, можно уже приступать к редактированию конфигурационного файла, но чтобы не возвращаться к нему повторно, выполним несколько предварительных действий.

Создадим БД в MySQL и пользователя:

mysql> create database ejabberd;
Query OK, 1 row affected (0,01 sec)

Создаем структуру таблиц, воспользовавшись sql-дампом, который идет в комплекте с установочными файлами ejabberd (там же можно обнаружить варианты для альтернативных поддерживаемых БД):

В моем случае (mysql55-server-5.5.36) пришлось дамп немного подредактировать, поскольку попытка заливки дампа завершалась ошибкой:

Как оказалось, проблема была в устаревшем синтаксисе дампа MySQL. Проблема в строке 21 - SET table_type=InnoDB;. Данная переменная удалена в MySQL 5.5.3. Вместо нее необходимо использовать storage_engine либо же default_storage_engine. В моем случае переменная default_storage_engine была установлена в значение InnoDB.

Соответственно, для решения проблемы достаточно было удалить либо закомментировать содержимое строки 21. После этого дамп БД корректно создал структуру таблиц:

Продвигаемся дальше. Поскольку планируется работа с поддержкой SSL, займемся сертификатом. Создадим каталог для сертификатов (если такового нету), сгенеруем сертификат и выставим права доступа на файл сертификата:

C - Country Name (2 letter code)

ST - State or Province Name (full name)

L - Locality Name (eg, city)

O - Organization Name (eg, company)

OU - Organizational Unit Name (eg, section)

CN - Common Name (eg, YOUR name)

emailAddress - Email Address

Кажется пора заняться конфигурационным файлом ejabberd.cfg. Наведу все полотно конфигурационного файла - с комментариями все же удобнее. Его синтаксис, такой же как и языка Erlang. Основы синтаксиса детально описаны в начале конфигурационного файла.

%%
%% Override the old values stored in the database.
%%

%%
%% Override global options (shared by all ejabberd nodes in a cluster).
%%
%%override_global.

%%
%% Override local options (specific for this particular ejabberd node).
%%
%%override_local.

%%
%% Remove the Access Control Lists before new ones are added.
%%
%%override_acls.

%%
%% loglevel: Verbosity of log files generated by ejabberd.
%% 0: No ejabberd log at all (not recommended)
%% 1: Critical
%% 2: Error
%% 3: Warning
%% 4: Info
%% 5: Debug
%%
.

%%
%% watchdog_admins: Only useful for developers: if an ejabberd process
%% consumes a lot of memory, send live notifications to these XMPP
%% accounts.
%%
%%.

%%
%% listen: The ports ejabberd will listen on, which service each is handled
%% by and what options to start it with.
%%
[

%%
%% If TLS is compiled in and you installed a SSL
%% certificate, specify the full path to the
%% file and uncomment this line:
%%
, starttls,

%%
%% To enable the old SSL connection method on port 5223:
%%

%%
%% ejabberd_stun: Handles STUN Binding requests
%%
%%, ejabberd_stun, []>,

%%
%% S2S whitelist or blacklist
%%
%% Default s2s policy for undefined hosts.
%%
%%.

%%
%% Outgoing S2S options
%%
%% Preferred address families (which to try first) and connect timeout
%% in milliseconds.
%%
%%.

%%
%% Authentication using ODBC
%% Remember to setup a database in the next section.
%%
%%.

%% ejabberd by default uses the internal Mnesia database,
%% so you do not necessarily need this section.
%% This section provides configuration examples in case
%% you want to use other database backends.
%% Please consult the ejabberd Guide for details on database creation.

%%
%% Number of connections to open to the database for each virtual host
%%
%%.

%%
%% Interval to make a dummy SQL request to keep the connections to the
%% database alive. Specify in seconds: for example 28800 means 8 hours
%%
%%.

%%
%% This option specifies the maximum number of elements in the queue
%% of the FSM. Refer to the documentation for details.
%%
.

%% Maximum number of simultaneous sessions allowed for a single user:
]>.

%% This rule allows access only for local users:
]>.

%% Only admins can use the configuration interface:
]>.

%% Admins of this server are also admins of the MUC service:
]>.

%% Only accounts of the local ejabberd server can create rooms:
]>.

%% All users are allowed to use the MUC service:
]>.

%% Only accounts on the local ejabberd server can create Pubsub nodes:
]>.

%% By default the frequency of account registrations from the same IP
%% is limited to 1 account every 10 minutes. To disable, specify: infinity
%%.

%%
%% language: Default language used for server messages.
%%
.

%%
%% Host for the URL and port where ejabberd listens for CAPTCHA requests.
%%
%%.

%%
%% Limit CAPTCHA calls per minute for JID/IP to avoid DoS.
%%
%%.

%%
%% Set the minimum informational entropy for passwords.
%%
%%,

%%
%% After successful registration, the user receives
%% a message with this subject and body.
%%
"Hi.\nWelcome to this XMPP server.">>,

%%
%% Local c2s or remote s2s users cannot register accounts
%%
%%,

Изменения в конфигурации (выделенные красным) минимальные.

Включим сервис, добавив необходимую строку в /etc/rc.conf:

После этого стартуем сервис:

Проверяем, все ли в порядке.
В логах обнаружил следующие записи:

Ага. Кажется Erlang еще "не научился" работать с mysql. Нужно научить :)
Остановим ejabberd и установим необходимое расширение erlang:

После этого повторно запускаем ejabberd:

После этого сервис корректно запустился в штатном режиме, что можно проверить следующей командой:

Кстати, еще один момент. При тестировании обнаружил, что ejabberd 2.1.13 не работает с MySQL 5.6. При этом в логи сыпались следующие ошибки:

=INFO REPORT==== 2014-03-28 01:39:31 ===
I(<0.2181.0>:ejabberd_odbc:226) : mysql connection failed:
** Reason: "timed out"
** Retry after: 30 seconds

=INFO REPORT==== 2014-03-28 01:39:31 ===
I(<0.2175.0>:ejabberd_odbc:226) : mysql connection failed:
** Reason: "timed out"
** Retry after: 30 seconds

=INFO REPORT==== 2014-03-28 01:39:31 ===
I(<0.2172.0>:ejabberd_odbc:226) : mysql connection failed:
** Reason: "timed out"
** Retry after: 30 seconds

Разбираться более детально в чем проблема не стал, проверил только на совместимость ejabberd 2.1.13 с MySQL 5.0, MySQL 5.1 и MySQL 5.5. Возможно это пофиксят в следующих релизах.

Итак, продолжим. Создадим пользователя, которого мы в конфигурационном файле указали администратором:

Выполнив авторизацию в админке, остальных пользователей можно будет добавлять уже прямо в админ-панели.

ejabberd

Сервер работает, подключены конференции, общие контакты. Остальное уже допиливается под определенные задачи.

Добрый день ! подскажите как в CentOS провернуть ту же операцию :

Проверяем, все ли в порядке.
В логах обнаружил следующие записи:

Ага. Кажется Erlang еще "не научился" работать с mysql. Нужно научить :)
Остановим ejabberd и установим необходимое расширение erlang:

Исходные данные

Все указанные в заметке пути специфичны для FreeBSD, в других системах они могут быть иными.

Установка

Я устанавливал ejabberd из портов FreeBSD без каких-либо затруднений. Почитать про установку на других системах можно в Руководстве по ejabberd.

Настройка

  1. БД с текущей конфигурацией (/var/spool/ejabberd/)
  2. Текстовые файлы (/usr/local/etc/ejabbrd/)
  • ejabberd использует конфигурацию, записанную в БД;
  • веб-интерфейс меняет данные только в БД;
  • конфигурационные файлы читаются только один раз при старте ejabberd;
  • конфигурационные файлы переписывают информацию в БД, но не всю, а только указанную часть (какую — см. ниже про override_XXX).
  1. Изменения, внесённые через веб-интерфейс могут быть потеряны при перезапуске ejabberd
  2. Изменения, внесённые в конфигурационный файл могут не оказать влияния конфигурацию ejabberd

Немного о синтаксисе файлов конфигурации

Комментарии начинаются символом % и заканчиваются с концом строки.

Команды должны заканчиваться точкой.

Параметры указываются примерно так:


Списки указываются в квадратных скобках. Элементы списка разделяются запятыми. После последнего элемента запятая не ставится.

На первое время этого хватит.

Начальная настройка

Первоначальная настройка производится редактированием файла /usr/local/etc/ejabberd/ejabberd.cfg .

  • override_global — глобальные параметры, касающиеся всех узлов в кластере (что такое кластер, на первых порах, не очень важно)
  • override_local — параметры только текущего узла (сервера)
  • override_acls — только параметры прав доступа

Порты и сервисы

Следующий шаг — привязка сервисов ejabberd к TCP-портам и настройка этих сервисов. Всего есть четыре сервиса (или модуля):


Если мы хотим общаться не только друг с другом, но и с пользователями других серверов, надо провести дополнительную настройку соединений s2s:

Чтобы получить доступ к веб-интерфейсу, добавляю список доступа admins, разрешаю его членам доступ к конфигурации и добавляю себя в этот список:

Настройка доменов

ejabberd может обслуживать несколько виртуальных доменов с различной конфигурацией. У меня в списке только один домен:


Все дальнейшие параметры я буду указывать только для этого домена:

Подключение к LDAP

В виртуальный хост добавляю команды:

Создание сертификата

Для использования SSL понадобится сертификат.

В директории конфигурационных файлов (/usr/local/etc/ejabberd) выполняю следующие команды:


После этого файл server.cer можно безболезненно удалить.

Первый запуск

У меня всё получилось с первой попытки. Теперь попробуем веб-интерфейс. В моей конфигурации он расположен по адресу:

Для авторизации надо указать те же данные, что и при использовании Jabber-клиента.

UPD: Чтобы можно было посмотреть список, надо добавить в конфигурацию хоста строки:

Заключение

При работе с новой программой или технологией самое сложное — это начать. Лично меня поначалу смутил пример файла конфигурации, смутил непривычным синтаксисом и размерами. Да и документация, признаться, тоже. Поэтому я постарался создать минимальную конфигурацию, которая позволила хотя бы запустить сервер и подключиться к нему. Имея на руках работающий сервер, можно уже дальше настраивать его, навешивать модули, тюнинговать и так далее. Главное — твёрдый фундамент под ногами.

Надеюсь в ближайшее время у меня дойдут руки написать про дальнейшую настройку. А может, это сделает кто-то другой ;-)

Получившийся конфиг

Несколько замечаний

Иногда, после аварийного завершения, ejabberd отказывается запускаться. Проверьте не висят ли процессы beam и empd или другие приложения erlang.

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

При использовании LDAP-бэкенда, на клиенте обязательно включение опции «Allow plaintext login» (Разрешить авторизацию открытым текстом). UPD: Это не является угрозой безопасности пароля, если используется SSL. В этом случае сначала устанавливается шифрованное соединение с сервером, а потом уже передаётся открытый пароль. Например в клиенте Psi это настраивается так: Encrypt connection: Always; Allow plaintext authentication: Over encrypted connection.

ejabber написан на замечательном языке Erlang, в том числе и его конфигурационный файл, однако знаний языка для редактирования конфигурационного файла не требуется, он достаточно читабельный.

Сервер ejabberd является лидером среди Jabber-серверов. Его использует Facebook, Vkontakte, Yandex, Google и многие другие компании для своих сервисов. Часто используется для обмена данными по XMPP для всевозможных онлайн игр и т.д.

Установка

Обновим дерево портов:

И установим ejabberd:

Генерация ключей

Для защиты трафика будем использовать SSL, создадим подкаталог для хранения ключей ejabberd:

Где:

  • C - Country Name (2 letter code);
  • ST - State or Province Name (full name);
  • L - Locality Name (eg, city);
  • O - Organization Name (eg, company);
  • OU - Organizational Unit Name (eg, section);
  • CN - Common Name (eg, YOUR name). В нашем случае "jabber.example.org";
  • emailAddress - Email Address. В нашем случае "info@example.org".

Теперь перейдем к настройке.

Настройка

Необходимо войти в каталог настроек /usr/local/etc/ejabberd и скопировать примеры в реальные конфигурационные файлы:

После чего отредактируйте файл ejabberd.cfg (строки начинающиеся с символа "%" это комментарий):

Далее мы ещё добавим в файл дополнительные настройки для MUC, так что пока не запускайте сервер.

Создание конференций (они же чаты)

За это отвечает протокол MUC (Multi-users conference), который дает возможность создавать комнаты для группового общения пользователей. В ejabberd за это отвечает модуль muc_module, ну и все остальные модули с префиксом "muc_".

Также, мы расскоментировали строку , которая регистрирует имя домена для конференций, т.е. у нас получится "conference.jabber.example.org".

Необходимо добавить следующие A и SRV-записи. В качестве примера DNS-сервера выступает Bind9, но вы можете использовать любой другой, совместимый с его конфигурационным файлом:

После чего можете проверить записи с помощью утилиты dig, пример:

В результате должны получить ANSWER-секцию следующего содержания:

Запуск сервера

Запустите ejabberd:

Если запуск не удался, то возможно у вас проблема с .erlang.cookie, укажите нужные права на файл /var/spool/ejabberd/.erlang.cookie (т.е. в домашнем каталоге должен храниться этот файл, посмотреть домашний каталог можно так pw usershow ejabberd). Устанавливаем права:

Если сервер никак не запускается (у меня такое было однажды), то я просто ребутнул сервак и после ребута все само поднялось.

Административный веб-интерфейс и добавление пользователей

После старта ejabberd у нас станет доступен TCP-порт 5280, по которому будет отвечать веб-сервер ejabberd, войдите в него:

Можно также создать Nginx-конфиг и проксировать на порт 5280, прикрутив дополнительно поддержку SSL:

Не забываем сгенерировать сертификат для веб-интерфейса:

Пользователей можно добавлять в консоли, через ejabberdctl. Первого пользователя (которого мы указали в качестве админа в конфигурационном файле) вам придется обязательно добавить таким способом, так как вам надо пройти авторизацию в веб-интерфейсе, а без учетной записи это не получится сделать:

Общение голосом и видео

Сервер ejabberd напрямую не предоставляет таких услуг. Это реализуется за счет протокола Jingle и конкретных реализаций на стороне клиента. Данные обменивают по принципу P2P и поэтому могут встречаться проблемы у пользователй, которые работают из-под NAT. Для этих целей следует использовать STUN-сервер.

Я не настраивал Jingle, но если это когда-нибудь сделаю, то обязательно напишу об этом. А пока смотрите:

Настройка клиента

Для примера возьмем Pidgin, так как это простой для настроек клиент и доступен на многих платформах. Установите этот клиент, после чего нажмите на Accounts -> Manage Accounts -> Add. . И примерно так заполните форму Add Account:

Pidign

После чего пробуйте подключиться, все у вас должно получиться!

Что еще почитать?

Комментарии

Подсказали как сделать общие группы ростера, надо подключить "mod_shared_roster". После чего, в веб-админке вашего виртуально хоста появится меню "Shared Roster Groups", в котором вы можете заводить группы, пользователи которых будут видны всем участникам вашего хоста

В данной статье продолжаем настройку ejabberd В прошлой статье (ссылка на статью «Установка ejabberd на CentOS 6.X») мы установили ejabberd CentOS 6.4. В этой статье мы проведем настройку в конфигурационных файлах и заведем новых пользователей. Настройка: Перед тем как приступить к регистрации новых пользователей нужно выполнить пару настроек. По умолчанию список контактов нового пользователя пуст […]

Ejabberd

В данной статье продолжаем настройку ejabberd

В прошлой статье (ссылка на статью «Установка ejabberd на CentOS 6.X») мы установили ejabberd CentOS 6.4. В этой статье мы проведем настройку в конфигурационных файлах и заведем новых пользователей.

Настройка:

Перед тем как приступить к регистрации новых пользователей нужно выполнить пару настроек. По умолчанию список контактов нового пользователя пуст (в терминологии jabber – ростер). В принципе, это нормально для личного использования или для работы с публичными серверами т.к там пользователь сам выбираем с кем он будет общаться. Однако это не подходит для корпоративной среды, где список контактов должен быть заранее определён.

Нужно сделать так, чтобы система автоматически заносила нового пользователя в список и этот пользователь автоматически получал список других пользователей в свой клиент. Приступим.

Нас интересует файл ejabberd.yml который расположен в папке opt/ejabberd-18.12.1/conf

Открываем любым удобным редактором (в данном примере откроем через vim)

Правим конфиг 1

Правим конфиг 1

И раскоментируем следующую строчку mod_shared_roster: <>

Правим конфиг 2

Правим конфиг 2

Сохраняем и перезапускаем ejabberd командой

Конфигурационный файл построен так, что каждый случайный пробел или отступ в незакоментированных параметрах имеет значение. Такие «ошибки» могут привести к неработоспособности параметра, в котором допущена ошибка, или всего сервера.

Правим конфиг 3

Правим конфиг 3

Теперь, когда мы успешно перезагрузили сервис можно начать регистрацию пользователей и создание группы. Это можно сделать как через консоль, так и через web-интерфейс. Чем пользоваться уже ваш выбор, но в статье будем использовать web-интерфейс.

Заходим на web-интерфейс

Web-морда 1

Web-морда 1

Как уже могли заметить, для доступа на интефейс нужно прописывать полностью имя пользователя и доменное имя (в нашем случае получается voxlink@voxlink) в качестве логина.

Web-морда 2

Web-морда 2

Далее переходим в «Виртуальные хосты»

Web-морда 3

Web-морда 3

Выбираем наш Хост. В нашем случае Voxlink

Web-морда 4

Web-морда 4

И видим раздел «Пользователи»

Для теста создадим двух пользователей: user1 и user2. Для этого вводим имя пользователя, пароль и нажимаем «добавить».


Теперь, когда у нас есть пользователи, нам осталось создать только общую группу. Переходим в «Группы общих контактов».


И создадим группу. Предположим, пусть будет team. Вводим название и нажимаем «добавить». После чего новая группа моментально будет создана.


Однако на этом настройка не заканчивается. Выбираем группу и заполняем ее как вы можете видеть ниже на скриншоте


  • Название: название вашей группы
  • Описание: Любое описание группы. Ни на что не влияет.
  • Члены: Здесь перечисляем участников данной группы
  • Видимые группы: Если на сервере присутствует несколько групп, то их можно перечислить здесь чтоб они автоматически добавлялись в списки пользователей. Укажем нашу же группу, чтоб у пользователей в списке контактов автоматически оказались все новые пользователи.

На этом, в принципе, все. SSL сертификат мы в этой статье настраивать не будем т.к он не критичен и требуется только для шифрования. Так же в этой статье не рассмотрено управление сервером через консоль, однако ниже можете увидеть список команд и простой пример, где мы добавим третьего пользователя.

Читайте также: