Понадобилось как-то организовать защищенный обмен сообщениями между пользователями небольшого офиса и работающими удаленно сотрудниками. В качестве Jabber-сервера на этот раз решено использовать ejabberd (статья по настройке Jabber-сервера Openfire).
Стоит отметить тот факт, что ejabberd является лидером среди Jabber-серверов. Его используют Facebook, Vkontakte, Yandex, Google, etc.
Ключевыми особеностями ejabberd являются:
ejabberd написан на языке Erlang и конфигурационный файл в том числе, однако знаний языка для правки конфигурационного файла не нужно - он интуитивно понятен.
Перед установкой и настройкой ejabberd, внесем необходимые изменения в DNS, чтобы потом на это не отвлекаться. Для полноценной работы jabber-сервера, необходимо внести A- и SRV-записи. Если используется DNS-сервер BIND9, то записи будут выглядеть примерно так:
_xmpp-server._tcp.jabber.example.org. IN SRV 0 0 5269 jabber.example.org. _jabber._tcp.jabber.example.org. IN SRV 0 0 5269 jabber.example.org. _xmpp-client._tcp.jabber.example.org. IN SRV 0 0 5222 jabber.example.org. conference.jabber IN A 10.227.206.69 jabber IN A 10.227.206.69 |
Ну и соответственно, нужно проследить, чтобы изменения DNS вступили в силу...
Итак, вернемся непосредственно к ejabberd. Установку ejabberd выполним из системы портов:
# cd /usr/ports/net-im/ejabberd && make install && rehash |
Поскольку всю информацию будем хранить в MySQL, то среди опций установки необходимо отметить ODBC (Open DataBase Connectivity):
ejabberd-2.1.13
[x] DOCS Build and/or install documentation
[x] ODBC ODBC backend
[ ] PAM PAM support |
Во время установки ejabberd будет установлена зависимость - язык Erlang, среди опций установки также необходимо выбрать поддержку ODBC.
По завершению установки, отобразились короткие рекомендации относительно дальнейшей настройки.
Congratulations, you have installed ejabberd! o To enable ejabberd you need to add following string to your /etc/rc.conf: ejabberd_enable="YES" o Config samples are located in /usr/local/etc/ejabberd - please, create working ones before running ejabberd. o The home directory is /var/spool/ejabberd o PLEASE NOTE! "ejabberd" user UID and GID have changed from version 2.0.3 of this port! Users are advised to check all configuration files and data in /var/spool/ejabberd to ensure everything has the correct owner/group. |
Ознакомимся с рекомендациями, начиная "с хвоста"...
Согласно месседжа, изменились UID и GID демона ejabberd. Однако, поскольку мы не обновляем ejabberd, а выполняем новую установку, то нас это предупреждение не касается. Кстати, в текущей версии 2.1.13 используется UID и GID с идентификаторами 543.
Домашний каталог - /var/spool/ejabberd... Что ж, в случае чего - заглянем.
А вот информация о том, что есть примеры конфигурационных файлов порадовала... Создадим конфигурационные файлы копированием примеров, установим владельцем файлов пользователя ejabberd:
# cd /usr/local/etc/ejabberd # cp ejabberd.cfg.example ejabberd.cfg # cp ejabberdctl.cfg.example ejabberdctl.cfg # chown ejabberd:ejabberd *.cfg |
В принципе, можно уже приступать к редактированию конфигурационного файла, но чтобы не возвращаться к нему повторно, выполним несколько предварительных действий.
Создадим БД в MySQL и пользователя:
mysql> create database ejabberd; mysql> grant all on ejabberd.* to ejabberd@localhost identified by 'password_here'; |
Создаем структуру таблиц, воспользовавшись sql-дампом, который идет в комплекте с установочными файлами ejabberd (там же можно обнаружить варианты для альтернативных поддерживаемых БД):
# cd /usr/ports/net-im/ejabberd/work/ejabberd-2.1.13/src/odbc # mysql -u ejabberd -p ejabberd < mysql.sql |
В моем случае (mysql55-server-5.5.36) пришлось дамп немного подредактировать, поскольку попытка заливки дампа завершалась ошибкой:
# mysql -u ejabberd -p ejabberd < mysql.sql Enter password: ERROR 1193 (HY000) at line 21: Unknown system variable 'table_type' |
Как оказалось, проблема была в устаревшем синтаксисе дампа MySQL. Проблема в строке 21 - SET table_type=InnoDB;. Данная переменная удалена в MySQL 5.5.3. Вместо нее необходимо использовать storage_engine либо же default_storage_engine. В моем случае переменная default_storage_engine была установлена в значение InnoDB.
mysql> show variables like 'default_storage_engine'; +------------------------+--------+ | Variable_name | Value | +------------------------+--------+ | default_storage_engine | InnoDB | +------------------------+--------+ 1 row in set (0,00 sec) |
Соответственно, для решения проблемы достаточно было удалить либо закомментировать содержимое строки 21. После этого дамп БД корректно создал структуру таблиц:
mysql> use ejabberd; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> show tables; +-------------------------+ | Tables_in_ejabberd | +-------------------------+ | irc_custom | | last | | motd | | muc_registered | | muc_room | | privacy_default_list | | privacy_list | | privacy_list_data | | private_storage | | pubsub_item | | pubsub_node | | pubsub_node_option | | pubsub_node_owner | | pubsub_state | | pubsub_subscription_opt | | roster_version | | rostergroups | | rosterusers | | spool | | sr_group | | sr_user | | users | | vcard | | vcard_search | | vcard_xupdate | +-------------------------+ 25 rows in set (0,00 sec) |
Продвигаемся дальше... Поскольку планируется работа с поддержкой SSL, займемся сертификатом. Создадим каталог для сертификатов (если такового нету), сгенеруем сертификат и выставим права доступа на файл сертификата:
# mkdir /etc/ssl/certs && cd /etc/ssl/certs # openssl req -new -x509 -nodes -newkey rsa:1024 -days 3650 -keyout privkey.key -out ejabberd.pem \ -subj "/C=UA/ST=/L=Kiev/O=Company LLC/OU=/CN=jabber.example.org/emailAddress=email [at] domain [dot] com" # cat privkey.key >> ejabberd.pem # rm privkey.key # chown ejabberd:ejabberd ejabberd.pem # chmod 600 ejabberd.pem |
Здесь:
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. Основы синтаксиса детально описаны в начале конфигурационного файла.
%%% %%% The parameters used in this configuration file are explained in more detail %%% This configuration file contains Erlang terms.
%%%. ======================= %% %% %% %%
%%%. ========= %% %%
%%%. ================ %% %%
%%%. =============== %% {5222, ejabberd_c2s, [ %% {access, c2s}, %% %%{5223, ejabberd_c2s, [ {5269, ejabberd_s2s_in, [ %% %% {5280, ejabberd_http, [ ]}. %% %% {s2s_certfile, "/etc/ssl/certs/ejabberd.pem"}. %% %% %% %%
%%%. ============== %% %% %% {auth_method, odbc}. %% %% %%
%%%. ============== %% ejabberd by default uses the internal Mnesia database, %% {odbc_server, {mysql, "localhost", "ejabberd", "ejabberd", "password"}}. %% %% %% %%
%%%. =============== %% %% %%
%%%. ==================== %% {acl, admin, {user, "muff", "jabber.example.org"}}. %% %% %% %%
%%%. ============ %% Maximum number of simultaneous sessions allowed for a single user: %% Maximum number of offline messages that users can have: %% This rule allows access only for local users: %% Only non-blocked users can use c2s connections: %% For C2S connections, all users except admins use the "normal" shaper %% All S2S connections use the "fast" shaper %% Only admins can send announcement messages: %% 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: %% In-band registration allows registration of any possible username. %% By default the frequency of account registrations from the same IP %%
%%%. ================ %% %%
%%%. ======= %% %% %% %%%. ======= %% {history_size, 1000} %% %% %% %% %% %% {access, register} %% %%
%%%. %%% $Id$ %%% Local Variables: |
Изменения в конфигурации (выделенные красным) минимальные...
Включим сервис, добавив необходимую строку в /etc/rc.conf:
# echo '# Jabber server' >> /etc/rc.conf # echo 'ejabberd_enable="YES"' >> /etc/rc.conf |
После этого стартуем сервис:
# sh /usr/local/etc/rc.d/ejabberd start |
Проверяем, все ли в порядке...
В логах обнаружил следующие записи:
# cat /var/log/ejabberd/ejabberd.log
=ERROR REPORT==== 2014-03-25 12:25:31 === =INFO REPORT==== 2014-03-25 12:25:31 === |
Ага... Кажется Erlang еще "не научился" работать с mysql. Нужно научить :)
Остановим ejabberd и установим необходимое расширение erlang:
# cd /usr/ports/databases/erlang-mysql && make install clean && rehash |
После этого повторно запускаем ejabberd:
# sh /usr/local/etc/rc.d/ejabberd start |
После этого сервис корректно запустился в штатном режиме, что можно проверить следующей командой:
# /usr/local/etc/rc.d/ejabberd status ejabberd is running. |
Кстати, еще один момент... При тестировании обнаружил, что ejabberd 2.1.13 не работает с MySQL 5.6. При этом в логи сыпались следующие ошибки:
=ERROR REPORT==== 2014-03-28 01:39:26 ===
=ERROR REPORT==== 2014-03-28 01:39:26 ===
=ERROR REPORT==== 2014-03-28 01:39:26 ===
=INFO REPORT==== 2014-03-28 01:39:31 === =INFO REPORT==== 2014-03-28 01:39:31 === =INFO REPORT==== 2014-03-28 01:39:31 === |
Разбираться более детально в чем проблема не стал, проверил только на совместимость ejabberd 2.1.13 с MySQL 5.0, MySQL 5.1 и MySQL 5.5. Возможно это пофиксят в следующих релизах.
Итак, продолжим... Создадим пользователя, которого мы в конфигурационном файле указали администратором:
# ejabberdctl register muff jabber.example.org password_here |
После этого можно логиниться в web-админку, которая доступна по адресу http://jabber.example.org:5280/admin/ .
Выполнив авторизацию в админке, остальных пользователей можно будет добавлять уже прямо в админ-панели.
Скриншот админ-панели:
Сервер работает, подключены конференции, общие контакты... Остальное уже допиливается под определенные задачи...
Re: Ejabberd - настройка собственного jabber-сервера
Добрый день ! подскажите как в CentOS провернуть ту же операцию :
Проверяем, все ли в порядке...
В логах обнаружил следующие записи:
# cat /var/log/ejabberd/ejabberd.log
=ERROR REPORT==== 2014-03-25 12:25:31 ===
C(<0.37.0>:ejabberd_check:63) : ejabberd is configured to use 'mysql', but the following Erlang modules are not installed: '[mysql,
mysql_auth,
mysql_conn,
mysql_recv]'
=INFO REPORT==== 2014-03-25 12:25:31 ===
application: ejabberd
exited: {bad_return,{{ejabberd_app,start,[normal,[]]},
{'EXIT',database_module_missing}}}
type: temporary
Ага... Кажется Erlang еще "не научился" работать с mysql. Нужно научить :)
Остановим ejabberd и установим необходимое расширение erlang:
# cd /usr/ports/databases/erlang-mysql && make install clean && rehash
пробовал yum install erlang-mysql - не находит
Re: Ejabberd - настройка собственного jabber-сервера
В комментариях не подскажу :)
Создавайте тему на форуме, и попробуем разобраться.