Установка и настройка 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
Если появятся какие-либо вопросы – спрашивайте 😉
реальный респект, как нибудь попробую на убунте всё 🙂
ещё думаю было бы полезно написать про сборку ёжика из svn 🙂
и магазин, помей уже смайлы (=
@LeoN^nano_tech™
На Ubuntu установка будет различаться немного. Про сборку из сорцов обязательно напишу, она будет актуальна и для других никсов =)
@Иван
гг, на колобки? (:
ни колобки попсовые, надо посмотреть какие есть, может на сайте адиума есть что)
Привет, забыл про комманду зарегить админа) пришлось немного покопаться. Собственно выкладываю тут:
ejabberdctl register admin_name hostname password
а то без этого никуда)))
И еще – можно ли подробнее про редактирование доменной зоны – потому что в DirectAdmin по другому. И я не понял – зачем это делать? если не сложно – скинь ответ на мыло, пжлст, просто как раз сейчас настраиваю сервер, возникают вопросы)
Спасибо за ответ на почту – возник вопрос, связанный с сертификатом SSL – у меня выдало сообщение – SSL-рукопожатие не удалось. Может где-то ошибка в описании создания сертификата?
Без SSL все работает.
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”
Попробуй еще раз скопировать.
Добрый день! Столкнулся с проблемой: после установки из портов джабберда 2.1.3 под FreeBSD 7.2 не хочет запускаться, выдает ошибку:
check_startmsgs: not found
Делаю все под рутом, так что с правами проблем не должно быть по идее. Может что-то не заущено? Или еще что?
Убей все процессы beam и epmd командами killall beam и killall epmd. Далее запусти ejabberdctl live. Выдачу скопируй сюда.
——————————————————————–
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
Ниже нет =ERROR REPORT= ?
Нет
Че-то не могу зайти в админку.
Где вручную конфигурить логин-пароль ?
все понял. дело в том, что ставил все это дело на VmWare с поддержкой NAT
в итоге с основной ОС в админку вход типа 192.168.1.2:порт/ админ
а в логине нужно было прописывать admin@localhost а не admin@192.168.1.2