29 июн. 2008 г.

Openfire + PostgreSQL HOW-TO. Установка и запуск.

Итак, сегодня мы установим и запустим open-source Jabber-сервер Openfire от разработчиков из Ignite Realtime. Что такое Jabber, с чем его идят и как подают к столу, в инете информации килолитры, поэтому сей вопрос оставим за рамки, тем более что человек, собравшийся развернуть на подконтрольном ему сервере openfire, думаю, в курсе, что это такое. =)
Со странички проекта нам потребуется сам дистрибутив. Выбираем и качаем. Так как jabber будет работать под управлением Debian 4.0 Etch, то я скачал .deb-пакет, однако представлены также сборки для rpm-based дистрибутивов, пакет для Solaris и, конечно же, тарбол с исходными кодами.
Для работы openfire необходима java-машина, 5 или 6 версии. О ее закачке и установке стоит озаботиться отдельно.
apt-get install sun-java6-jre
dpkg -i openfire_3.5.1_all.deb
Сервер установлен и готов принимать соединения. Вся работа с системой проводится исключительно через web-интерфейс софтины. В конфиги конечно можно попробовать залезть, но они для этого не предназначы абсюлютно (Там вообще страшно, если честно). Да и надобности имхо особой в этом нет. Да, также нам следует установить какую либо СУБД, дабы openfire мог вести свою базу. MySQL, PostgreSQL, MSSQL.... все что вашей душе угодно, со всем этим опенфайр может работать. Так как на сервере уже крутился постгрес версии 7.4, мой выбор был очевиден. Прежде чем создать базу и начать работу, следует убедиться, что в /etc/postgresql/7.4/main/postgresql.conf выставлен параметр tcpip_socket = true, иначе будете долго думать, почему все работает, но ничего не коннектится =). В восьмерке такого косяка не обнаружено, все работает сразу после инсталляции.
Создаем базу...
su - postgres #работаем от имени postgres
createuser -U postgres -dAP openfire_user #узер создает базы (-d), но не создает пользователей (-A), при создании запрашивается пароль (-P)
createdb -E UTF-8 openfiredb #создаем базу в кодировке (-E) UTF-8
su - postgres
psql openfiredb
openfiredb=# grant all privileges on database openfiredb to "openfire_user"; #даем нашему пользователю все привилегии в рамках openfiredb базы
База создана и ждет к ней подключения =). Открываем любимый браузер и топаем на http://localhost:9090. В случае, если сервер не имеет графического интерфейса, несложно пробросить порт с помоью ssh на свою рабочую машинку. У вас же *nix, не правда ли? ;)
ssh -L 19090:localhost:9090 user@server
Поясню работу этого проброса: все обращения на localhost:19090 перенаправляются через ssh на удаленный localhost:9090. Ответные пакеты, соотвественно, идут обратным путем. То бишь, введя у себя на машине http://localhost:19090, мы получим то же самое, если бы сидели на сервере и там ввели http://localhost:9090. Подробности - man ssh.
Первоначальная настройка openfire проста и интуитивно понятна. Нам требуется выбрать используемую базу данных. прописать ее параметры, выбрать способ обращения к ней, вбить мыло и пароль пользователя Admin... и по сути все. После нажатия последнего ОК севре перезапустится, и по адресу http://localhost:19090 мы уже увидим приглашение входа в Админку. Что можно сделать там, куда пойти и куда податься в первый заход, в следующий раз =) ( хотя все там просто и понятно, даром что не по-русски, так что можно потыкаться и самостоятельно - убить сервер все арвно не получится =) ) А так, сервер полностью готов к принятию соединений и обслуживанию пользователей, которых, правда, пока нет. Однако, по умолчанию, настройки openfire разрешают самостоятельную регистрацию пользователей с помощью их клиентов, это стоит иметь в виду.
А сейчас отметим возможные проблемы при пути до этого момента, до открытия входа в админку, а также пару интересных моментов...
Ну, во-первых, как я уже упомянул выше, когда мы разбирали работу с БД, если при корректно введенных данных (адрес, порт сервера, где крутится бд, имя базы, имя и пароль пользователя, который имеет полные права на эту базу, драйвер для работы с базой), выдаются ошибки соединения, стоит убедиться, что СУБД слушает внешние tcp-соединения - netstat - an вам в помощь.
Если при первом этапе графической настройки вместо подтвеждения всех ваших изменений и сообщения об успешности установки выдается лог ошибки браузера вида

INTERNAL_SERVER_ERROR
RequestURI=/setup/setup-finished.jsp
Caused by:
java.lang.NullPointerException
и куча всякого java-мусора, то следует обновить java-машину до более новой версии (у меня например, стояла пятая, пришлось обновиться до шестой. С ней проблема исчезла).

update jiveUser set plainPassword='123456', encryptedPassword = null where username ='admin';
И еще один интересный момент. Бывает, что пароль админа как-то сам по себе забыается ). В случае с openfire это не означает неизбежное убивание базы данных и пересоздание оной ( что влечет за собой, к тому же, переустановку самой софтины). Работа сервера с БД построена так, что введенный первоначально пароль админа (на этапе начального кофигурирования), да и пароли пользователей тоже, хранится в базе в PlainText-виде. Нужно лишь зайти любым удобным средством в БД и подсмотреть. если же вы сменили пароль, как и полагается после первого входа, то это автоматически шифрует его и впредь пароль хранися уже в поле Encrypted, в виде хеша. Соотвественно в таком случае, для получения доступа к админке следует сначала удалить все что есть в поле, где хранится хеш пароля, а потом что нить написать в Plaintext поле таблицы. Например, такЭто и будет паролем. Об этой особенности следует знать даже в случае отличной памяти. Ибо, очевидно, доступ к базе данных - автоматически дает нам неограниченный доступ к самому серверу. От версии к версии номера полей могут меняться, например раньше было password, теперь plainpassword, так что если команда не проходит, можно сориентироваться на месте, ибо имя таблицы - jiveUser не меняется.