FastNetMon

Thursday, 6 January 2011

Как сделать собственный Jabber сервер на FastVPS.ru на базе Debian 5 Lenny?

Разве Вам, как продвинутому айтишнику, никогда не хотелось иметь свой собственный Jabber сервер на своем домене? Уверен, нет человека, которому бы не хотелось иметь JID вида admin@domain.ru :) Что же, это довольно просто!

Для осуществления мини мечты нам понадобится:
1. Домен второго уровня domain.ru добавленный в панель управления DNS по адресу https://ns3.fastvps.ru/manager
2. VPS или выделенный сервер с ОС Debian на FastVPS.ru
3. Немного терпения и сноровки :)

Итак, поехали!

Создание SRV записи на DNS для Jabber

Предполагаем, что на домене domain.ru у нас уже работают сайты. Поэтому, логинимся в панель ns3, выбираем нужный нам домен, щелкаем по нему дважды и входим в меню поддоменов. Далее нам нужно создать запись, которая будет указывать расположение нашего Jabber сервиса, для этого щелкаем по зеленому плюсу в верхнем углу панели. Тип ставим в "A", имя jabber (тогда полный адрес нашего Jabber сервера будет jabebr.domain.ru), а в поле "адрес" вписываем IP нашего сервера. После этого создаем три записи типа "SRV (сетевой сервис)" со следующими именами и портами:
_jabber._tcp 5269
_xmpp-server._tcp 5269
_xmpp-client._tcp 5222

Поля "Приоритет" и "Условный вес SRV-записи" выставляем в 0, а в поле адрес вписываем "jabber".

В конфиге named это будет выглядеть как:
_jabber._tcp IN SRV 0 0 5269 jabber
_xmpp-server._tcp IN SRV 0 0 5269 jabber
_xmpp-client._tcp IN SRV 0 0 5222 jabber

Через некоторое время, когда DNS обновится можно опционально проверить работу указанных записей извне:
host -t SRV _jabber._tcp.domain.ru
host -t SRV _xmpp-server._tcp.domain.ru
host -t SRV _xmpp-client._tcp.domain.ru

Итак, с DNS закончили, переходим к настройке демонов.

Установка Jabber сервера

Устанавливаем корректный hostname сервера:
echo "domain.ru" > /etc/hostname
/etc/init.d/hostname.sh

В консоли выполняем следующие команды:

apt-get update;
apt-get install -y ejabberd;

После этого ejabber будет установлен, добавлен в автозапуск (будет загружаться автоматически при загрузке системы) и запущен.

Убеждаемся, что Ejabberd запустился и слушает нужные нам порты:
netstat -lnpt | grep beam
tcp 0 0 0.0.0.0:5280 0.0.0.0:* LISTEN 11754/beam
tcp 0 0 xx.xx.xx.xx:7777 0.0.0.0:* LISTEN 11754/beam
tcp 0 0 0.0.0.0:45858 0.0.0.0:* LISTEN 11754/beam
tcp 0 0 0.0.0.0:5222 0.0.0.0:* LISTEN 11754/beam
tcp 0 0 0.0.0.0:5269 0.0.0.0:* LISTEN 11754/beam



Конфигурация Jabber сервера

dpkg-reconfigure ejabberd

Указываем domain.ru, потом admin и дважды вводим пароль администратора.

В ответ система откликнется примерно следующим:
Stopping jabber server: ejabberd.
Replacing config file /etc/ejabberd/ejabberd.cfg with new version
Starting jabber server: ejabberd.
Waiting for ejabberd to register admin user.
Admin user "admin@domain.ru" is registered successfully.

Входим под учетной записью администратора

Теперь нам нужен клиент с поддержкой протокола Jabber. Добавляем учетную запись, выбираем ее тип "Jabber", в поле Jabber ID вводим "admin@domain.ru", указываем пароль и подключаемся, при этом будет выдано предложение подтвердить сертификат, соглашаемся и принимаем его. Все! Можно добавлять других контактов и общаться по Jabber со всем миром!

Веб-интерфейс управления

Для выполнения различных рутиных задачек есть интерфейс управления, доступный по адресу: http://jabber.domain.ru:5280/admin, в качестве логина указываем admin@domain.ru, а в качестве пароля - наш пароль на jabber.

Консоль управления

Позволяет выполнять огромное множество операций с Jabber сервером.
ejabberdctl
Usage: ejabberdctl [--node nodename] command [options]

Available commands in this ejabberd node:
status get ejabberd status
stop stop ejabberd
restart restart ejabberd
reopen-log reopen log file
register user server password register a user
unregister user server unregister a user
backup file store a database backup to file
restore file restore a database backup from file
install-fallback file install a database fallback from file
dump file dump a database to a text file
load file restore a database from a text file
import-file file import user data from jabberd 1.4 spool file
import-dir dir import user data from jabberd 1.4 spool directory
delete-expired-messages delete expired offline messages from database
delete-old-messages n delete offline messages older than n days from database
mnesia [info] show information of Mnesia system
vhost host ... execute host-specific commands
srg-list-groups host list the shared roster groups from host
delete-older-messages days delete offline messages older than 'days'
vcard-set user host data [data2] content set data to content on the vCard
incoming-s2s-number print number of incoming s2s connections on the node
vcard-get user host data [data2] get data from the vCard of the user
status-list status list the logged users with status
remove-node nodename remove an ejabberd node from the database
stats onlineusers number of logged users
stats registeredusers number of registered users
pushroster-all file push template roster in file to all those users
srg-get-info group host get info of a specific group on host
rosteritem-purge [options] Purge all rosteritems that match filtering options
add-rosteritem user1 server1 user2 server2 nick group subs Add user2@server2 to user1@server1's roster
srg-delete group host delete the group
stats uptime-seconds uptime of ejabberd node in seconds
outgoing-s2s-number print number of outgoing s2s connections on the node
killsession user server resource kill a user session
stats onlineusersnode number of logged users in the ejabberd node
pushroster file user server push template roster in file to user@server
load-config file load config from file
user-resources user server print user's connected resources
srg-create group host name description display create the group with options
get-cookie get the Erlang cookie of this node
export2odbc server output export Mnesia tables on server to files on output directory
connected-users-number print a number of established sessions
srg-user-add user server group host add user@server to group on host
set-password user server password set password to user@server
delete-older-users days delete users that have not logged in the last 'days'
rem-rosteritem user1 server1 user2 server2 Remove user2@server2 from user1@server1's roster
compile file recompile and reload file
status-num status number of logged users with status
push-alltoall server group adds all the users to all the users in Group
srg-user-del user server group host delete user@server from group on host
connected-users list all established sessions

Examples:
ejabberdctl restart
ejabberdctl --node ejabberd@host restart
ejabberdctl vhost jabber.example.org ...

Подключение JwChat

Осуществляется весьма легко: http://www.ejabberd.im/jwchat-localserver

Источники: http://www.jms1.net/jabberd2/srv.shtml и http://server-help.ru/?tag=ejabberd

3 comments :

  1. Ну вообще можно просто купить доменное имя и настроить все через google ;-)

    ReplyDelete
  2. 2Александр: жги еще =))
    2Паша: хороший материал, четко и доступно=)

    ReplyDelete
  3. 2Alexander: у гугло джаббера море недостатков.

    2Евгений: спасибо :)

    ReplyDelete

Note: only a member of this blog may post a comment.