вторник, 26 октября 2010 г.

Настройка web-интерфейса RoundCube на RHEL 5.2

О программе.

RoundCube Webmail — это клиент для работы с электронной почтой с веб-интерфейсом, написанный на PHP с использованием CSS и XHTML и технологии AJAX. RoundCube Webmail устанавливается практически на любой сервер с поддержкой PHP и MySQL и предоставляет вам возможность работы с почтовыми ящиками по протоколам IMAP и SMTP.

Возможности программы
- Основана на PHP и MySQL
- Поддержка мультиязычности
- Полная поддержка MIME и HTML сообщений
- Вложения к письмам
- Поддержка IMAP
- Отправка писем сразу нескольким адресатам
- Простая адресная книга
- Система подсказки имени адресата при вводе
- Пересылка сообщений с вложениями
- Создание или удаление персональных папок
- Кэширование для ускорения доступа к письмам
- Поддержка внешнего SMTP сервера
- Расширенный пользовательский интерфейс
- Неограниченное количество пользователей и сообщений
- Полное изменение внешнего вида с помощью скинов
- Реализована область предпросмотра письма
- Проверка правописания

Делается допущение, что IMAP и SMTP серверы, MySQL сервер, а также сам RoundCube работают на одной машине с внутренним именем gw.ИМЯ_ФИЛИАЛА.office.com и внешним www.ИМЯ_ВНЕШНЕГО_ДОМЕНА (например, внутренний адрес — gw.nikolaev.office.com, внешний адрес — www.DOMAIN.nikolaev.ua). Разнести эти сервисы в разные места не составит большого труда, но тогда конфигурацию нужно будет соответствующим образом изменить.
Требования к установке RoundCube можно найти в файле INSTALL в корне архива с исходниками.

Основные требования:
- Поддержка вэб-сервером (Apache или Lighttpd) .htaccess
- PHP версии 5.2 и выше, включая
- PCRE, DOM, JSON, XML, Session, Sockets (необходимо)
- libiconv (рекомендуемо)
- mbstring, fileinfo, mcrypt (опционально)
- PHP с поддержкой OpenSSL
- MySQL (4.0.8 или выше), PostgreSQL, MSSQL

Проверка выполнения необходимых условий

Первым делом убеждаемся, что установлены все необходимые пакеты php.
$ rpm -qa | grep php
php-common-5.1.6-20.el5
php-cli-5.1.6-20.el5
php-mysql-5.1.6-20.el5
php-pdo-5.1.6-20.el5
php-5.1.6-20.el5
php-ldap-5.1.6-20.el5
$ php -v
PHP 5.1.6 (cli)

$ rpm -qa | grep mysql
mysql-5.0.45-7.el5
php-mysql-5.1.6-20.el5
mysql-server-5.0.45-7.el5
libdbi-dbd-mysql-0.8.1a-1.2.2
mysql-connector-odbc-3.51.12-2.2
mysql-5.0.45-7.el5


В данном случае версия php 5.1.6 меньше, чем в требованиях, а также не установлен пакет php-xml, отвечающий за поддержку расширения DOM. Требования к СУБД выполняются.

Обновление пакетов.

wget -c http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
wget -c http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
rpm -Uvh remi-release-5*.rpm epel-release-5*.rpm

yum -y --enablerepo=remi,epel update mysql php
yum -y --enablerepo=remi,epel install php-xml (модуль dom.so)
yum -y --enablerepo=remi,epel install php-mbstring php-mcrypt


Проверяем версии ПО:
mysql —version
php —version


Возможные проблемы.

1. проблема
При возникновении следующих ошибок обновления mysql (для x86_64):
Transaction Check Error:
file /etc/my.cnf from install of mysql-libs-5.1.34-1.el5.remi.i386 conflicts with file from package mysql-5.0.45-7.el5.i386
file /usr/share/mysql/charsets/Index.xml from install of mysql-libs-5.1.34-1.el5.remi.i386 conflicts with file from package mysql-5.0.45-7.el5.i386


сделать:
yum remove mysql.i386

и затем снова запустить обновление php.
Если проблема осталась, запустите обновление mysql сначала:
yum -y --enablerepo=remi,epel update mysql

2. проблема:
ldd /usr/sbin/exim

выведет список разделяемых библиотек, необходимых для exim. Если там не окажется записи для какой-то библиотеки, необходимо проверить наличие ссылки на /usr/local/lib в файлах /etc/ld.so.conf.d/. Например, в выводе ldd /usr/sbin/exim libspf2 ссылается на пустое место.
ldd /usr/sbin/exim
 **********
        libcrypto.so.6 => /lib/libcrypto.so.6 (0x00203000)
        libpcre.so.0 => /lib/libpcre.so.0 (0x006b7000)
        libspf2.so.2 =>
***********


Ищем в файлах в каталоге /etc/ld.so.conf.d/ запись /usr/local/lib, если такой нет — добавляем ее в конец любого файла или создаем новый с данной записью. Выполняем следующую команду для обновления списка разделяемых библиотек.
/sbin/ldconfig -v | grep spf

