среда, 28 августа 2013 г.

Openfire сервер на базе Дебиан и Убунту

Сервер подходит для малых и средних сетей, т.к. написан на Java и является достаточно ресурсоемким.

Первоначальная настройка и установка.

Я устанавливал на Debian 5.
К установке Jabber Openfire, для начала необходимо подготовиться. Вначале, устанавливаем Java:
$ sudo apt-get install sun-java6-jre
Бывает, что выдается сообщение о том, что этот пакет найден в списках зависимостей другого пакета, но самостоятельно устанавливаться не хочет. В этом случае делаем так.
Делаем:
$ sudo nano /etc/apt/sources.list

Там в конце каждой не закомментированной строки ставим пробел и пишем non-free
Сохраняем файл и делаем:
$ sudo apt-get update

Если ошибка появляется вновь, значит во время установки ОС вы не согласились на использование дополнительных репозиториев. Тогда вновь открываете файл sources.list и дописываете туда следующее:

deb http://ftp.ru.debian.org/debian/ squeeze main non-free
deb-src http://ftp.ru.debian.org/debian/ squeeze main non-free
deb http://ftp.ru.debian.org/debian/ squeeze-updates main contrib non-free
deb-src http://ftp.ru.debian.org/debian/ squeeze-updates main contrib non-free


Сохраняйте файл и вновь сделайте:
$ sudo apt-get update




Теперь устанавливаем Apache, MySQL и PHP:
$ sudo apt-get install apache2 mysql-server php5
Во время установки "мускула", потребуется ввести пароль (фактически, задать новый пароль) пользователя root (не системного, а лично mysql) для управления Базами Данных.


ВНИМАНИЕ!!!
Чтобы сделать MySQL доступным снаружи с другого хоста:
1. в файле /etc/mysql/my.cnf  закоментировать строку "bind-adress"
2. Зайти через phpmyadmin открыть таблицу конфигов пользователей (таблица users в базе mysql) и строку root  - 127.0.0.1    откорректировать (в поле ХОСТ ввести %).  Или же, создать другого пользователя, который будет соединяться с базами данных и для него в поле хост выставить - %).

добавляем больше подключений к базе:

Debian или Ubuntu:/etc/mysql/my.cnf
CentOS/RedHat/Fedora:/etc/my.cnf
FreeBSD - данный конфигурационный файл по умолчанию отсутствует, что достаточно безопасно

Далее добавляем: 
[mysqld]
max_connections=500;


Теперь установим phpmyadmin для управления СУБД MySQL (я этого не делал, но опишу работу через него, чтобы было проще):
$ sudo apt-get install phpmyadmin
Во время установки, появится окно, в котором будет предложено сделать выбор, какой web-сервер настраивать. По скольку мы используем Apache, выбирайте его.

Jabber-Сервер Openfire отсутствует в списке репозиториев, по этому качаем его wget`ом:
http://www.igniterealtime.org/downloads/
Эта версия (3.8.2) была самой последней на момент написания статьи. Если вышла более поздняя, просто смените ссылку.

Как только скачается, делаем:
$ sudo dpkg -i openfire_3.8.2_all.deb
Все установлено и готово к настройке.


Если компьютер не в домене...

Если компьютер, на котором вы установили сервер openfire в домене или он вам вообще не нужен, можете ни о чем не волноваться и сразу переходить к следующей главе. Инструкцию по вводу в домен Ubuntu\Debian можно найти здесь: http://dojuk.livejournal.com/973.html.
Зайдите на контроллер домена и в настройках DNS-сервера, создайте запись типа А, которая позволит обращаться Jabber-клиентам по имени компьютера, а не по IP-адресу. 


Настраиваем Openfire


Для начала, создадим базу данных для нашего Jabber-сервера. Открываем браузер и вводим:
http://<имя сервера>/phpmyadmin
Вместо <имя сервера>, введите имя компьютера, на котором установлен Jabber (ну или на котором вы устанавливали Mysql и phpmyadmin.
Когда появится приглашение на вводи логина и пароля, вводите логин root, а пароль, который вы вводили при установке MySQL.
Когда откроется Web-интерфейс PhpMyAdmin, перейдите в раздел "Базы данных" и создайте там новую базу. Имя выбирайте сами)

Теперь пора переходить к глобальным настройкам Openfire.
В адресной строке вашего браузера, наберите:
http://<имя сервера>:9090
Вместо <имя сервера> введите имя компьютера, куда вы установили Openfire. 
Первичная настройка довольно проста. Единственное, что порекомендую, не выбирайте Русский. Лучше помучайтесь с http://www.translate.ru или с http://lingvo.yandex.ru. Дело в том, что на момент написания статьи, перевод на русский язык был выполнен несколько... некорректно. Ощущение, что перевод выполнен автоматически гуглом. По крайней мере, пользуясь Google Chrome, и переводя английский его штатными средствами, особой разницы я не заметил.
Когда настройка дойдет до этапа выбора типа базы данных, выбирайте "стороннюю БД". На первой строке, выберите MySQL из выпадающего списка. Вторую строку трогать не надо. В третьей необходимо ввести имя созданной вами в phpmyadmin базы данных и адрес сервера, где эта база находится. Если на этом же компьютере, то просто введите localhost.
Третья строка в моем случае, выглядит так:
jdbc:mysql://localhost:3306/jabber

Имя пользователя и пароль введите те же, что вводили для авторизации в phpmyadmin.
Максимальное колличество подключений можно увеличить, хотя все зависит от потребностей. Теперь можно нажать Proceed.

Следующим шагом выберите Active Directory и затем вводите настройки для подключения к домену. Помните, что при использовании домена, вы не сможете изменять имена пользователей, групп и т.д., т.к. контроллер домена дает права только на чтение.
Первая строка: Active Directory
Вторая строка:  имя сервера контроллера домена или его ip-адрес (я сделал по второму варианту, на случай, если возникнут временные проблемы с DNS в самый неподходящий момент)
Третья строка: Туда вписываете домен или OU (Organization Unit или по русский Подразделение), откуда будут браться сведения о пользователях. Т.к. все может поменяться в любой момент, я бы рекомендовал отдать на чтение серверу всех пользователей и все группы. Вводится по принципу DN (Domain Name). Т.е. для домена с именем example.ru надо ввести: DC=example, DC=ru. Если Вам необходимо вписать еще и Подразделение, то запись будет такая: OU=Подразделение, DC=examle, DC=ru

Ниже, укажите имя и пароль администратора домена.
В следующем окне необходимо выбрать администратора\ов, которые смогут администрировать jabber-сервер. В принципе, можно выбрать и потом, но хотя бы один должен быть выбран сразу. На этом основная настройка сервера окончена.
Примечание: Не забывайте после каждой настройки нажимать Test Settings, чтобы потом не было сюрпризов и всегда вовремя замечать проблему.

Теперь можно логиниться в админ-панель, о чем будет предложено в финале всех настроек. Логин\пароль вводите доменные.
Перейдите на закладку Users\Groups и там вы должны увидеть пользователей и группы, которые были считаны из AD. Если таковых не имеется, то ковыряйте настройки.

Настройки портов, SSL и т.д. делаются здесь очень легко и непринужденно, а описывать все настройки Openfire с комментариями - занятие крайне неблагодарное, по этому расскажу, как сделать из классического Jabber-сервера, полноценный корпоративный IM.
В пункте Users\Groups выберите закладку Groups. Там вы увидите список групп, которые были загружены из AD. Выберите группу, которую необходимо использовать по умолчанию (зачем вам в списке пользователей системные учетки и остальной мусор, который не нужен в списке контактов корпоративного мессенджера?) и перейдите в ее настройки. Там введите название группы и поставьте галочку напротив "Share group with additional users". В появившемся окне, выберите пользователей, которые должны быть отображены в общем списке контактов, либо оставьте все по умолчанию (All users). Лично я для этих целей, заранее создал в AD группу IM, в которую подключил всех пользователей, которые должны быть в Jabber`е. Теперь смело нажимайте на кнопку Save Contact list settings.


