Roundcube on Debian Testing

OK, к IMAP серверу Dovecat из прошлого поста прикручиваем web-interface. Из всех web-mail систем мне известны IlohaMail, SquirrelMail и RoundCube. Будем ставить последний, потому что он красивый.

Делается допущение, что IMAP и SMTP серверы, MySQL сервер, а также сам RoundCube работают на одной машине с именем mail.ungrund.org. Разнести эти сервисы в разные места не составит большого труда, но тогда конфигурацию нужно будет соответствующим образом изменить.

Installation

В репозитарии Debian Lenny находится последняя стабильная версия RoundCube, 0.1.1. В следующей за ней 0.2alpha новшеств много, но они некритичны, плюс статус alpha как бы намекает на некоторую нестабильность продукта в целом.

Устанавливается весь “круглый квадрат” из трех пакетов, roundcube (кусочек документации и конфигурационных файлов), roundcube-core (основные файлы) и roundcube-*sql* (один из БД бэкендов для хранения информации о пользователях, кэша и прочей служебной информации, вытаскивающий по зависимостей соответствующую БД). У меня уже была инсталляция MySQL, поэтому, в качестве бэкенда я выбрал roundcube-mysql.

Во время установки зададут несколько вопросов:

  • Актуальный IMAP-сервер: mail.ungrund.org ssl://mail.ungrund.org:993;
  • Поддерживаемые Web-серверы: apache only (no lighttpd);
  • Язык по умолчанию: ru;
  • Создать и настроить БД с помощью dbconfig-common: говорим “нет”, потому что БД настроим руками для лучшего понимания процесса. Ну, на самом деле, потому что я не смог подсунуть имя и пароль рута MySQL из /etc/mysql/debian.cnf ^^.

Кстати говоря, пакет roundcube-core собран достаточно грамотно: изменяемые файлы собраны в /var, там же созданы симлинки на статические файлы и php-скрипты в /usr, а также на конфиги в /etc. Респект майнтенерам! Check this out:

[/var/lib/roundcube] $ ll
итого 12K
lrwxrwxrwx 1 root     root       24 Авг 12 19:28 bin -> /usr/share/roundcube/bin
drwxr-xr-x 2 root     root     4,0K Авг 12 19:28 config
lrwxrwxrwx 1 root     root       30 Авг 12 19:28 index.php -> /usr/share/roundcube/index.php
lrwxrwxrwx 1 root     root       19 Авг 12 19:28 logs -> ../../log/roundcube
lrwxrwxrwx 1 root     root       28 Авг 12 19:28 program -> /usr/share/roundcube/program
drwxr-xr-x 3 www-data adm      4,0K Авг 12 19:28 skins
drwxr-x--- 2 www-data www-data 4,0K Авг 12 19:28 temp
[/var/lib/roundcube] $ ll config/
итого 0
lrwxrwxrwx 1 root root 25 Авг 12 19:28 db.inc.php -> /etc/roundcube/db.inc.php
lrwxrwxrwx 1 root root 27 Авг 12 19:28 main.inc.php -> /etc/roundcube/main.inc.php
[/usr/share/roundcube] $ ll
итого 36K
drwxr-xr-x 2 root root 4,0K Авг 12 19:28 bin
lrwxrwxrwx 1 root root   25 Авг 12 19:28 config -> /var/lib/roundcube/config
-rw-r--r-- 1 root root  13K Июн 22 14:38 index.php
lrwxrwxrwx 1 root root   23 Авг 12 19:28 logs -> /var/lib/roundcube/logs
-rw-r--r-- 1 root root  11K Июн 22 14:39 main.inc.php.dist
drwxr-xr-x 7 root root 4,0K Авг 12 19:28 program
lrwxrwxrwx 1 root root   24 Авг 12 19:28 skins -> /var/lib/roundcube/skins
lrwxrwxrwx 1 root root   23 Авг 12 19:28 temp -> /var/lib/roundcube/temp

Официальная документация достаточно скромно описывает процесс настройки, что повышает ценность этой заметки :) Также можно пошерстить по мэйл-архивам: http://lists.roundcube.net/users/