Подготовка каталогов и распаковка исходников
cd /var/www
tar xzf roundcubemail-0.4.2.tar.gz
mv  roundcubemail-0.4.2 rcube
cd rcube
chmod 777 temp logs
cd config
cp db.inc.php.dist db.inc.php
cp main.inc.php.dist main.inc.php


Подготовка базы данных
mysql -u root -p
> create database rcubemail;
> grant all on rcubemail.* to rcube@'localhost' identified by 'Rcube_pasS';
> flush privileges;
> exit


Проблема 1:
Если получаете ошибку после flush privileges;
ERROR 1146 (42S02): Table 'mysql.servers' doesn't exist
То можно запустить
mysql_fix_privilege_tables --password=SUPER_PASS_WHICH_I_WILL_NEVER_SAY

Для создания таблиц в только что созданной БД можно воспользоваться 2-мя методами — инициализировать в процессе автоматической настройки БД или выполнить все необходимые действия самим. Инициализация базы осуществляется при помощи sql-скрипта mysql.initial.sql, который распространяется в дистрибутиве RoundCube.

Установка таблиц Mysql
mysql -u rcube -pRcube_pasS rcubemail < mysql.initial.sql

Настройка сервера Mysql5


cat /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
skip-networking
old_passwords=1


[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

Настройка web-сервера Apache2
vi /etc/httpd/conf.d/rcube.conf
Alias /rcube    /var/www/rcube
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{REMOTE_HOST} !10
RewriteCond %{REMOTE_HOST} !172
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=302,L]

<Directory /var/www/rcube/>
Order Deny,Allow 

DirectoryIndex index.php
Deny from All
Allow from 127.0.0.1 10.1 172.16.0.0/12
</Directory>

cat /etc/httpd/conf.d/ssl.conf
Внутри секции <VirtualHost _default_:443> вставляем следующее:

<Directory "/var/www/rcube">
    Order deny,allow
    Allow from 127.0.0.1
</Directory>

SSLCertificateFile /etc/pki/tls/certs/www.YOUR_DOMAIN.crt
SSLCertificateKeyFile /etc/pki/tls/private/www.YOUR_DOMAIN.key


Возможные ошибки:
Если у Вас используются подкаталоги в директории /var/www, например, /var/www/price, для которых Вы хотели бы отменить принудительное использование https — обратите внимание на директивы RewriteCond в файле /etc/httpd/conf.d/rcube.conf. Например, запрет на принудительное использование https для URL http://www.YOUR_DOMAIN.UA/price/price.zip, будет внесение в файл rcube.conf строчки:
RewriteCond %{REQUEST_URI} !/price/

ДО строчки RewriteRule.

Настройка полномочий/разрешений на файлы с сертификатом и ключом.
cd /etc/pki/tls/private/
chown apache.0 www.YOUR_DOMAIN.key
chmod 400 www.YOUR_DOMAIN.key

cd /etc/pki/tls/certs/
chown 0.0 www.YOUR_DOMAIN.crt
chmod 444 www.YOUR_DOMAIN.crt


Установка RoundCube

Перейти по ссылке http://gw.nikolaev.office.com/rcube/installer/ и следовать инструкциям мастера установки. На первой странице отобразятся некоторые требования, в случае если видите красные сообщения «NOT OK», то нужно доустановить или разрешить соответствующие модули.

Доустановить/включить обходимые модули для php
php -m | grep НАЗВАНИЕ_МОДУЛЯ, например, php -m | grep dom

Если в выводе не отображается ничего, либо ошибка поиска, то необходимо доустановить модуль с помощью yum, либо активировать модуль создав файл в каталоге /etc/php.d/НАЗВАНИЕ_МОДУЛЯ.ini с именем модуля и соответствующим содержанием, например:
cat /etc/php.d/dom.ini
extension=dom.so


Возможные ошибки

Ошибка в лог-файле /var/log/httpd/error_log
[error] [client 10.1.XX.XX] PHP Warning:  date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/Helsinki' for 'EEST/3.0/DST' instead in /var/www/rcube/config/main.inc.php on line 486

Для устранения в php.ini добавить/изменить строку:
[Date]
date.timezone = Europe/Kiev


Перезапустить httpd командой и возобновить установку:
sudo /sbin/service httpd restart

После установки удалить каталог installer.
rm -fr /var/www/rcube/installer

Настройка RoundCube

Конфигурация БД rcubemail хранится в файле db.inc.php. Изменяем строчку под свои параметры БД, например:
$rcmail_config['db_dsnw'] = 'mysql://rcube:Rcube_pasS@localhost/rcubemail';

Главный конфигурационный файл main.inc.php содержит множество опций, из которых я изменил только несколько. Все опции подробно описаны.

// $rcmail_config['enable_installer'] = true;
// Принудительно использовать https для небезопасного соединения
$rcmail_config['force_https'] = true;