Настройка Jabber-клиента.
В сущности, все стандартно.
Имя пользователя: имя пользователя домена@имя домена
Пароль: Доменный пароль этого пользователя
Сервер для подключения: <имя сервера, где установлен openfire>.<имя домена>
Порт: по умолчанию 5222. Если вы включили в настройках сервера SSL, то будет 5223. Если вы меняли порты, то вводите те, на которые меняли.

Устранение проблем.
Основная проблема, которая возникает, это ошибка кодировки. При обмене сообщениями между разными jabber-клиентами, вместо сообщения, появляются знаки вопроса. Решается это достаточно просто. При чем, даже после установки сервера.

Вариант 1. До установки сервера.
Перед установкой openfire создайте базу, а затем смените в ней кодировку:
mysql -u root -p
use your_base
alter database character set utf8;
alter database collate utf8_general_ci;

Во время установки, когда будете выбирать драйвер MySQL укажите URL к базе вида:
jdbc:mysql://localhost:3306/your_base?useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8
Вариант 2: А если openfire уже установлен?
Если openfire уже установлен, то переконвертируйте базу в utf8, затем файле конфигурации openfire.xml допишите после jdbc:mysql://localhost:3306/your_base
?useUnicode=true&amp;characterEncoding=UTF-8&amp;characterSetResults=UTF-8

Здесь нужно ОБЯЗАТЕЛЬНО! заменить & на &amp; иначе вместо входа в админку увидите страницу установки openfire.
О Java...
Мне немало седых волос доставили "тормоза" опенфаера, из-за малого выделения памяти для джавы.
По умолчанию выделяется 250 мб (смотреть в админке), что приводит к непредсказуемым результатам (долго логиниться, обрывы при передаче файлов и прроч.).

Что делать: 
Отредактировать файл:   sudoedit /etc/default/openfire 
где после всех комментариев, первую строчку привести в соответствие: 

DAEMON_OPTS="-Xms1024m -Xmx2048m"

данный параметр выделяет для Джавы опенфаера минимум 1024 мб, и максимум 2048 мб (для моих 97 хостов достаточно)


Все. Настройка закончена.

Небольшое уточнение. При включенной доменной авторизации, вам не удастся создать (Зарегистрировать) новую группу или пользователя ни с сервера, ни с клиента, т.к. я уже говорил - Active Directory доступна серверу Openfire только для чтения.

Настройка DNS: 
Создаем записи типа SRV на DNS-сервере для автоматического нахождения TCP/IP параметров сервера с доменом Jabber в текущем домене Active Directory:
SRV recond 1: 

service: _xmpp 
protocol: _tcp 
priority: 0 
weigth: 100 
port: 5269 
hostname: jabber.contora.local. 

SRV recond 2: 
service: _xmpp-server 
protocol: _tcp 
priority: 0 
weigth: 100 
port: 5269 
hostname: jabber.contora.local. 

SRV recond 3: 
service: _xmpp-client 
protocol: _tcp 
priority: 0 
weigth: 100 
port: 5222 
hostname: jabber.contora.local.

Проверяем корректность SRV-записей
Start -> Run… -> cmd -> nslookup -type=srv _xmpp-client ._tcp.contora.local