Главная > Мануалы, Софт > Установка и настройка Ejabberd под FreeBSD

Установка и настройка Ejabberd под FreeBSD

Давненько я не писал в своем блоге по разным причинам. Поздравляю всех с Новым Годом и Рождеством!

Хочу поделиться своим опытом установки Ejabberd — свободного и устойчивого к отказам XMPP-сервера. Установка производилась на VDS с ОС FreeBSD 6.3 от firstvds.ru из портов, хотя в портах не самая свежая версия на данный момент (в одной из следующих записей я расскажу как устанавливать Ejabberd из исходных кодов).

Для начала нам понадобится erlang-lite, ставим его из портов:

# cd /usr/ports/lang/erlang-lite/ && make install clean

Данный процесс займет достаточно большое количество времени.

Внесем пока записи в DNS для домена, на котором будет работать наш Jabber-сервер:

_jabber._tcp.example.com. IN SRV 5 0 5269 example.com.
_xmpp-server._tcp.example.com. IN SRV 5 0 5269 example.com.
_xmpp-client._tcp.example.com. IN SRV 5 0 5222 example.com.

где example.com — Ваш домен (точка в конце существенна!); _jabber._tcp.example.com., _xmpp-server._tcp.example.com. и  _xmpp-client._tcp.example.com. — соответственно имена записей; SRV — тип записи; 5 — приоритет; 0 — условный вес записи.

Записи в DNS  можно внести в разделе «Домены», который можно найти в панели управления ISPmanager если Вы устанавливаете на VDS c этой панелью как в моем случае, либо в настройках домена Вашего регистратора.

Как только установился  erlang-lite можно приступить к установке Ejabberd:

# cd /usr/ports/net-im/ejabberd && make install clean

Откроется предложение включить поддержку ODBC (необходимо для доступа к MySQL), включать не будем поскольку сервер у нас нагружен будет не особо сильно и мы обойдемся стандартной СУБД Ejabberd — Mnesia.

Ждем окончания установки и копируем файлы конфигурации:

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

# cp /usr/local/etc/ejabberd/inetrc.example /usr/local/etc/ejabberd/inetrc

Редактируем конфигурационный файл /usr/local/etc/ejabberd.cfg:

1. Находим раздел со списками управления доступа (ACL), где можно увидеть такие строки:

%% The 'admin' ACL grants administrative privileges to Jabber accounts.
%% You can put as many accounts as you want.

Ниже следует добавить строку

{acl, admin, {user, "user", "example.com"}}.

где «user» — имя  пользователя на Вашем сервере (необходимо вписать в кавычки, например «ivan»), «example.com» — домен Вашего сервера. В моем случае строка имеет вид:

{acl, admin, {user, "ivan", "jabbos.org"}}.

После успешного запуска Ejabberd учетную запись user@example.com необходимо зарегистрировать через любой jabber-клиент. Если Вы планируете несколько пользователей с правами администратора, то просто добавьте аналогичные строки ниже.

2. Включаем поддержку ssl:

{5222, ejabberd_c2s, [
%%
%% If TLS is compiled and you installed a SSL
%% certificate, put the correct path to the
%% file and uncomment this line:
%%
{certfile, "/usr/local/etc/ejabberd/ssl.pem"}, starttls,
{access, c2s},
{shaper, c2s_shaper},
{max_stanza_size, 65536}
]},
{5223, ejabberd_c2s, [
{access, c2s},
{shaper, c2s_shaper},
{certfile, "/usr/local/etc/ejabberd/ssl.pem"}, tls,
{max_stanza_size, 65536}
]},

где /usr/local/etc/ejabberd/ssl.pem — путь к файлу ssl.pem который мы создадим далее.

3. Указываем имя сервера:

%% hosts: Domains served by ejabberd.
%% You can define one or several, for example:
%% {hosts, ["example.net", "example.com", "example.org"]}.
%%
{hosts, ["example.com"]}.

где «example.com» — Ваш домен.

Создаем 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=example.com/emailAddress=mail@jabberd.example.com"

# cat privkey.pem >> server.pem
# rm privkey.pem
# mv server.pem ssl.pem

Вместо  example.com прописываем имя своего домена.

Добавим сервер в автозагрузку:

# echo 'ejabberd_enable="YES"' >> /etc/rc.conf

Запускаем Ejabberd:

# ejabberdctl start

Если будут наблюдаться какие-либо проблемы, то следует сначала остановить Ejabberd:

