Установка ejabberd

Материал из Энциклопедия хостинга
Перейти к: навигация, поиск


Ejabberd - это высокопроизводительный, отказоустойчивый и широко распространенный jabber-сервер.

Сеть Jabber, в сравнении с другими системами общения, имеет такие преимущества, как широкая функциональность (поддержка чатов, транспортов в другие сети), децентрализованность и независимость, безопасность (поддержка SSL-шифрования заложена в протокол), отсутствие проблем с кодировками, быстрый вход в сеть. Отсутствуют ограничения на объем сообщений, спам, присутствует возможность находиться в режиме online одновременно с нескольких мест.

Что касается транспортов в другие IM-сети, то наиболее беспроблемным оказались транспорты в MSN и MRIM, проблемы с ICQ-транспортом (а установка его рассматривается в статье) никак не связаны с Jabber-сервером, а с реализацией самого протокола.

Итак, приступим к инсталляции:

Содержание

Заказ виртуального сервера

  1. Зайдите на http://firstvds.ru и зарегистрируйтесь.
  2. Закажите виртуальный сервер с тарифным планом не меньше VDS-Старт.

Установка производилась на сервер с темплейтом FreeBSD-8-Minimal, однако в дальнейшем я ставил Jabber-сервер на сервер с темплейтом FreeBSD-8-ISPmanager - это не принципиально, более того, на темплейте с предустановленным ПО сразу переходите к пункту:

cd /usr/ports/net-im/ejabberd && make BATCH=yes install

Устанавливаем ejabberd из портов

Читали подсказали мне, что jdk устанавливать не обязательно, так что можете пропустить пункт с установкой diablo-jdk, но чтобы его не ставить, достаточно перед установкой ejabberd установить erlang-lite.

Ничего сложного в этом нет, достаточно выполнить:

pkg install erlang

или

cd /usr/ports/lang/erlang-lite && make BATCH=yes install


Порту erlang-lite jdk не нужен

И потом уже переходим к установке с места cd /usr/ports/net-im/ejabberd.

Для установки ejabbed нам понадобится java. В темплейтах ISPmanager и Soft2006 она уже установлена на виртуальном сервере (поэтому можно сразу перейти к установке порта ejabberd), но мы рассмотрим случай с чистой системой FreeBSD. Установим diablo-jdk перед установкой сервера.

Настраиваем ejabberd

cp /usr/local/etc/ejabberd/ejabberd.cfg.example /usr/local/etc/ejabberd/ejabberd.cfg
cp /usr/local/etc/ejabberd/ejabberd.defaults.example /usr/local/etc/ejabberd/ejabberd.defaults

Редактируем

vi /usr/local/etc/ejabberd/ejabberd.cfg
       {acl, admin, {user, "vasya"}}.


Добавим сюда нашего пользователя, который будет иметь права администратора, и пользоваться этими правами как через jabber, так и через веб-интерфейс (подробности в документации по ejabberd)

Исправим localhost на названием вашего сервера

       % Host name:
       {hosts, ["jabberd.hostname.ru"]}.


Настроим поддержку SSL

