Как установить ejabberd на debian

Обновлено: 04.07.2024


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

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

Содержание

Установка

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

Настройка

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Mnesia БД

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

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

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

MySQL БД

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

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

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

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

ejabberd и MySQL

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

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

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

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

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

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

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

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

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

Существует несколько причин для настройки собственного сервера XMPP.

Может быть вы пользовались сервисом Google Talk или, как он теперь называется, Hangouts. Не так давно сервис Google прекратил поддерживать совместимость с XMPP. Если у вас есть контакты не на gmail, можно продолжать общаться с ними. Можно по-прежнему использовать открытый протокол, поддержка которого широко распространена и не станет частью закрытого программного и аппаратного обеспечения Google.

Возможно также, что вы хотите получить больший контроль за историей переписки. Выключите историю переписки ejabberd и воспользуйтесь протоколом OTR, который позволит обеспечить вам полную тайну переписки (и Perfect Forward Secrecy - совершенно прямую секретность).

Информация

Эта статья проверена на Debian 7, Ubuntu 12.04 и 10.04, на OS X 10.8 Server. Все использовавшиеся серверы ejabberd были установлены через пакетный менеджер - либо через apt, либо через порты. Описанная конфигурация не проверялась, но также должна работать в Windows Server 2012 с ejabberd, собранном из исходных текстов на языке Erlang.

Установка одиночного/ведущего узла ejabberd

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

Установка ejabberd

Это просто - для установки ejabberd воспользуйтесь пакетным менеджером:
Также нужно установить несколько зависимостей среды поддержки Erlang.

Настройка ejabberd

Теперь если вы хотите разрешить регистрироваться через XMPP-клиента, включите встроенную функцию регистрации:
Если используется аутентификацию по данным из MySQL или LDAP, тогда возможность регистрации нужно отключить.

Мне нравится пользоваться общими списками контактов с группами списков контактов. Некоторые из моих клиентов используют общий список контактов для всех, так что никто не может добавить контакты, но могут видеть всех подключенных пользователей. Для этого нужно включить modsharedroster:
Если файл конфигурации вас устраивает, сохраните его и перезапустите ejabberd:
Теперь для проверки нашей конфигурации нужно зарегистрировать пользователя. Если функция встроенной регистрации была включена, можно воспользоваться XMPP-клиентом. Если же функция встроенной регистрации была выключена - воспользуйтесь командой ejabberdctl:
Теперь проверим учётную запись, воспользовавшись клиентом XMPP, таким как Pidgin, Psi+ или Empathy. Если вам удалось подключиться, можно продолжать настройку. Если же не удалось - проверьте журналы ejabberd, настройки пакетного фильтра и тому подобное, чтобы устранить проблему.

Кластеризация ejabberd

Отметим, прежде чем приступать к кластеризации ejabberd, вам нужен правильно работающий ведущий узел. Если ведущий узел не работает, то сначала исправьте его.

Теперь давайте приступим. Сначала займёмся настройкой ведущего узла, а затем перейдём к настройке ведомых узлов.

Подготовка ведущего узла

Остановим сервер на ведущем узле и отредактируем файл /etc/default/ejabberd:
Раскомментируем опцию с именем узла и заменим её значение на полное доменное имя узла:
Затем добавим внешний (публичный) IP-адрес, указав его как кортеж - с запятыми вместо точек:
Если ejabberd будет использоваться только в локальной сети, тогда укажите первичный адрес сетевой карты.

Мы собираемся удалить все таблицы mnesia. Они будут пересозданы при перезапуске ejabberd. Это проще, чем менять сами данные mnesia. Не делайте этого на уже настроенном узле, не сняв резервную копию с cookie-файла Erlang.

Подготовка ведомых узлов

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

Остановим сервер ejabberd:
Остановим сервер ejabberd на ведомом узле и отредактируем файл /etc/default/ejabberd:
Раскомментируем опцию с именем узла и заменим её значение на полное доменное имя узла:
Затем добавим внешний (публичный) IP-адрес, указав его как кортеж - с запятыми вместо точек:
Если ejabberd будет использоваться только в локальной сети, тогда укажите первичный адрес сетевой карты.

