Локальный IM-сервер - OpenFire

То, что зарождалось как средство личного развлечения, со временем превратилось в очень удобный инструмент и для делового общения. Речь идёт о службах обмена мгновенными сообщениями. Для "глобального" обмена есть стандарты де-факто, и с их недостатками приходиться мириться, однако при организации обмена сообщениями внутри организации это вовсе необязательно.

Разрешая ICQ-трафик внутри организации, мы получаем довольно проблемный сервис:

  • Систему нельзя администрировать централизованно. Нет центрального административного узла, соответственно нельзя сформировать и поддерживать единое адресное пространство.
  • Сервис ICQ подвержен сбоям. Причин может быть много, от глобальных экспериментов AOL до хакерских атак.
  • ICQ часто используется для рассылки спама.
  • Через ICQ может быть произведена атака на сеть организации извне.
  • Сообщения (и файлы!) передаются по открытым сетям.

А что если переместить ICQ-сервер из глобальной сети в локальную? По этому пути пошли разработчики системы SIQ. Но что если пойти ещё дальше и отказаться от протокола ICQ? Ведь AOL в любой момент может изменить протокол, и с локальным сервером будут работать только определённые - старые - версии клиентов. Оптимальным выбором в этом случае представляется открытый протокол, поддерживаемый максимально обширным рядом клиентов. Это Jabber.

Jabber имеет ряд преимуществ по сравнению с коммерческими системами IM (информация из Википедии):

  • Открытость: протокол Jabber открыт, общедоступен и достаточно лёгок для понимания; существует множество реализаций серверов и клиентов, а также библиотек с открытым исходным кодом.
  • Расширяемость: с помощью пространств имён в XML можно расширить протокол Jabber для выполнения требуемых задач и для обеспечения поддержки взаимодействия между различными системами. Общие расширения разрабатываются под контролем Jabber Software Foundation.
  • Децентрализованность: кто угодно может запустить свой собственный сервер Jabber, что позволяет организациям и частным лицам заниматься любыми экспериментами с IM.
  • Безопасность: любой сервер Jabber может быть изолирован от общедоступной сети Jabber, многие из вариантов реализации сервера используют SSL при обмене между клиентом и сервером, и немало клиентов поддерживают шифрование с помощью PGP/GPG внутри протокола.

Итак, для реализации внутренней Jabber-службы по обмену сообщения необходимо определиться с серверной частью. Основных (достаточно мощных и в то же время бесплатных) претендентов два: OpenFire и ejabberd. OpenFire обыгрывает оппонента по функциональности, а также по динамике развития. И несмотря на недостатки OpenFire (например, более высокие требования к вычислительным ресурсам), я остановил свой выбор именно на этом продукте.

Процесс развёртывания OpenFire состоит из следующих шагов:

  • Установка СУБД;
  • Установка и первичная настройка OpenFire;
  • Установка плагинов, расширяющих функциональность сервера;
  • Добавление и организация пользователей.

Установка СУБД.

OpenFire позволяет использовать встроенный механизм хранения данных, однако при большом количестве пользователей будет страдать производительность, поэтому рекомендую сразу реализовать конфигурацию с внешней СУБД. Можно использовать базы на серверах Microsoft SQL, Oracle, MySQL, PostgreSQL, IBM DB2. Я например использую MySQL-сервер, работающий на Windows. Причём устанавливаю СУБД как составную часть пакета XAMPP, что позволяет в дальнейшем использовать сервер и в качестве локального веб-узла. Подробнее о пакете XAMPP вы можете прочитать здесь.

Установка и первичная настройка OpenFire.

OpenFire создан на базе Java-технологий, и нуждается в сервере приложений (JRE). Существуют две версии дистрибутива пакета - с JRE и без такового. Для предотвращения проблем, связанных с совместимостью версий продуктов рекомендую устанавливать версию с JRE. Инсталляция OpenFire производится всего несколькими щелчками мыши, никаких параметров, кроме пути установки, задавать не нужно. После окончания копирования файлов запускается окно диспетчера сервера:

Диспетчер OpenFire

