Дано:
ejabberd 2.1.11 установленным на CentOS 6.4.
Задача:
Подключить MySQL к ejabberd. Настроить сохранение всех сообщений в базе MySQL.
Решение.
Установим MySQL:
#yum install mysql-server
Добавим в автозагрузку mysql:
#chkconfig mysqld on
Запустим сервис:
#service mysqld start
После установки mysql, пароль у root отсутствует, и попасть в консоль можно без пароля:
#mysql –uroot
Поэтому в начале установим новый пароль для root:
#mysqladmin –u root password NEWPASSWORD
или можно выполнить скрипт
# /usr/bin/mysql_secure_installation
Этот скрипт, при ответе на задаваемые вопросы установит новый пароль для root, удалит базу test, удалит пользователя anonymous, и запретит удаленный доступ для root.
Теперь вход происходит по паролю:
#mysql –uroot –p
Создаем базу ejabberd:
# mysql –uroot –p
mysql>create database ejabberd;
Создаем пользователя ejabberd с паролем ejabberd, и разрешаем ему подключаться к базе ejabberd с любого ip.
mysql>grant all privileges on ejabberd.* to ejabberd@'%' identified by 'ejabberd' with grant option;
Если есть необходимость удаленного доступа к базе, то предоставим этот доступ.
Откроем файл /etc/my.cnf
# vi /etc/my.cnf
Добавим следующие строки в секцию [mysqld]:
[mysqld]
port=3306
bind-address=0.0.0.0
0.0.0.0 – позволяет подключиться с любого ip.
Откроем порт 3306:
# iptables -I INPUT -p tcp –dport 3306 -m state –state NEW -j ACCEPT
Сохраним правило:
# service iptables save
Для работы с базой нам понадобиться модуль mysql-odbc. Устанавливаем клиента subversion:
# yum install svn
Забираем исходники модуля mysql-odbc:
# svn checkout http://svn.process-one.net/ejabberd-modules/mysql/trunk/ mysql
# cd mysql/
# ./build.sh
# cp ./ebin/*.beam /usr/lib64/ejabberd/ebin/
Примечание: если у вас х32 система, то копируем в /usr/lib/ejabberd/ebin/
Патчим и устанавливаем плагин mod_archive:
# svn checkout http://svn.process-one.net/ejabberd-modules
# wget /download/patch_mod_archive.diff
# cd ejabberd-modules/mod_archive/trunk/src/
# patch -p0 < ../../../../patch_mod_archive.diff
# cd .. && ./build.sh
# cp ./ebin/*.beam /usr/lib64/ejabberd/ebin/
Скачиваем файл дамп базы mysql с таблицами для архива сообщений
# wget /download/jabber.sql
Импортируем скаченный дамп в ранее созданную базу ejabberd
# mysql –uroot –p
mysql>\. ejabberd;
Редактируем файл конфигурации ejabberd.cfg
# vi /etc/ejabberd/ejabberd.cfg
Добавляем и изменяем следующие строки, при этом меняем часть модулей по следующему принципу:
%%{mod_last, []}, на {mod_last_odbc, []},
%%{mod_offline, []}, на {mod_offline_odbc, []},
%%{mod_roster, []}, на {mod_roster_odbc, []},
%%%%%%%%%%%%%%%%%%%%%%%%%
%% ejabberd.cfg
%%%%%%%%%%%%%%%%%%%%%%%%
{5280, ejabberd_http, [
{request_handlers,
[
{["archive"], mod_archive_webview} ]},
captcha,
http_bind,
http_poll,
%%register,
web_admin
]}
]}.
%%
{auth_method, odbc}.
%%
%% MySQL server:
%%
{odbc_server, {mysql, "localhost", "ejabberd", "ejabberd", "ejabberd"}}.
%%
{modules,
[
{mod_archive_odbc, [{database_type, "mysql"},
{default_auto_save, true},
{enforce_default_auto_save, true},
{default_expire, infinity},
{enforce_min_expire, 0},
{enforce_max_expire, infinity},
{replication_expire, 31536000},
{session_duration, 1800},
{wipeout_interval, 86400}]},
{mod_last_odbc, []},
{mod_offline_odbc, [{access_max_user_messages, max_user_offline_messages}]},
{mod_privacy_odbc, []},
{mod_roster_odbc, []},
%%%%%%%%%%%%%%%%%%%%%%%%
Перезапускаем ejabberd:
# /etc/init.d/ejabberd restart
Заходим в архив по адресу http://XX.XX.XX.XX:5280/archive
Если кого-то не устроит функционал, то имея доступ к базе, можно написать свою веб-форму менеджера архива.
Автор: Юрий(wdiz@bk.ru)