# ejabberdctl stop

Наблюдаем за процессом запуска и ищем слабое место:

# ejabberdctl live

В Ejabberd имеется возможность администрировать сервер через web-интерфейс, который по умолчанию расположен по адресу:

http://example.com:5280/admin

Если появятся какие-либо вопросы — спрашивайте ;-)

  1. 9 Январь 2010 в 08:08 | #1

    реальный респект, как нибудь попробую на убунте всё :)
    ещё думаю было бы полезно написать про сборку ёжика из svn :)

  2. 9 Январь 2010 в 08:08 | #2

    и магазин, помей уже смайлы (=

  3. Иван
    9 Январь 2010 в 21:46 | #3

    @LeoN^nano_tech™
    На Ubuntu установка будет различаться немного. Про сборку из сорцов обязательно напишу, она будет актуальна и для других никсов =)

  4. Иван
    9 Январь 2010 в 21:47 | #4

    @Иван
    гг, на колобки? (:

  5. 10 Январь 2010 в 23:24 | #5

    ни колобки попсовые, надо посмотреть какие есть, может на сайте адиума есть что)

  6. 19 Февраль 2010 в 00:30 | #6

    Привет, забыл про комманду зарегить админа) пришлось немного покопаться. Собственно выкладываю тут:

    ejabberdctl register admin_name hostname password

    а то без этого никуда)))

  7. 19 Февраль 2010 в 00:40 | #7

    И еще — можно ли подробнее про редактирование доменной зоны — потому что в DirectAdmin по другому. И я не понял — зачем это делать? если не сложно — скинь ответ на мыло, пжлст, просто как раз сейчас настраиваю сервер, возникают вопросы)

  8. 19 Февраль 2010 в 18:06 | #8

    Спасибо за ответ на почту — возник вопрос, связанный с сертификатом SSL — у меня выдало сообщение — SSL-рукопожатие не удалось. Может где-то ошибка в описании создания сертификата?

  9. 19 Февраль 2010 в 18:06 | #9

    Без SSL все работает.

  10. Иван
    19 Февраль 2010 в 18:43 | #10

    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»
    Попробуй еще раз скопировать.

  11. Onion
    24 Апрель 2010 в 04:43 | #11

    Добрый день! Столкнулся с проблемой: после установки из портов джабберда 2.1.3 под FreeBSD 7.2 не хочет запускаться, выдает ошибку:
    check_startmsgs: not found
    Делаю все под рутом, так что с правами проблем не должно быть по идее. Может что-то не заущено? Или еще что?

  12. Иван
    24 Апрель 2010 в 09:00 | #12

    Убей все процессы beam и epmd командами killall beam и killall epmd. Далее запусти ejabberdctl live. Выдачу скопируй сюда.

  13. Onion
    24 Апрель 2010 в 10:43 | #13

    ———————————————————————

    IMPORTANT: ejabberd is going to start in LIVE (interactive) mode.
    All log messages will be shown in the command shell.
    You can interact with the ejabberd node if you know how to use it.
    Please be extremely cautious with your actions,
    and exit immediately if you are not completely sure.

    To exit this LIVE mode and stop ejabberd, press:
    q(). and press the Enter key

    ———————————————————————
    To bypass permanently this warning, add to ejabberdctl.cfg the line:
    EJABBERD_BYPASS_WARNINGS=true
    Press any key to continue

    Eshell V5.7.5 (abort with ^G)
    (ejabberd@localhost)1>
    =PROGRESS REPORT==== 24-Apr-2010::18:38:53 ===
    supervisor: {local,sasl_safe_sup}
    started: [{pid,},
    {name,alarm_handler},
    {mfa,{alarm_handler,start_link,[]}},
    {restart_type,permanent},
    {shutdown,2000},
    {child_type,worker}]
    (ejabberd@localhost)1>
    =PROGRESS REPORT==== 24-Apr-2010::18:38:53 ===
    supervisor: {local,sasl_safe_sup}
    started: [{pid,},
    {name,overload},
    {mfa,{overload,start_link,[]}},
    {restart_type,permanent},
    {shutdown,2000},
    {child_type,worker}]
    (ejabberd@localhost)1>
    =PROGRESS REPORT==== 24-Apr-2010::18:38:53 ===
    supervisor: {local,sasl_sup}
    started: [{pid,},
    {name,sasl_safe_sup},
    {mfa,
    {supervisor,start_link,
    [{local,sasl_safe_sup},sasl,safe]}},
    {restart_type,permanent},
    {shutdown,infinity},
    {child_type,supervisor}]
    (ejabberd@localhost)1>
    =PROGRESS REPORT==== 24-Apr-2010::18:38:53 ===
    supervisor: {local,sasl_sup}
    started: [{pid,},
    {name,release_handler},
    {mfa,{release_handler,start_link,[]}},
    {restart_type,permanent},
    {shutdown,2000},
    {child_type,worker}]
    (ejabberd@localhost)1>
    =PROGRESS REPORT==== 24-Apr-2010::18:38:53 ===
    application: sasl
    started_at: ejabberd@localhost
    (ejabberd@localhost)1>
    =PROGRESS REPORT==== 24-Apr-2010::18:38:53 ===
    supervisor: {local,kernel_safe_sup}
    started: [{pid,},
    {name,dets_sup},
    {mfa,{dets_sup,start_link,[]}},
    {restart_type,permanent},
    {shutdown,1000},
    {child_type,supervisor}]
    (ejabberd@localhost)1>
    =PROGRESS REPORT==== 24-Apr-2010::18:38:53 ===
    supervisor: {local,kernel_safe_sup}
    started: [{pid,},
    {name,dets},
    {mfa,{dets_server,start_link,[]}},
    {restart_type,permanent},
    {shutdown,2000},
    {child_type,worker}]
    (ejabberd@localhost)1>
    =PROGRESS REPORT==== 24-Apr-2010::18:38:53 ===
    supervisor: {local,mnesia_sup}
    started: [{pid,},
    {name,mnesia_event},
    {mfa,{mnesia_sup,start_event,[]}},
    {restart_type,permanent},
    {shutdown,30000},
    {child_type,worker}]
    (ejabberd@localhost)1>
    =PROGRESS REPORT==== 24-Apr-2010::18:38:53 ===
    supervisor: {local,mnesia_kernel_sup}
    started: [{pid,},
    {name,mnesia_monitor},
    {mfa,{mnesia_monitor,start,[]}},
    {restart_type,permanent},
    {shutdown,3000},
    {child_type,worker}]
    (ejabberd@localhost)1>
    =PROGRESS REPORT==== 24-Apr-2010::18:38:53 ===
    supervisor: {local,mnesia_kernel_sup}
    started: [{pid,},
    {name,mnesia_subscr},
    {mfa,{mnesia_subscr,start,[]}},
    {restart_type,permanent},
    {shutdown,3000},
    {child_type,worker}]
    (ejabberd@localhost)1>
    =PROGRESS REPORT==== 24-Apr-2010::18:38:53 ===
    supervisor: {local,mnesia_kernel_sup}
    started: [{pid,},
    {name,mnesia_locker},
    {mfa,{mnesia_locker,start,[]}},
    {restart_type,permanent},
    {shutdown,3000},
    {child_type,worker}]
    (ejabberd@localhost)1>
    =PROGRESS REPORT==== 24-Apr-2010::18:38:53 ===
    supervisor: {local,mnesia_kernel_sup}
    started: [{pid,},
    {name,mnesia_recover},
    {mfa,{mnesia_recover,start,[]}},
    {restart_type,permanent},
    {shutdown,180000},
    {child_type,worker}]
    (ejabberd@localhost)1>
    =PROGRESS REPORT==== 24-Apr-2010::18:38:53 ===
    supervisor: {local,kernel_safe_sup}
    started: [{pid,},
    {name,disk_log_sup},
    {mfa,{disk_log_sup,start_link,[]}},
    {restart_type,permanent},
    {shutdown,1000},
    {child_type,supervisor}]
    (ejabberd@localhost)1>
    =PROGRESS REPORT==== 24-Apr-2010::18:38:53 ===
    supervisor: {local,kernel_safe_sup}
    started: [{pid,},
    {name,disk_log_server},
    {mfa,{disk_log_server,start_link,[]}},
    {restart_type,permanent},
    {shutdown,2000},
    {child_type,worker}]
    (ejabberd@localhost)1>
    =PROGRESS REPORT==== 24-Apr-2010::18:38:53 ===
    supervisor: {local,kernel_safe_sup}
    started: [{pid,},
    {name,timer_server},
    {mfa,{timer,start_link,[]}},
    {restart_type,permanent},
    {shutdown,1000},
    {child_type,worker}]
    (ejabberd@localhost)1>
    =PROGRESS REPORT==== 24-Apr-2010::18:38:53 ===
    supervisor: {local,mnesia_kernel_sup}
    started: [{pid,},
    {name,mnesia_tm},
    {mfa,{mnesia_tm,start,[]}},
    {restart_type,permanent},
    {shutdown,30000},
    {child_type,worker}]
    (ejabberd@localhost)1>
    =PROGRESS REPORT==== 24-Apr-2010::18:38:53 ===
    supervisor: {local,mnesia_kernel_sup}
    started: [{pid,},
    {name,mnesia_checkpoint_sup},
    {mfa,{mnesia_checkpoint_sup,start,[]}},
    {restart_type,permanent},
    {shutdown,infinity},
    {child_type,supervisor}]
    (ejabberd@localhost)1>
    =PROGRESS REPORT==== 24-Apr-2010::18:38:53 ===
    supervisor: {local,mnesia_kernel_sup}
    started: [{pid,},
    {name,mnesia_snmp_sup},
    {mfa,{mnesia_snmp_sup,start,[]}},
    {restart_type,permanent},
    {shutdown,infinity},
    {child_type,supervisor}]
    (ejabberd@localhost)1>
    =PROGRESS REPORT==== 24-Apr-2010::18:38:53 ===
    supervisor: {local,mnesia_kernel_sup}
    started: [{pid,},
    {name,mnesia_controller},
    {mfa,{mnesia_controller,start,[]}},
    {restart_type,permanent},
    {shutdown,3000},
    {child_type,worker}]
    (ejabberd@localhost)1>
    =PROGRESS REPORT==== 24-Apr-2010::18:38:53 ===
    supervisor: {local,mnesia_kernel_sup}
    started: [{pid,},
    {name,mnesia_late_loader},
    {mfa,{mnesia_late_loader,start,[]}},
    {restart_type,permanent},
    {shutdown,3000},
    {child_type,worker}]
    (ejabberd@localhost)1>
    =PROGRESS REPORT==== 24-Apr-2010::18:38:53 ===
    supervisor: {local,mnesia_sup}
    started: [{pid,},
    {name,mnesia_kernel_sup},
    {mfa,{mnesia_kernel_sup,start,[]}},
    {restart_type,permanent},
    {shutdown,infinity},
    {child_type,supervisor}]
    (ejabberd@localhost)1>
    =PROGRESS REPORT==== 24-Apr-2010::18:38:53 ===
    application: mnesia
    started_at: ejabberd@localhost
    (ejabberd@localhost)1>
    =PROGRESS REPORT==== 24-Apr-2010::18:38:53 ===
    supervisor: {local,crypto_sup}
    started: [{pid,},
    {name,crypto_server},
    {mfa,{crypto_server,start_link,[]}},
    {restart_type,permanent},
    {shutdown,2000},
    {child_type,worker}]
    (ejabberd@localhost)1>
    =PROGRESS REPORT==== 24-Apr-2010::18:38:53 ===
    application: crypto
    started_at: ejabberd@localhost
    (ejabberd@localhost)1>
    =PROGRESS REPORT==== 24-Apr-2010::18:38:53 ===
    supervisor: {local,stringprep_sup}
    started: [{pid,},
    {name,stringprep},
    {mfa,{stringprep,start_link,[]}},
    {restart_type,permanent},
    {shutdown,brutal_kill},
    {child_type,worker}]
    (ejabberd@localhost)1>
    BREAK: (a)bort (c)ontinue (p)roc info (i)nfo (l)oaded
    (v)ersion (k)ill (D)b-tables (d)istribution

  14. Иван
    24 Апрель 2010 в 14:20 | #14

    Ниже нет =ERROR REPORT= ?

  15. Onion
    24 Апрель 2010 в 14:47 | #15

    Нет

  16. 19 Апрель 2011 в 05:54 | #16

    Че-то не могу зайти в админку.
    Где вручную конфигурить логин-пароль ?

  17. 19 Апрель 2011 в 06:10 | #17

    все понял. дело в том, что ставил все это дело на VmWare с поддержкой NAT

    в итоге с основной ОС в админку вход типа 192.168.1.2:порт/ админ

    а в логине нужно было прописывать admin@localhost а не admin@192.168.1.2

  1. 17 Октябрь 2010 в 18:22 | #1
Потребление памяти: 9.66MB