Теперь приступим к присоединению узла кластера к ведущему узлу. Убедитесь что ведущий узел запущен и работает. Также удостоверьтесь, что cookie-файлы Erlang синхронизированы.

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

Ошибки при кластеризации

Записи DNS SRV

Конфигурация BIND 9 будет выглядеть следующим образом:
Основные записи SRV указывают порты для подключения клиентов и для подключений типа сервер-к-серверу, а третья запись - это устаревший формат записей Jabber. Если используется хостинг DNS, введите эти записи в панели администрирования или посоветуйтесь с технической поддержкой хостинга.

Задача - установить корпоративный jabber server в локальной сети c хранением переписки пользователей в mysql через модуль mod_logdb, а всё остальное во встроенной БД mnesia.

Операционная система - Debian GNU/Linux (Etch, Lenny, Squeeze, Wheezy) или Ubuntu LTS Server
Я устанавливаю в Debian Wheezy но разница с Debian Lenny, Squeeze только в версии патча (указан в инструкции)

Установлена хостинг панель для удобства добавления домена, бд, сайта по инструкции: Устанавливаем и настраиваем хостинг панель ISPConfig 3 в Debian

Предположим, что репозиторий Вы еще не добавляли, потому добавим выполнив команду для своего дистрибутива:

Для Debian Lenny:

Для Debian Squeeze:

Для Debian Wheezy:

. Если Вам необходимо поставить на Squeeze версию ejabberd с Lenny, тогда добавляем дополнительно репозиторий Lenny выполнив команду:

Устанавливаем нужные пакеты для компиляции исходных кодов для всех версий Debian:

Cоздаем папку /usr/src/ejabberd и переходим в папку, где будем делать сборку Ejabberd

Далее скачиваем исходники с оффициального репозитория:

. Если Вам необходимо скачать в Squeeze версию ejabberd c Lenny выполним команду:

Проверяем что у нас скачалось:

Вывод команды для Debian Wheezy (для других будут другие версии ejabberd):

ejabberd-2.1.10 ejabberd_2.1.10-4+deb7u1.diff.gz ejabberd_2.1.10-4+deb7u1.dsc ejabberd_2.1.10.orig.tar.gz

Переходим в распакованную папку для сборки пакета для Wheezy:

Переходим в распакованную папку для сборки пакета для Squeeze:

Переходим в распакованную папку для сборки пакета для Lenny:


Качаем патчи

Патч и драйвер для mysql находятся на ]]> сайте ]]>

Для Debian Lenny, в репозитории ejabberd 2.0.1, необходимо пропатчить 2 патча mod_Logdb и патч добавляющий вместо логина выводит содержимое ника, если оно заполнено, например логин ivanov, а ник Иванов Иван Иванович - выведет ник для отображения на экране:

Скачиваем патч mod_logdb для Debian Lenny с официального сайта и накладываем патч:

Скачиваем патч меняющий логин на ник с моего сайта, только для ejabberd 2.0.1 и 2.0.5 (Lenny) так как не нашел сайт автора:

. Если Вам необходимо установить версию Ejabberd 2.0.5, выполните команды которые скачают и распакуют исходники, далее накладываете патчи как выше указано:

Скачиваем патч mod_logdb для Debian Squeeze (ejabberd 2.1.5) с официального сайта:

Скачиваем патч mod_logdb для Debian Squeeze (ejabberd 2.1.5) с моего сайта:

Скачиваем патч mod_logdb для Debian Wheezy (ejabberd 2.1.10) с официального сайта:

Скачиваем патч mod_logdb для Debian Wheezy (ejabberd 2.1.10) с моего сайта:

Накладываем патч mod_logdb коммандой:

Должно выдать примерно:

Устанавливаем необходимые пакеты для сборки коммандой (если необходимо поставить пакеты с другого дистрибутива, добавить в команду ключ -t lenny):

Переходим в папку /usr/src/ejabberd/ejabberd-2.1.10/

Запускаем сборку нашего пропатченного ejabberd коммандой:

тут идет компиляция и сборка и заканчивается примерно таким выводом:

Переходим в папку вверх командой:

