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

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

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

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

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

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

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

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

Хотя установка завершена, необходимо вручную поправить один конфигурационный файл. Если этого не сделать, кириллица в именах пользователей и групп (при 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 админпанели.

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

Кстати, сразу новый плагин может и не появиться в списке установленных. Нужно просто подождать, повторение процедуры установки не поможет. Рекомендую установить следующие плагины:
- Broadcast - Функция рассылки массовых сообщений;
- Search - Поддержка поисковых запросов пользователей;
- User Import Export - Выгрузка и загрузка данных пользователей;
- IM Gateway - Возможность обмена сообщениями с глобальными сетями вроде ICQ;
- Registration - Самостоятельная регистрация пользователей.
Добавление и организация пользователей.
Пользователи OpenFire организовываются в группы. По состоянию на момент написания материала создание вложенных групп не допускается. Отдельные группы можно назначить для распространения, т.е. контакты всех пользователей, находящихся в группе, будут принудительно добавлены в IM-клиенты пользователей из других групп.
Проще всего сделать так: создать группы, соответствующие отделам организации, и создать группу "Все". Каждый пользователь будет при этом состоять как в группе своего отдела, так и в группе "все". Далее для каждой группы отдела назначается распространение на группу "Все". Таким образом, каждый пользователь в своём IM-клиенте получит полный, автоматически обновляемый при каждом запуске клиента список контактов. Конечно, если организация слишком большая, возможно ограничить область видимости контактов, реализовав другую схему подписки на распространение.
Рассмотрим случай с Default-профилем. Случай с LDAP отличается только тем, что не нужно заводить пользователей и создавать группы. Входим в раздел Users/Groups админпанели и нажимаем Create new user. Заполняем все поля пользователя, после чего нажимаем Create & Create another. Таким образом добавляем всех пользователей.

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

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