Нажимаем кнопку Launch Admin. Откроется окно браузера со страницей первичной настройки сервера. Первичная настройка состоит из следующих шагов:

1. Выбираем язык административной панели;

2. Выбираем имя сервера и порты для входа в админпанель. Внимание! Имя сервера в дальнейшем будет указываться на каждом клиенте. Кроме того, имя сервера необходимо при завязке серверов между собой (для создания общего адресного пространства). Поэтому необходимо выбрать понятное имя сервера, верно отражающее название организации или подразделения, к которому относится сервер.

Выбор имени сервера OpenFire

3. Настраиваем базу данных. Первый пункт - standart database connection подразумевает подключение к внешней БД, второй (embedded) - использование внутреннего механизма хранения данных.

Выбор типа БД OpenFire

Выбираем standart и нажимаем Next. В открывшемся окне выбираем тип базы данных (это приведёт к автоматическому заполнению строк JDBC Driver Class и Database URL). Далее правим строку Database URL: на месте [host-name] вводим адрес сервера БД, а на месте [database-name] - имя базы, которая будет создана. Правильная строка выглядит примерно так: jdbc:mysql://localhost:3306/openfire. Если порт сервера БД отличается от стандартного, также меняем. Вводим имя пользователя и пароль. Пользователь должен обладать достаточными привилегиями на сервере для создания БД.

Параметры БД OpenFire

4. Настраиваем профиль. Сначала необходимо выбрать, где будет храниться информация о группах и пользователях:

Выбор формата профиля OpenFire

Выбор пункта Default означает, что вся информация будет храниться в базе данных, и все операции с пользователями и группами придётся выполнять "вручную" - через админпанель или подключение к базе данных. Пункт Directory Server означает, что сервер будет использовать информацию, хранящуюся в LDAP-каталоге домена (только для чтения). LDAP-вариант, на первый взгляд, более удобен: не нужно возиться с забивкой пользователей и групп. Однако при этом система теряет часть гибкости, а LDAP-каталог организации может оказаться замусоренным группами, имеющими отношение только к IM-службе. Кроме того, на момент написания материала нет ни одного IM-клиента, сносно поддерживающего NTLM-авторизацию. А значит, придётся забивать доменные пароли пользователей в настройках IM-клиентов, что не есть хорошо. Для себя я выбрал Default-вариант, однако здесь укажу вариант с NTLM, как более сложный. После выбора NTLM-опции появится следующее окно:

Настройка LDAP для OpenFire - шаг1

Выбираем тип каталога (Active Directory) и вводим адрес хоста. В поле Base DN вводим имя домена в формате DC=NAME. Ниже - имя пользователя домена, имеющего доступ к учётным данным AD (в формате DOMAIN\USER) и пароль. Нажимаем кнопку "Test connection" и в случае успешного соединения видим надпись:
LDAP для OpenFire - успешная настройка

По нажатию кнопки Next переходим к двум подпунктам: User Mapping и Group Mapping. Здесь можно задать соответствие полей в AD и OpenFire, а также определить фильтр по группе пользователя, чтобы OpenFire не работал со служебными группами AD:
Настройка LDAP для OpenFire - шаг2


Настройка LDAP для OpenFire - шаг3

5. Назначаем пользователя с правами администратора. При хранении профиля в БД будет предложено ввести пароль для пользователя admin, при работе с LDAP необходимо ввести имя пользователя, который присутствует в каталоге, и который будет обладать административными правами в админпанели OpenFire. Наконец щёлкаем по кнопке "Login to admintrative console" и видим предложение авторизации админпанели:

 

Вход в админпанель OpenFire


Хотя установка завершена, необходимо вручную поправить один конфигурационный файл. Если этого не сделать, кириллица в именах пользователей и групп (при Default-формате профилей), а также "отложенные" сообщения будут отображаться иероглифами-крякозябликами из-за ошибки в кодировке. Открываем файл \conf\openfire.xml в папке программы. Ищем строку, описывающую базу данных: "jdbc:mysql://host_name:3306/base_name", после чего приводим её к виду "jdbc:mysql://host_name:3306/base_name?characterEncoding=UTF-8". Кстати, если вы захотите перезапустить процедуру первичной настройки сервера, в этом же файле поправьте "true" на "false".