Configuration

Нужно настроить 3 вещи:

  • Apache Virtual Host;
  • RoundCube DB;
  • Ну и сам RoundCube.

Apache

Пакетом roundcube-core был заботливо установлен файл /etc/roundcube/apache.conf, на который ссылается /etc/apache2/conf.d/roundcube. Я предпочитаю “вхост-специфичные” настройки хранить в файле самого вхоста, поэтому /etc/roundcube/apache.conf смело целиком комментируем, а в /etc/apache2/sites-available/mail.ungrund.org пишем следующее:

/etc/apache2/sites-available/mail.ungrund.org

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<VirtualHost *:80>
        ServerName mail.ungrund.org
        #ServerAlias *.ungrund.org
        ServerAdmin webmaster@ungrund.org
 
        ErrorLog /var/log/apache2/mail.ungrund.org/error.log
        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn
        CustomLog /var/log/apache2/mail.ungrund.org/access.log combined
 
        # Controlled by ServerTokens
        ServerSignature On
 
        # --------------------------------------------------------------------
 
        #Alias /roundcube/program/js/tiny_mce/ /usr/share/tinymce2/www/
        #Alias /roundcube /var/lib/roundcube
        Alias /program/js/tiny_mce/ /usr/share/tinymce2/www/
        DocumentRoot /var/lib/roundcube
 
        # Access to tinymce2 files
        <Directory "/usr/share/tinymce2/www/">
              Options Indexes MultiViews FollowSymLinks
              AllowOverride None
              Order allow,deny
              allow from all
        </Directory>
 
        <Directory /var/lib/roundcube/>
                Options +FollowSymLinks
                AllowOverride All
                order allow,deny
                allow from all
        </Directory>
 
        # Protecting basic directories:
 
        <Directory /var/lib/roundcube/config>
                Options -FollowSymLinks
                AllowOverride None
        </Directory>
 
        # Also Deny from all in .htaccess
        <Directory /var/lib/roundcube/temp>
                Options -FollowSymLinks
                AllowOverride None
                Order allow,deny
                Deny from all
        </Directory>
 
        <Directory /var/lib/roundcube/logs>
                Options -FollowSymLinks
                AllowOverride None
                Order allow,deny
                Deny from all
        </Directory>
</VirtualHost>

Тут, по-моему, все понятно. Права доступа на директории в /var/lib/roundcube были предусмотрительно скопированы из /etc/apache2/conf.d/roundcube.

Не забываем выполнить a2ensite mail.ungrund.org, создать соответствующую директорию в /var/log/apache2 и перезагрузить апач.

MySQL

У нас будет БД ‘roundcube‘ и пользователь с таким же именем, имеющий к этой базе достаточно привелегий.

Запускаем mysql от рута:

mysql --defaults-extra-file=/etc/mysql/debian.cnf

Затем:

CREATE DATABASE roundcube;
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER on roundcube.* to 'roundcube'@'localhost' identified BY 'blah';
quit;

Пароль свой вместо ‘blah‘, его нужно запомнить.

Поскольку мы от автоматической настройки БД отказались, придется выполнить все необходимые действия самим. Инициализация базы осуществляется при помощи sql-скрипта mysql.initial.sql, который распространяется в дистрибутиве roundcube и который можно вытащить из SVN по адресу: https://svn.roundcube.net/tags/roundcubemail/v0.1.1/SQL/mysql5.initial.sql

Скачали, инициализируем:

mysql -u roundcube roundcube -p < mysql5.initial.sql

Конфигуация БД roundcube хранится в /etc/roundcube/db.inc.php, который включает файл /etc/roundcube/debian-db.php, который, в свою очередь, генерится из /etc/dbconfig-common/roundcube.conf программкой /usr/sbin/dbconfig-generate-include. Из /etc/dbconfig-common/roundcube.conf нас интересует:

/etc/dbconfig-common/roundcube.conf

18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# dbc_dbtype: type of underlying database to use
#       this exists primarily to let dbconfig-common know what database
#       type to use when a package supports multiple database types.
#       don't change this value unless you know for certain that this
#       package supports multiple database types
dbc_dbtype='mysql'
 