и проверяем что у нас собралось командой ls:

Видим наш собранный deb файл ejabberd_2.1.5-3+squeeze1_i386.deb, его мы и будем устанавливать.

Перед установкой необходимо определится с доменным именем на котором будет работать наш ejabberd server, в файл /etc/hosts добавляем строку:

где 192.168.0.1 - ip адресс нашего сервера в локальной сети
local.ua - для примера доменное имя у нас в сети
jabber.local.ua - доменное имя нашего jabber сервера, по которому будет подключатся пользователи к серверу.

изменяем имя сервера в файле /etc/hostname на jabber.local.ua
запускаем применение имени командой:

Проверяем какое имя выводится командами:

Должно выдать на каждую команду:

Желательно также установить и настроить DNS сервер в локальной сети, чтобы пользователям не прописывать в клиенте IP сервера, а обойтись доменным именем сети.

Переходим к установке сервера.

Установка пропатченного и собранного ejabberd сервера выполняется командой:

Проверяем чтобы был модуль mod_logdb командой:

Устанавливаем драйвера для работы mod_logdb c mysql

Скачиваем драйвера с оффициального сайта:

Скачиваем драйвера с моего сайта:

Распаковываем архив коммандой:

переходим в папку erlang-mysql

И собираем драйвера коммандой:

После сборки копируем драйвера в папку /usr/lib/ejabberd/ebin/ командой:

Установка нашего ejabberd сервера закончена, далее переходим непостредственно к настройке свежеустановленного ejabberd сервера.

Просмотрим видео о WIFI для чайников:

Конфигурация железа:

Intel® Pentium® 4 CPU 2.40GHz
768 Mb RAM
HDD 40 Gb
ОС: Debian 6

В качестве сервера выбран ejabber (по сравнению с openfiler не такой требовательный к ресурсам)

Устанавливаем:
sudo aptitude install ejabberd

Настройки хранятся в файле /etc/ejabberd/ejabberd.cfg
Хочу заметить, что настройки в файле очень хорошо прокомментированы разработчиками.

sudo mcedit /etc/ejabberd/ejabberd.cfg

1. Находим и раскомментируем следующую строку:
override_local.

2. Находим секцию:

И прописываем свои данные для ejabberd-администратора

3. Секция ACCESS RULES и строка:

В комментариях сказано, что эта строка отвечает за самостоятельную регистрацию пользователей Если необходима возможность создания нового пользователя из клиентской программы, то приводим строку к виду:
]>

Я эту возможность не использую, потому у меня строка выглядит так:

4. Секция DEFAULT LANGUAGE

прописываем язык по умолчанию ru:

5. Настроим такую полезную вещь как общий ростер (все контора сразу в списке у каждого пользователя)
находим и расскоментируем:

Передача файлов:

*Примечание:
host, name и hostname я специально заполнял внешним ip-адресом, когда настраивал, с тех пор так и осталось;
ip 0.0.0.0 — после этой строки ejabberd начнёт слушать на всех сетевых интерфейсах

Отлично, с конфигом, кажется, закончили. Осталось чуть.

Регистрируем учётную запись администратора ejabberd-сервера:

sudo /etc/init.d/ejabberd restart

Всё норм, ejabberd готов к приему пользователей.
Пара слов о клиентских программах.
Я пробовал несколько программ, но остановился на Psi plus. Не навязываю, но советую присмотреться. Не ахти какой «корпоративный стиль», но своё дело знает туго.
*Примечание: для передачи файлов между всеми, необходимо в настройках аккаунта (Другое/Передача данных/Прокси сервер) указать внешний ip адрес ejabberd-сервера (в нашем примере 55.55.55.55)

Итак, сервер настроен, клиенты подключены, всё ок.

Засланец

Это тот случай, когда подготовка оказалась сложнее самой реализации. Тренировался на рабочем компьютере с
ubuntu 13.04
Необходимо установить ruby
Оказалось, что версии выше 1.8.7 (как позже выяснилось) капризничают, поэтому её я и поставил.
Устанавливал по этому руководству (nodejs — не надо, наша версия 1.8.7)
Затем устанавливаем «гемы»

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