Пропишем в /usr/local/etc/ejabberd/ejabberd.cfg

       % Listened ports:
       {listen,
        [{5222, ejabberd_c2s,     [{access, c2s}, {shaper, c2s_shaper},
                                       {max_stanza_size, 65536},
                                   starttls, {certfile, "/usr/local/etc/ejabberd/ssl.pem"}]},  
         {5223, ejabberd_c2s,     [{access, c2s},
                                       {max_stanza_size, 65536},
                                   tls, {certfile, "/usr/local/etc/ejabberd/ssl.pem"}]},
       % Use STARTTLS+Dialback for S2S connections
       {s2s_use_starttls, true}.
       {s2s_certfile, "/usr/local/etc/ejabberd/ssl.pem"}.


Полный путь к файлу ssl.pem

Затем создадим сертификат

cd /usr/local/etc/ejabberd/
 
openssl req -new -x509 -nodes -newkey rsa:1024 -days 3650 \
 -keyout privkey.pem -out server.pem -subj \
 "/C=XX/ST=XX/L=XX/O=XX/OU=XX/CN=jabberd.hostname.ru/emailAddress=mail@jabberd.hostname.ru"
 
cat privkey.pem >> server.pem  
rm privkey.pem 
mv server.pem ssl.pem

Также сертификат можно получить на сайте XMPP Federation. Преимущество такого сертификата в том, что его authority включен в некоторые jabber клиенты (например, в psi) и соответственно на стороне клиента не потребуется дополнительная установка SSL-сертификата.

К сожалению в ejabberd-1.1.4, который находится на 11:09, 6 марта 2008 (MSK) в портах, есть некоторая ошибка не позволяющая использовать такие сертификаты должным образом. В ejabberd-2.0.0 данная ошибка уже исправлена, но для работы ejabberd-1.1.4 надо во время сборки наложить патч:

cd /usr/ports/net-im/ejabberd
make patch
cd work/ejabberd-1.1.4/src/
 
# Данный патч надо откатить, если у вас в системе стоит erlang-r11 а не r12.
# Я использую r11, т.к. с erlang-r12 ejabberd-1.1.4 работал не стабильно по словам разработчиков
# Недавно вышедший ejabberd-2.0.0 совместим с erlang-r12.
# Если вы используете erlang-r12 (находящийся в портах на ~~~~~), то откатывать этот патч не надо.
patch -R < ../../../files/patch-ejab-446.diff
 
# для работы SSL при наличии цепочки серефикатов, подробнее на [https://support.process-one.net/browse/EJAB-209]
wget https://support.process-one.net/secure/attachment/10961/ejabberd-certificate-chain.patch
patch -p1 < ejabberd-certificate-chain.patch
rm ejabberd-certificate-chain.patch
cd ../../..
make build
make install clean

Добавим в запуск и запустим

       jabberd # vi /etc/rc.conf
       
       ejabberd_enable="YES"
       # /usr/local/etc/rc.d/ejabberd start


Все, вы получили работающий и надежный jabber сервер.



Ага, щас! :( Имеем: {";init terminating in do_boot",{undef,[{ejabberd_ctl,start,[]},{init,start_it,1},{init,start_em,1}]}}

Crash dump was written to: /var/log/ejabberd//erl_crash_20090528-145536.dump init terminating in do_boot ()

И где копать, что курить - неизвестно. --62.148.228.34 13:11, 28 мая 2009 (MSD)


убиваем куку rm /usr/local/lib/erlang/lib/ejabberd-*/.erlang.cookie пробуем стартовать

  1. ejabberdctl live

ну или обычным путем ;)


Всё равно не работает. После команды:

  1. rm /usr/local/lib/erlang/lib/ejabberd-*/.erlang.cookie

Пишет: no mаtch Далее запускаем # ejabberdctl live та же проблема.


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

Транспорт в icq

Вообще, лучше пользоваться каким-либо ICQ-клиентом, так как транспорт в icq работает весьма проблематично с русским языком, в отличие от MSN и MailRu

Устанавливаем из портов pyICQ Собираем с опцией

       [X] EJABBERD  Use with ejabberd (net-im/ejabberd)
cd /usr/ports/net-im/jabber-pyicq/
make install clean


Редактируем конфиг

vi /usr/local/etc/jabber-pyicq.xml

       <pyicqt>
           <jid>icq.jabberd.hostname.ru</jid>
           <mainServer>82.146.xx.xx</mainServer>

Дальнейшая настройка

           <mainServerJID>jabber.localhost</mainServerJID>


Тут вместо jabber.localhost пропишем jabberd.hostname.ru (то есть имя вашего сервера)

           <secret>secret</secret>


Пароль поменяем на другой для безопасности, скажем на skpwdq1 (буду в дальнейшем использовать его для обозначения)


           <encoding>iso-8859-1</encoding>


Поменяем на

       <encoding>windows-1251</encoding>


Теперь подсоединим его к ejabberd Запустим транспорт

       # vi /etc/rc.conf
       jabber_pyicq_enable="YES"


Создадим для него директории

mkdir /var/spool/jabber/
mkdir -p /var/jabberd/pid/

И выставим на них права

chown ejabberd /var/spool/jabber/
chown ejabberd /var/jabberd/pid/

Отредактируем конфиг jabberd

vi /usr/local/etc/ejabberd/ejabberd.cfg
       % Listened ports:
       {listen,
        [{5222, ejabberd_c2s,     [{access, c2s}, {shaper, c2s_shaper},
                           {max_stanza_size, 65536},
                           starttls, {certfile, "/usr/local/etc/ejabberd/ssl.pem"}]},
         {5223, ejabberd_c2s,     [{access, c2s},
                           {max_stanza_size, 65536},
                           tls, {certfile, "/usr/local/etc/ejabberd/ssl.pem"}]},
         % Use these two lines instead if TLS support is not compiled
         %{5222, ejabberd_c2s,     [{access, c2s}, {shaper, c2s_shaper}]},
         %{5223, ejabberd_c2s,     [{access, c2s}, ssl, {certfile, "./ssl.pem"}]},
         {5269, ejabberd_s2s_in,  [{shaper, s2s_shaper},
                           {max_stanza_size, 131072}
                          ]},
         {5280, ejabberd_http,    [http_poll, web_admin]},
       %
       % пропишем наш сервис
       %
         {5247, ejabberd_service, [{access, all},
                           {hosts, ["icq.hostname.ru"],
                            [{password, "skpwdq1"}]}]}
        ]}.


Запустим транспорт и перезапустим jabber-сервер

       # /usr/local/etc/rc.d/jabber-pyicq-transport start
       Starting jabber_pyicq.
       # /usr/local/etc/rc.d/ejabberd restart


Аналогично подключаются транспорты в другие сети, следует только их вешать на разные порты, например на 5247 - icq, 5248 - msn, 5249 - Agent MailRu

В конфигурации транспорта задается порт, который он будет слушать, его же надо указывать в конфиге ejabberd, пример

         {5247, ejabberd_service, [{access, all},
                           {hosts, ["icq.hostname.ru "],
                            [{password, "skpwdq1"}]}]},
         {5248, ejabberd_service, [{access, all},
                           {hosts, ["msn.hostname.ru "],
                            [{password, "skpwdq1"}]}]},
         {5249, ejabberd_service, [{access, all},
                           {hosts, ["mrim.hostname.ru "],
                            [{password, "skpwdq1"}]}]}


Соответственно не забываем также прописать соответствующую запись A в конфигурации DNS на ваш сервер.

Также рекомендую к прочтению руководство по инсталляции и настройке Ejabberd Installation and Operation Guide

Настройка работы ejabberd с LDAP IBM Lotus Domino сервера.

Личные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты

Заметили ошибку?

Выделите ее и нажмите CTRL+ENTER