// массив imap-серверов
$rcmail_config['default_host'] = "gw.nikolaev.office.com";

// предпочитаемый тип imap-аутентификации
$rcmail_config['imap_auth_type'] = PLAIN;

// имя smtp-сервера
$rcmail_config['smtp_server'] = 'gw.nikolaev.office.com';

// подставлять при аутентификации имя текущего пользователя
$rcmail_config['smtp_user'] = '%u';

// подставлять при аутентификации пароль текущего пользователя
$rcmail_config['smtp_pass'] = '%p';

// предпочитаемый тип smtp-аутентификации
$rcmail_config['smtp_auth_type'] = 'PLAIN';

// Отключение встроенного spell checker, проверяющего данные посредством Google
$rcmail_config['enable_spellcheck'] = false;

// Тип персональной адресной книги (ldap или sql)
$rcmail_config['address_book_type'] = 'sql';

// описание LDAP-каталога (AD, доступен только для чтения)
$rcmail_config['ldap_public']['FIRMA'] = array(
  'name'          => 'FIRMA address book',
  'hosts'         => array('vnk-dc02.nikolaev.office.com','vdp-dc04.office.com'),
  'port'          => 3268,
  'use_tls'         => false,
  'user_specific' => false,
  'base_dn'       => 'dc=office,dc=com',
  'bind_dn'       => 'nikolaev\user',
  'bind_pass'     => 'USER_PASS',
  'writable'      => false,   
  'LDAP_Object_Classes' => array("top", "inetOrgPerson"),
  'required_fields'     => array("cn", "sn", "mail"), 
  'LDAP_rdn'      => 'mail',
  'ldap_version'  => 3,       // использовать LDAPv3
  'search_fields' => array('mail', 'cn'),  // поля поиска
  'name_field'    => 'cn',    // поле, представляющее контакт
  'email_field'   => 'mail',  // поле, представляющее e-mail контакта
  'surname_field' => 'sn',    //  поле, представляющее фамилию контакта
  'firstname_field' => 'gn',  //  поле, представляющее имя контакта
  'sort'          => 'cn',    // Поле, по которому сортируются результаты поиска.
  'scope'         => 'sub',   // режим поиска: sub|base|list
  'filter'        => '(&(|(objectclass=user)(objectclass=contact))(!(userAccountControl:1.2.840.113556.1.4.803:=2))(mail=*))',
  'fuzzy_search'  => true,     // Разрешение wildcard поиска
  'sizelimit'     => '0',     //Ограничение количества записей результата, 0 — без лимита.
  'timelimit'     => '0',     // Число секунд для поиска, 0 — без ограничений.
);


// Упорядоченный массив адресных книг, в которых осуществляется поиск
$rcmail_config['autocomplete_addressbooks'] = array('sql','FIRMA'); 

// Кодировка по умолчанию для принимаемых сообщений
$rcmail_config['default_charset'] = 'Windows-1251'; 

// Строка заголовка, было Roundcube, я убрал.
$rcmail_config['product_name'] = '';

Украшательства

Заменить файл /var/www/rcube/skins/default/images/roundcube_logo.png на свой логотип с тем же именем.

/var/www/rcube/program/localization/ru_RU/labels.inc
Изменить по своему усмотрению строку:
$labels['welcome'] = 'Добро пожаловать в Firma-BRANCH Webmail';

Обновление до новой версии
1.Скачать новую версию
2.Сделать backup каталога /var/www/rcube и используемой БД
3.Переименовать каталог /var/www/rcube в /var/www/rcube-old
4.Создать новый каталог и распаковать туда новую версию
5.Скопировать старые config/main.inc.php и config/db.inc.php файлы в каталог config новой версии
6.Проверить файлы на наличие новых и изменения старых опций
7.Проверить в каталоге SQL наличие файлов "*.update.sql" и следовать инструкциям в них.

Дополнительные настройки:

http://trac.roundcube.net/wiki/Howto_Performance

Плагины
DKIMSTATUS


DKIMSTATUS — плагин для отображения статуса сигнатуры DKIM в каждом сообщении. Домашняя страница проекта в списке литературы.
Установка.
Распаковать архив в директорию с плагинами и добавить 'dkimstatus' в список активных плагинов в конфигурационном файле main.inc.php. Например,
// List of active plugins (in plugins/ directory)
$rcmail_config'plugins' = array('managesieve', 'vcard_attachments', 'dkimstatus');

Известные проблемы:

http://trac.roundcube.net/wiki/Howto_KnownIssues

Литература:

http://trac.roundcube.net/wiki/Howto_Install
http://blogs.ungrund.org/xio/2008/08/13/roundcube-on-debian-testing/
http://trac.roundcube.net/wiki/User_Guide_RU
http://jve.linuxwall.info/blog/index.php?pages/DKIMSTATUS-plugin-for-roundcube

Комментариев нет:

Отправить комментарий