Ejabberd настройка windows server 2012
Стоит отметить тот факт, что 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. Возможно это пофиксят в следующих релизах.
Итак, продолжим. Создадим пользователя, которого мы в конфигурационном файле указали администратором:
Выполнив авторизацию в админке, остальных пользователей можно будет добавлять уже прямо в админ-панели.
Сервер работает, подключены конференции, общие контакты. Остальное уже допиливается под определенные задачи.
Добрый день ! подскажите как в CentOS провернуть ту же операцию :
Проверяем, все ли в порядке.
В логах обнаружил следующие записи:
Ага. Кажется Erlang еще "не научился" работать с mysql. Нужно научить :)
Остановим ejabberd и установим необходимое расширение erlang:
Исходные данные
Все указанные в заметке пути специфичны для FreeBSD, в других системах они могут быть иными.
Установка
Я устанавливал ejabberd из портов FreeBSD без каких-либо затруднений. Почитать про установку на других системах можно в Руководстве по ejabberd.
Настройка
- БД с текущей конфигурацией (/var/spool/ejabberd/)
- Текстовые файлы (/usr/local/etc/ejabbrd/)
- ejabberd использует конфигурацию, записанную в БД;
- веб-интерфейс меняет данные только в БД;
- конфигурационные файлы читаются только один раз при старте ejabberd;
- конфигурационные файлы переписывают информацию в БД, но не всю, а только указанную часть (какую — см. ниже про override_XXX).
- Изменения, внесённые через веб-интерфейс могут быть потеряны при перезапуске ejabberd
- Изменения, внесённые в конфигурационный файл могут не оказать влияния конфигурацию 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. В нашем случае "[email protected]".
Теперь перейдем к настройке.
Настройка
Необходимо войти в каталог настроек /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:
После чего пробуйте подключиться, все у вас должно получиться!
Что еще почитать?
Комментарии
Подсказали как сделать общие группы ростера, надо подключить "mod_shared_roster". После чего, в веб-админке вашего виртуально хоста появится меню "Shared Roster Groups", в котором вы можете заводить группы, пользователи которых будут видны всем участникам вашего хоста
В данной статье продолжаем настройку ejabberd В прошлой статье (ссылка на статью «Установка ejabberd на CentOS 6.X») мы установили ejabberd CentOS 6.4. В этой статье мы проведем настройку в конфигурационных файлах и заведем новых пользователей. Настройка: Перед тем как приступить к регистрации новых пользователей нужно выполнить пару настроек. По умолчанию список контактов нового пользователя пуст […]
В данной статье продолжаем настройку ejabberd
В прошлой статье (ссылка на статью «Установка ejabberd на CentOS 6.X») мы установили ejabberd CentOS 6.4. В этой статье мы проведем настройку в конфигурационных файлах и заведем новых пользователей.
Настройка:
Перед тем как приступить к регистрации новых пользователей нужно выполнить пару настроек. По умолчанию список контактов нового пользователя пуст (в терминологии jabber – ростер). В принципе, это нормально для личного использования или для работы с публичными серверами т.к там пользователь сам выбираем с кем он будет общаться. Однако это не подходит для корпоративной среды, где список контактов должен быть заранее определён.
Нужно сделать так, чтобы система автоматически заносила нового пользователя в список и этот пользователь автоматически получал список других пользователей в свой клиент. Приступим.
Нас интересует файл ejabberd.yml который расположен в папке opt/ejabberd-18.12.1/conf
Открываем любым удобным редактором (в данном примере откроем через vim)
И раскоментируем следующую строчку mod_shared_roster: <>
Сохраняем и перезапускаем ejabberd командой
Конфигурационный файл построен так, что каждый случайный пробел или отступ в незакоментированных параметрах имеет значение. Такие «ошибки» могут привести к неработоспособности параметра, в котором допущена ошибка, или всего сервера.Теперь, когда мы успешно перезагрузили сервис можно начать регистрацию пользователей и создание группы. Это можно сделать как через консоль, так и через web-интерфейс. Чем пользоваться уже ваш выбор, но в статье будем использовать web-интерфейс.
Заходим на web-интерфейс
Как уже могли заметить, для доступа на интефейс нужно прописывать полностью имя пользователя и доменное имя (в нашем случае получается voxlink@voxlink) в качестве логина.
Далее переходим в «Виртуальные хосты»
Выбираем наш Хост. В нашем случае Voxlink
И видим раздел «Пользователи»
Для теста создадим двух пользователей: user1 и user2. Для этого вводим имя пользователя, пароль и нажимаем «добавить».
Теперь, когда у нас есть пользователи, нам осталось создать только общую группу. Переходим в «Группы общих контактов».
И создадим группу. Предположим, пусть будет team. Вводим название и нажимаем «добавить». После чего новая группа моментально будет создана.
Однако на этом настройка не заканчивается. Выбираем группу и заполняем ее как вы можете видеть ниже на скриншоте
- Название: название вашей группы
- Описание: Любое описание группы. Ни на что не влияет.
- Члены: Здесь перечисляем участников данной группы
- Видимые группы: Если на сервере присутствует несколько групп, то их можно перечислить здесь чтоб они автоматически добавлялись в списки пользователей. Укажем нашу же группу, чтоб у пользователей в списке контактов автоматически оказались все новые пользователи.
На этом, в принципе, все. SSL сертификат мы в этой статье настраивать не будем т.к он не критичен и требуется только для шифрования. Так же в этой статье не рассмотрено управление сервером через консоль, однако ниже можете увидеть список команд и простой пример, где мы добавим третьего пользователя.
Читайте также: