Ejabberd

Материал из СисадминВики (SysadminWiki.ru)
Перейти к: навигация, поиск
Установка и настройа Jabber сервера ejabberd в Linux


Проверено на
Версия OC Кто
2.0.2_2 (бинарник с сайта) Debian 4 24pm
2.1.3 (бинарник с сайта) Debian 5 24pm
2.1.5 (из репозитория ОС) Debian 6 24pm


ejabberd — это свободный (GNU GPL), распределённый и устойчивый к отказам XMPP-сервер, написанный в основном на Erlang. Он работает под юникс-подобными ОС (GNU/Linux, FreeBSD и NetBSD) и Microsoft Windows.

Имеет весьма полезный сайт сообщества.


Установка

Установить можно и из репозитория, и вручную скачав с сайта более свежую версию. Скачав, распакуем и сделав исполняемым, выполним. Мастер установки поддерживает русский язык и несложен. Установка длиться ~30 секунд.

Настройка

В инструкции "x.x.x" означает номер версии ejabberd.

- Настраиваем /opt/ejabberd-x.x.x/conf/ejabberd.cfg, предполагая, что для джабера мы создали в домене DNS узел jabber.domain.local:

          
{hosts, ["jabber.domain.local"]}.
{language, "ru"}.

-Собственно на этом настройка может быть закончена. Запускаем службу:

# /opt/ejabberd-x.x.x/bin/ejabberdctl start

- Остановить службу:

# /opt/ejabberd-x.x.x/bin/ejabberdctl stop

Или можно удалить процесс:

# ps ax | grep jabber
10601 ?        S      0:00 /opt/ejabberd-x.x.x/bin/epmd -daemon

# kill -9 10601

- Можно создать в системе пользователя ejabberd с домашним каталогом установленного ПО и запускать службу от его имени, скопировав стартовый скрипт в надлежащее место:

# useradd --home /opt/ejabberd-x.x.x/ ejabberd
# chown -R ejabberd.root /opt/ejabberd-x.x.x/
# cp /opt/ejabberd-x.x.x/bin/ejabberd.init /etc/init.d/ejabberd
# /etc/init.d/ejabberd start

таким образом ejabberd будет запускаться стандартным для linux способом

- Теперь можно зайти на веб интерфейс http://jabber.domain.local:5280/admin/

- Добавляем пользователей в jabber клиенте (pidgin, qip, miranda, psi и т.д.) или командой ejabberdctl в формате

# ./ejabberdctl register UserName ServerName PassWord

например:

# ./ejabberdctl register pavel jabber.domain.local password

Перечисляем в ejabberd.cfg кто будет администратором:

{acl, admin, {user, "admin", "jabber.domain.local"}}.
{acl, admin, {user, "pavel", "jabber.domain.local"}}.

Также это можно сделать через веб-интрефейс. Прямая ссылка http://jabber.domain.local:5280/admin/acls/

- Проверяем работоспособность сервера: Регистрируемся пользователями, отправляем друг другу сообщения.

- Чтобы дать пользователям возможность искать друг друга в vCard, изменим параметры модуля mod_vcard:

...
  {mod_vcard, [{host, "vjud.jabber.domain.local"},
                 {search, true},
                 {matches, 20},
                 {allow_return_all, true},
                 {search_all_hosts, true}
                ]},
...

Можно настроить обще доступные ростеры (roster) - группы контактов. Для этого

1) проверим, что включен модуль общих групп контактов, если закомментировано, то убираем символы комментария %%

{mod_shared_roster,[]},

или mod_shared_roster_odbc в случае, если мы храним эту таблицу в MySQL.

2) в веб-интерфесе идём по пути:

Виртуальные хосты - jabber.domain.local - Группы общих контактов

Дополнительные настройки

- В Debian каталог пользователей находится в /var/lib/jabber/

- Создадим два ростера All и JabberAdmins. В первый будут входить все пользователи и этот список будет доступен только пользователям из второй группы, во второй группе перечислим администраторов сервиса и покажем этот список всем пользователям. Для этого:

