Документация по ОС FreeBSD Вторник, 17.06.2025, 19:06
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Apache [58]
DNS [25]
FTP [27]
Mail [74]
Samba [24]
Squid [46]
SSH [23]
VPN [35]
РРР [20]
Net [173]

Главная » Статьи » Сеть » Net

Установка и настройка ejabberd + mysql и в подарок icq transport [2009]
И так всем доброго времени суток!
Задался целью выложить подробнейший ман по настройке стабильного, легкого jabber сервера.

Рекламировать не собираюсь, но скажу следующее. Ejabberd сервер обслуживает пользователей ресурса jabber.ru - Популярного российского центра мгновенных сообщений, а это ОЧЕНЬ серьёзный показатель, правда у них всё стоит на Debian, ну да ладно...

И так для успешной работы ejabberd с поддержкой mysql нужно три вещи:
1) сам ejabberd
2) erlang
3) erlang-mysql

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

Ни чего лишнего нам от erlang не надо, так что будем ставить erlang-lite
Но для начала уясним такую весч, что ejabberd (2.0.5 и ниже) работает только с erlang ветки r12 и ниже, а уже выпущена ветка r13, так что многие столкнуться с проблемой: что "не стартует" ejabberd, точнее не слушает указаные порты, то есть не работает и то есть FAIL, по этому идём в порты:
# cd /usr/ports/lang/erlang

мотрим Makefile, а именно версию порта: PORTVERSION, если она ветки r12 или ниже, то всё замечательно.
Если нет, идём в эту статью и откатываем порт до r12 ветки.

И так будем думать что всё у нас хорошо с версией erlang, то есть поехали дальше:
# cd /usr/ports/lang/erlang-lite

равим Makefile, меняем: WITHOUT_ODBC=YES, на WITH_ODBC=YES и продолжаем установку:
# make install clean

ля пущей уверенности подтверждаем поддержку ODBC.
Далее ждём пока соберётся эрлэнг.

Эрлэнг собран, идём собирать модуль для mysql, тут проблем не возникнет:
# cd /usr/ports/databases/erlang-mysql
# make install clean

у что, самое главное собрали, осталось дело за малым, идём собирать ejabberd c поддержкой ДБ.
А чтобы ejabberd непотащил с интернета всякой лабуды типа явы и заодно подстрахуемся что соберём всё с поддержкой ДБ, идём в make.conf
Добавляем:
PORTSDIR?= /usr/ports

.if ${.CURDIR} == ${PORTSDIR}/net-im/ejabberd
WITHOUT_JAVA=yes
WITH_ODBC=yes
.endif

Далее идём собирать ejabberd.
# cd /usr/ports/net-im/ejabberd
# make install clean

одтверждаем выбор ODBC и ждём пока соберётся.

И так всё собрали, идем конфигурить.
Начнём с того, что хороший сервер это всегда поддержка ssl. Приступим к сборке ssl сертификата:
# 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=jabber.имя_хоста.ru/emailAddress=
"mail@jabber.имя_хоста.ru

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

так в /usr/local/etc/ejabberd у нас уже есть готовый сертификат(ssl.pem), продолжим конфигурить.
Редактируем inetrc, велосипед придумывать не стал, смотрите:
{lookup,["file","native"]}.
{host,{}, ["jabber.ionitcom.ru","hostalias"]}.
{file, resolv, "/etc/resolv.conf"}.