# dbc_dbuser: database user
#       the name of the user who we will use to connect to the database.
dbc_dbuser='roundcube'
 
# dbc_dbpass: database user password
#       the password to use with the above username when connecting
#       to a database, if one is required
dbc_dbpass='blah'
 
# dbc_dbserver: database host.
#       leave unset to use localhost (or a more efficient local method
#       if it exists).
dbc_dbserver=''
 
# dbc_dbport: remote database port
#       leave unset to use the default.  only applicable if you are
#       using a remote database.
dbc_dbport=''
 
# dbc_dbname: name of database
#       this is the name of your application's database.
dbc_dbname='roundcube'

Пароль заменить на свой, все остальное, скорее всего, будет таким же.

“Регенерируем” конфиг /etc/roundcube/debian-db.php:

/usr/sbin/dbconfig-generate-include /etc/dbconfig-common/roundcube.conf /etc/roundcube/debian-db.php

Последний шаг: разрешить roundcube читать debian-db.php, поскольку по умолчанию он имеет права 600 root:root:

[/etc/roundcube] # chmod g+r debian-db.php
[/etc/roundcube] # chgrp www-data debian-db.php

С базой все.

Roundcube

Помимо /var/lib/roundcube/config/db.inc.php, roundcube также читает файл /var/lib/roundcube/config/main.inc.php, являющийся главным конфиг файлом. Как должно быть ясно, оба суть симлинки в /etc/roundcube.

Настраиваем /etc/roundcube/main.inc.php. Часть изменений уже была сделана во время установки, кое-что поправим сейчас:

Отображать красивые названия IMAP-серверов при логине.

34
35
36
37
38
39
40
41
// the mail host chosen to perform the log-in
// leave blank to show a textbox at login, give a list of hosts
// to display a pulldown menu or set one host as string.
// To use SSL connection, enter ssl://hostname:993
$rcmail_config['default_host'] = array(
        "mail.ungrund.org" => "Ungrund mail server",
        "ssl://mail.ungrund.org:993" => "Secure(SSL/TLS) Ungrund mail server"
);

Использовать корректное имя домена в envelope’ах и в поле ‘From‘ вместо адреса IMAP-сервера:

51
52
53
54
55
// This domain will be used to form e-mail addresses of new users
// Specify an array with 'host' => 'domain' values to support multiple hosts
$rcmail_config['mail_domain'] = array(
        "mail.ungrund.org" => "ungrund.org"
);

Использовать услуги указанного SMTP-сервера для отправки писем. Не показанные здесь переменные smtp user, pass и auth_type настроить по вкусу:

65
66
67
68
// use this host for sending mails.
// to use SSL connection, set ssl://smtp.host.com
// if left blank, the PHP mail() function is used
$rcmail_config['smtp_server'] = 'mail.ungrund.org';

Чарсет по умолчанию: горячо любимый cp1251. Также, отключить спелл-чекалку, которая для проверки орфографии отправляет тело письма в гугл (!).

188
189
190
191
192
193
194
// Use this charset as fallback for message decoding
$rcmail_config['default_charset'] = 'CP1251';
 
// Make use of the built-in spell checker. It is based on GoogieSpell.
// Since Google only accepts connections over https your PHP installatation
// requires to be compiled with Open SSL support
$rcmail_config['enable_spellcheck'] = FALSE;

С этим файлом все.

Из других настроек может понадобиться вот это, выдрано откуда-то из офдоков:

You can also modify the default .htaccess file. This is necessary to
increase the allowed size of file attachments, for example:
php_value upload_max_filesize 2M

Fin

Идем на http://mail.ungrund.org, логинимся. RoundCube должен автоматически создать запись в БД для соответствующего пользователя. Кстати, структуры этой БД можно посмотреть по адресу: http://trac.roundcube.net/attachment/wiki/Dev_Docs/db_schema.png.

В целом, RoundCube порадовал логичностью архитектуры (с точки зрения системного администратора), внятными конфигами и элегантным интерфейсом.

That’s it!

Post a Comment

Your email is never published nor shared. Required fields are marked *