a) в группе All в качестве членов пропишем одну строку "@all@", в Видимые группы добавим "JabberAdmins"

б) в группе JabberAdmins в качестве членов указываем администраторов, в Видимые группы добавим "All"

- Чтобы уведомлять администраторов о новых пользователях, добавим в настройку модуля mod_register:

{mod_register, [
    {welcome_message, {"Welcome!", "Welcome to this Jabber server."}},
    {registration_watchers, ["admin1@example.org", "admin2@example.org""]}
]},


Резервное копирование

Резервное копирование осуществляется выгрузкой базы данных и зависит от того где мы храним БД.

Mnesia БД

Mnesia - БД по умолчанию для ejabberd. Возможна выгрузка в бинарном (более сжатом) и в текстовом (читаемом) виде. Команды выгрузки и восстановления зависят от выбранного метода.

- Выгрузка и восстановление бинарного файла:

ejabberdctl backup <Имя_БД>
ejabberdctl restore <Имя_БД>

- Выгрузка и восстановление текстового файла:

ejabberdctl dump <Имя_БД>
ejabberdctl load <Имя_БД>

MySQL БД

Команды выгрузки и восстановления БД в MySQL:

# mysqldump -u root -p jabber > jabber.sql
# mysql -u root -p jabber < jabber.sql

Более подробно можно узнать в отдельной статье по MySQL.

Перенос на другой сервер

  1. Выгружаем БД на старом сервере (см. "Резервное копирование") и загружаем на новом.
  2. Если БД храниться в Mnesia (по умолчанию), то можно перенести файлы базы, их местоположение зависит от способа установки Например, /opt/ejabberd-2.0.5/database/ejabberd@localhost или /var/lib/ejabberd
! Если переходить с одной версии на другую, то могут быть проблемы!

ejabberd и MySQL

Хранить базу можно в MySQL. Кратко, настроить можно так:

1) Скачиваем схему БД

wget https://git.process-one.net/ejabberd/mainline/blobs/raw/2.1.x/src/odbc/mysql.sql

2) Создаём пользователя ejabberd:

$ mysql -h localhost -p -u root
mysql> GRANT ALL ON ejabberd.* TO 'ejabberd'@'localhost' IDENTIFIED BY 'password';

3) Создаём базу данных ejabberd:

mysql> CREATE DATABASE ejabberd;
mysql> quit

4) Загружаем схему в БД:

$ mysql -D ejabberd -h localhost -p -u ejabberd  < mysql.sql

5) настраиваем ejabberd на MySQL, прописываем в ejabberd.cfg:

%%{auth_method, internal}.

{auth_method, odbc}.
{odbc_server, {mysql, "localhost", "ejabberd", "ejabberd", "password"}}.

6) Указываем какие таблицы будут храниться в MySQL. Если пропустить этот шаг, то будет храниться только таблица пользователей (users), все остальные данные будут храниться по прежнему в Mnesia (см описание в конце статьи).

Список всех таблиц, данные из которых можно перенести в MySQL можно узнать посмотрев какие модули odbc присутствуют:

ls /usr/lib/ejabberd/ebin | grep mod | grep odbc

7) скачиваем модули подключения erlang к MySQL (прямая ссылка). Кладём файлы к остальным модулям (файлы с расширением *.beam). В Debian это /usr/lib/ejabberd/ebin/, в чём можно убедиться выполнив

dpkg -L ejabberd | grep beam

8) Запускаем ejabberd:

/etc/init.d/ejabberd start


Подробные инструкции:

Небольшое дополнение к инструкции:
Если ставить ejabberd не из пакетов, а инсталятором с оф. сайта, то все компоненты располагаются в /opt/ejabberd-x.x.x/ где x.x.x - версия приложения.
В этом случае откомпеллированный модуль нужно скопировать в /opt/ejabberd-x.x.x/lib/ejabberd-x.x.x/ebin и, возможно, сделать его исполняемым:
# chmod +x mod_ctlextra.beam 

Полезные ссылки