Кто чего умнее скажет, с удовольствием поправлю в статье и скажу спасибо.
Далее самое интересное, ejabberd.cfg:
{acl, admin, {user, "stopka"}}.
{acl, local, {user_regexp, ""}}.
{access, pubsub_createnode, [{allow, all}]}.
{access, register, [{allow, all}]}.
{welcome_message, {"Welcome!", "Welcome to Jabber Service.
" "For information about Jabber visit http://jabber.ionitcom.ru"}}.
{access, c2s, [{deny, blocked}, {allow, all}]}.
{shaper, normal, {maxrate, 128000}}.
{shaper, fast, {maxrate, 256000}}.
{access, c2s_shaper, [{none, admin}, {normal, all}]}.
{access, s2s_shaper, [{fast, all}]}.
{access, announce, [{allow, admin}]}.
{access, configure, [{allow, admin}]}.
{access, muc_admin, [{allow, admin}]}.
{access, muc, [{allow, all}]}.
{auth_method, odbc}.
{odbc_server, {mysql, "mysql_сервер", "имя_бд", "учётка_бд",
"пароль_учётки"}}.
{odbc_pool_size, 3}.
{hosts, ["jabber.имя_хоста.ru"]}.
{max_user_sessions, 10000}.
{language, "en"}.
{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"}]},
{5269, ejabberd_s2s_in, [{shaper, s2s_shaper}, {max_stanza_size,
131072} ]},
{5247, ejabberd_service, [{access, all}, {hosts,
["icq.jabber.ionitcom.ru"], [{password, "пароль_для_icq_транспорта"}]}]}
]}.
{s2s_use_starttls, true}.
{s2s_certfile, "/usr/local/etc/ejabberd/ssl.pem"}.
{outgoing_s2s_port, 5269}.
{modules,
[
{mod_register, [{welcome_message, {"Welcome!","Welcome to
this Jabber server."}},{registration_watchers,
["stopka@jabber.ionitcom.ru"]},{access, register}]},
{mod_roster_odbc,[]},
{mod_privacy, []},
{mod_adhoc, []},
{mod_announce, [{access, announce}]},
{mod_configure, []},
{mod_caps, []},
{mod_disco, []},
{mod_stats, []},
{mod_vcard_odbc, [{search, true},{matches, infinity},
{allow_return_all, true}]},
{mod_offline_odbc,[]},
{mod_private, []},
{mod_pubsub, [{access_createnode, pubsub_createnode},
{plugins, ["default", "pep"]}]},
{mod_muc, [{access, muc},{access_create, muc},
{access_admin, muc_admin}]},
{mod_time, []},
{mod_last_odbc, []},
{mod_version, []}
]}.

Кто более менее с Английским дружит - всё поймет, кому надо подробнее описание - говорите.

Далее, ejabberdctl.cfg я не трогал вообще, всё оставил по умолчанке.

Далее, идём думать на счет БД, создаем бд, даём на неё права, в общем всё по старинке, тут останавливаться не буду. Манов по работе с mysql есть в интернете до хохоту.
И берём закидываем начальный дамп базы для ejabberd, берём его из сорцев ежабера, в /usr/ports/distfiles/ejabberd

И так, имеем настроенный ejabberd и готовую mysql базу для него.
Пойдем стартовать его:
# echo 'ejabberd_enable="YES"' >> /etc/rc.conf
# /usr/local/etc/rc.d/ejabberd start

смотрим на успехи:
# /usr/local/etc/rc.d/ejabberd status
ejabberd is running

Значит всё отлично, ejabberd встал и уже готов к работе. Можно посмотреть для уверенности sockstat и убедиться что нужный софт слушает нужные порты.

Если мы видим другой результат, то топаем в логи: /var/log/ejabberd
Устранили проблему и пробуем снова, если в /var/log/ejabberd видим файлы вида: *.dump тоесть дампы на сколько я понимаю ejabberd`a
То убиваем эрленговый демон:
# killall epmd

заного пробуем стартовать ejabberd.

Далее поговорим об установке icq-транспорта.

С транспортом проблем ни каких не будет, поехали:
# cd /usr/ports/net-in/jabber-pyicq
# make install clean

ам мы выбираем, что мы будем работать в паре с ejabberd, НО без поддержки ДБ, почему "без" сейчас объясню пока собирается транспорт.
Времени не хватило разобраться кто виноват, но суть беды в том, когда я прикручивал транспорт к mysql, после старта транспорт работал нормально, юзверы добавлялись и слизывали в базу свои контакт листы и т.д. Но стоит лишь потушить демон транспорта или ребутнуть его, вся база уходит в ноль и всем приходиться заного добавлять свои данные в ростер, кароче ерунда какая то. По этому остался на локальной базе, она не слетает с ней всё в порядке.

И так идём конфигурить jabber-pyicq.xml
Конфиг очень простой, не забудьте вписать пароль для слинковки транспорта с ejabberd и выкину кусок конфга в конце, чтобы вы не мучались дня два, за это уже отмучался я :)
Вот важный вам кусок:
<adhocDefaults>
<user>
<xstatus_receiving_mode>3</xstatus_receiving_mode>
<xstatus_sending_mode>3</xstatus_sending_mode>
<xstatus_saving_enabled>0</xstatus_saving_enabled>
<xstatus_option_smooth>1</xstatus_option_smooth>
<xstatus_display_icon_as_PEP>1</xstatus_display_icon_as_PEP>
<xstatus_display_text_as_PEP>0</xstatus_display_text_as_PEP>
<xstatus_icon_for_transport>1</xstatus_icon_for_transport>
<away_messages_receiving>0</away_messages_receiving>
<away_messages_sending>0</away_messages_sending>
<clist_show_phantombuddies>0</clist_show_phantombuddies>
<clist_deny_all_auth_requests>0</clist_deny_all_auth_requests>
<utf8_messages_sendmode>2</utf8_messages_sendmode>
<offline_messages_sendenc>2</offline_messages_sendenc>
<msgconfirm_sendmode>2</msgconfirm_sendmode>
<msgconfirm_recvmode>1</msgconfirm_recvmode>
<user_mood_receiving>1</user_mood_receiving>
<user_activity_receiving>1</user_activity_receiving>
<user_mood_receiving>1</user_mood_receiving>
</user>
</adhocDefaults>

И так идём стартовать:
# echo 'jabber_pyicq_enable="YES"' >> /etc/rc.conf
# /usr/local/etc/rc.d/jabber-pyicq-transport start

ри первом старте может заругаться что нету прав на /var/spool/jabber
На самом деле это директории нету, так что тупо создаем и даём права от ejabberd и снова стартуем.

И далее заходим в клиент, регистрируемся и видим всю прелесть в сервисах сервера.
Веб админку описывать не хочу, больно она убогая, да и малофункциональная, всё как админ всё сможете сделать через управление в сервисах.

Так что на этом всё, эта статья написана по реальным событиям поднятия сервера: jabber.ionitcom.ru
Так же создан мною ресурс(jabber.ionitcom.ru) для школьников в jabber среде, чтобы понятно было что за чем и как переходить плавно с Аськи...
Касаемо настроек ejabberd и транспорта - спрашивайте, информации очень много не хочу всё описывать в этой статье, а то получиться полный хлам.

Вот и всё, жалуйте, хвалите, вы можете связаться со мной через жабу: stopka@jabber.ionitcom.ru или в аську 490977 я через транспорт сижу или написать в личку на форуме Лиссяры, я там тоже как "stopka".



Источник: http://www.lissyara.su/?id=1954
Категория: Net | Добавил: oleg (04.07.2009) | Автор: stopka
Просмотров: 1027 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2025