Установка плагинов, расширяющих функциональность сервера.

Часть функций OpenFire (например, массовая рассылка сообщений), доступна только после установки дополнительных плагинов. Скачиваем нужные плагины с сайта производителя, после чего входим в раздел Plugins админпанели.

Загрузка плагина OpenFire

Нажимаем "Обзор", указываем на jar-файл плагина, после чего нажимаем "Upload plugin". В случае успешной установки появится сообщение:

Установка плагина OpenFire - успешно

Кстати, сразу новый плагин может и не появиться в списке установленных. Нужно просто подождать, повторение процедуры установки не поможет. Рекомендую установить следующие плагины:

  • Broadcast - Функция рассылки массовых сообщений;
  • Search - Поддержка поисковых запросов пользователей;
  • User Import Export - Выгрузка и загрузка данных пользователей;
  • IM Gateway - Возможность обмена сообщениями с глобальными сетями вроде ICQ;
  • Registration - Самостоятельная регистрация пользователей.

Добавление и организация пользователей.

Пользователи OpenFire организовываются в группы. По состоянию на момент написания материала создание вложенных групп не допускается. Отдельные группы можно назначить для распространения, т.е. контакты всех пользователей, находящихся в группе, будут принудительно добавлены в IM-клиенты пользователей из других групп.

Проще всего сделать так: создать группы, соответствующие отделам организации, и создать группу "Все". Каждый пользователь будет при этом состоять как в группе своего отдела, так и в группе "все". Далее для каждой группы отдела назначается распространение на группу "Все". Таким образом, каждый пользователь в своём IM-клиенте получит полный, автоматически обновляемый при каждом запуске клиента список контактов. Конечно, если организация слишком большая, возможно ограничить область видимости контактов, реализовав другую схему подписки на распространение.

Рассмотрим случай с Default-профилем. Случай с LDAP отличается только тем, что не нужно заводить пользователей и создавать группы. Входим в раздел Users/Groups админпанели и нажимаем Create new user. Заполняем все поля пользователя, после чего нажимаем Create & Create another. Таким образом добавляем всех пользователей.

Создание пользователя в OpenFire

Далее переходим к созданию групп. Нажимаем Create new group, вводим название группы и наименование, и нажимаем Create group. После создания всех групп нажимаем Group Summary, и заходим в свойства всех подряд групп. В свойствах группы отмечаем опцию "Share group with additional users", и выбираем вариант "The following groups:". Затем ниже в списке групп выбираем "Все".

Свойства группы OpenFire

Вы скажете: "Гораздо проще выбрать опцию "All Users", и не заморачиваться с группой "Все"? Действительно, так оно, может, и проще. Вот только через некоторое время может понадобиться расширить область применения чата, и нынешняя "All Users" выйдет вам боком. Группу "Все" же можно просто переименовать в дальнейшем в "Головной офис", например, или "Департамент Х". Далее в этом же окне добавляем пользователей в группу: просто набираем имя пользователя, и нажимаем "Add":

Добавление пользователя в группу OpenFire

Кстати, совсем необязательно наполнять группу "Все" вручную. После наполнения всех остальных групп подключаемся к БД и сохраняем таблицу базы jivegroupuser в удобном нам формате (CSV или XML). При моём случае с MySQL базой я могу пользоваться как программами типа Webyog SQLyog Enterprise, так и средствами phpMyAdmin, входящего в XAMPP. Далее редактируем в экселе таблицу (просто дублируем вниз список пользователей и заполняем поле имени группы словом "Все"). И наконец - закачиваем таблицу на место.

Готово. Можно ставить клиентов на машины пользователей и начинать переписываться! В следующих материалах я опишу тонкую настройку сервера, а также создание собственной сборки IM-клиента для применения внутри организации.

Вы здесь: Home Администратору Локальный IM-сервер - OpenFire
BLOG COMMENTS POWERED BY DISQUS