Thank you for reading this post, don't forget to subscribe!
Разберем ситуацию, когда необходимо «с нуля» установить Roundcube на выделенный сервер. Сначала мы настроим его на работу с одним удаленным почтовым сервером, затем — несколькими. В данной инструкции будет применяться операционная система Linux CentOS и веб-сервер NGINX + php-fpm.
Настройка веб-сервера
Roundcube является веб-приложением и для работы требует веб-сервер. В данной инструкции мы будем использовать связку NGINX + PHP + PHP-FPM.
Установка и запуск nginx
Установку выполняем следующими командами.
yum install epel-release
yum install nginx
После установки разрешаем автозапуск nginx и стартуем его:
systemctl enable nginx
systemctl start nginx
Открываем веб-браузер на любом компьютере локальной сети и заходим по адресу http://<IP-адрес сервера> — мы должны увидеть приветствие NGINX:
Установка PHP и PHP-FPM
Roundcube работает как приложение php, поэтому необходимо установить его интерпретатор. Также нам нужен PHP-FPM, так как NGINX не занимается обработкой скриптов php.
Выполняем установку компонентов:
yum install php php-fpm
… после запускаем PHP-FPM:
systemctl enable php-fpm
systemctl start php-fpm
Настройка NGINX + PHP-FPM
Открываем конфигурационный файл PHP-FPM:
vi /etc/php-fpm.d/www.conf
Задаем настройку для параметра listen:
listen = /var/run/php-fpm/php-fpm.sock
Перезапускаем php-fpm:
systemctl restart php-fpm
Теперь открываем конфиг nginx:
vi /etc/nginx/conf.d/default.conf
Внутри секции server добавим:
location ~ \.php$ {
set $root_path /usr/share/nginx/html;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
include fastcgi_params;
fastcgi_param DOCUMENT_ROOT $root_path;
}
Редактируем секцию location:
location / {
…
index index.php;
}
Перезапускаем nginx и php-fpm:
systemctl restart nginx
Создаем файл index.php в root-каталоге nginx:
vi /usr/share/nginx/html/index.php
<?php phpinfo(); ?>
Открываем браузер и переходим по адресу http://<IP-адрес сервера> — должна открыться страница с отображением параметров php:
Сервер баз данных
Также для Roundcube нужна СУБД — мы установим MariaDB:
yum install mariadb-server
Запускаем сервис базы данных + разрешаем его автозапуск:
systemctl start mariadb
systemctl enable mariadb
Задаем пароль для суперпользователя mariadb:
mysqladmin -u root password
Устанавливаем компоненты для работы php с mysql:
yum install php-mysql php-mysqli
Перезапускаем php-fpm:
systemctl restart php-fpm
Снова открываем страницу http://<IP-адрес сервера> — должен появится раздел mysql:
Устанавливаем и настраиваем Roundcube Webmail
Открываем страницу загрузки Roundcube. Копируем ссылку на LTS-версию продукта (стабильную):
Используем ссылку, чтобы загрузить архив программы:
wget https://github.com/roundcube/roundcubemail/releases/download/1.1.12/roundcubemail-1.1.12-complete.tar.gz
* на момент написания инструкции LTS версия была 1.1.12.
Создаем каталог для размещения файлов Roundcube:
mkdir /usr/share/nginx/html/webmail
И распаковываем архив в созданную папку:
tar -C /usr/share/nginx/html/webmail -xvf roundcubemail-*.tar.gz --strip-components 1
Копируем шаблон конфигурационного файла и создаем рабочий конфиг:
cp /usr/share/nginx/html/webmail/config/config.inc.php.sample /usr/share/nginx/html/webmail/config/config.inc.php
Открываем его на редактирование:
vi /usr/share/nginx/html/webmail/config/config.inc.php
Редактируем строку для подключения к СУБД:
$config['db_dsnw'] = 'mysql://roundcube:roundcube123@localhost/roundcubemail';
* где roundcube:roundcube123 — логин и пароль для доступа к базе данных; localhost — сервер базы данных; roundcubemail — имя базы данных.
Создаем следующие строки:
$config['enable_installer'] = true;
$config['drafts_mbox'] = 'Drafts';
$config['junk_mbox'] = 'Junk';
$config['sent_mbox'] = 'Sent';
$config['trash_mbox'] = 'Trash';
$config['create_default_folders'] = true;
* первая строка разрешает установку портала. Остальные — указывают на необходимость создания папок по умолчанию, если их нет. Без данной настройки, если не создавались папки другим клиентом, веб-клиент может выдавать ошибки при перемещении писем, например, при их удалении.
Задаем владельца apache на папку портала:
chown -R apache:apache /usr/share/nginx/html/webmail
* несмотря на то, что наш сервер обрабатываем скрипты с помощью php-fpm, работает последний по умолчанию от apache.
Создаем в MariaDB базу и пользователя для roundcubemail:
mysql -uroot -p
… система запросит пароль — вводим тот, что задавали при установке MariaDB.
> CREATE DATABASE roundcubemail DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
> GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcube@localhost IDENTIFIED BY 'roundcube123';
> quit
* данными командами мы создаем базу данных roundcubemail и пользователя roundcube с паролем roundcube123. Обратите внимание, что если в вашем случае будут использоваться другие пользователь, пароль и база данных, то следует внести соответствующие изменения в настройку самого roundcube, которую мы выполняли ранее.
Загружаем в созданную базу данные:
mysql -uroot -p roundcubemail < /usr/share/nginx/html/webmail/SQL/mysql.initial.sql
… снова запрос пароля — вводим пароль от суперпользователя MariaDB.
Устанавливаем компоненты, необходимые для работы Roundcube:
yum install php-pear php-mcrypt php-intl php-ldap php-pear-Net-SMTP php-pear-Net-IDNA2 php-pear-Mail-Mime
Настроим php:
vi /etc/php.ini
date.timezone = "Europe/Moscow"
* в данном примере мы задаем московское время.
Перезагружаем php-fpm:
systemctl restart php-fpm
Открываем браузер и переходим по адресу http://<IP-адрес сервера>/webmail/installer/.
В самом низу нажимаем по кнопке Next. Если кнопка будет неактивна, проверяем, что нет ошибок (NOT OK):
На следующей странице мы создаем конфигурационный файл.
а) вводим данные для подключения к СУБД:
б) настраиваем подключение к удаленному почтовому серверу:
* в данном примере мы указываем сервер 192.168.0.15 с доступом по IMAP.
в) для отправки сообщений нужно использовать следующий удаленный сервер:
* также указан почтовый сервер 192.168.0.15.
г) после окончания правки конфигурации, кликаем по CREATE CONFIG:
Конфигурационный файл создан — нажимаем CONTINUE, чтобы продолжить установку:
Проверяем, что все пункты находятся в состоянии OK. Установка выполнена.
Открываем конфигурационный файл roundcube:
vi /usr/share/nginx/html/webmail/config/config.inc.php
Запрещаем установку портала:
$config['enable_installer'] = false;
После удаляем папку с установочными скриптами:
\rm -R /usr/share/nginx/html/webmail/installer
И заходим в браузере по адресу http://<IP-адрес сервера>/webmail/. — должна открыться страница аутентификации пользователя. Пока не вводим никаких данных.
SSL и TLS
Если почтовый сервер поддерживает/требует SSL или TLS соединения, то открываем конфигурационный файл roundcube:
vi /usr/share/nginx/html/webmail/config/config.inc.php
… и редактируем:
…
$config['default_host'] = 'tls://192.168.0.15';
…
$config['smtp_server'] = 'ssl://192.168.0.16';
…
* в данном примере мы указали, что подключение к серверу по IMAP выполняется с использованием TLS, а по SMTP — по SSL.
Открываем браузер и переходим по адресу http://<IP-адрес сервера>/webmail/. — входим в систему под пользователем и паролем одной из почтовых учетных записей. Вход должен выполнить успешно и мы должны увидеть письма, находящиеся в почтовом ящике.
Настройка аутентификации на сервере исходящей почты
Для возможности отправлять письма, многие почтовые MTA требуют авторизации пользователя. Как правило, используются логин и пароль такие же, как на подключение к почтовому ящику.
И так, Roundcube должен отправлять данные для smtp-аутентификации. Открываем конфигурационный файл:
vi /usr/share/nginx/html/webmail/config/config.inc.php
Добавим такие строки:
$config['smtp_user'] = '%u';
$config['smtp_pass'] = '%p';
* мы указали использовать данные, под которыми зашел текущий пользователь, для авторизации на SMTP .
Переходим к нашей странице http://<IP-адрес сервера>/webmail/. — пробуем отправить письмо. Должно все получиться.
Добавление почтового сервера
Добавим еще один сервер почты в Roundcube. Открываем конфигурационный файл:
vi /usr/share/nginx/html/webmail/config/config.inc.php
Находим нашу настройку:
$config['default_host'] = 'tls://192.168.0.15';
… и меняем ее на:
$config['default_host'] = array('tls://192.168.0.15', 'tls://192.168.0.16');
* мы изменили тип записи, указав, что это массив (array) и через запятую перечислили два сервера — 192.168.0.15 и 192.168.0.16.
Переходим на страницу авторизации Roundcube http://<IP-адрес сервера>/webmail/. — мы должны увидеть выпадающий список наших серверов:
Несколько доменов без выпадающего списка
Как правило, пользователям неудобно выбирать нужный сервер. Это может их сбить с толку.
Чтобы Roundcube автоматически выбирал почтовый сервер, внесем изменения в наш конфигурационный файл:
vi /usr/share/nginx/html/webmail/config/config.inc.php
…
$config['default_host'] = 'tls://imap.%s';
…
$config['smtp_server'] = 'tls://smtp.%s'
…
* мы опять вернули старый формат для нашей записи default_host и преобразовали адрес с помощью переменной %s — она позволяет подставлять в имя сервера вторую часть (после @) вводимого email адреса. Например, если мы авторизуемся под пользователем master@test.ru, то Roundcube станет подключаться к серверу imap.test.ru.
Чтобы данная настройка корректно работала, необходимо, чтобы сервер мог разрешать имена серверов для подключения в IP-адреса. Для этого все хосты imap и smtp для обслуживаемых почтовых доменов должны быть в DNS-сервере, к которому обращается сервер Roundcube. Или нужные записи можно прописать в файле /etc/hosts.
Брендирование (свой логотип и название)
Roundcube можно настроить для отображения вашего логотипа и названия. Для этого открываем конфигурационный файл:
vi /usr/share/nginx/html/webmail/config/config.inc.php
Добавляем строки (или редактируем):
$config['skin_logo'] = 'images/logo.png';
$config['product_name'] = 'test Roundcube Webmail';
* skin_logo указывает путь относительно каталога roundcube (но если указать первым символом /, то путь будет относительно каталога с темой — это может быть полезным, если для каждой темы должен быть свой логотип); product_name — задает название в нижней части формы авторизации.
Создаем каталог для хранения изображений:
mkdir /usr/share/nginx/html/webmail/images
… и копируем туда наш логотип logo.png. Для копирования файла на сервер Linux можно воспользоваться программой WinSCP.
Открываем веб-интерфейс и проверяем, что логотип и название поменялись.
Возможные ошибки
1. Неудачное соединение с IMAP сервером.
Появляется при попытке авторизоваться в Roundcube.
Причина: как правило, недоступен IMAP-сервер или Roundcube неправильно настроен на подключение к серверу.
Решение: проверяем, что сервер доступен по сети. Проверяем настройки SSL и TLS
2. SMTP ошибка (554): Невозможно добавить получателя XXX (5.7.1 <XXX>: Relay access denied)
Ошибка появляется при попытке отправить письмо.
Причина: SMTP-сервер не разрешает удаленному хосту отправку сообщений. Для этого требуется пройти аутентификацию.
Решение: есть два способа устранить ошибку:
1. Настроить аутентификацю в Roundcube
2. Также можно решить проблему, добавив наш хост Roundcube в качестве relay на почтовом сервере. Данный способ не является правильным с точки зрения безопасности и его рекомендуется применить для временного использования.
В качестве SMTP-сервера могут использоваться разные MTA. Приведем пример для разрешения отправки писем в Postfix. Открываем его конфигурационный файл:
vi /etc/postfix/main.cf
Редактируем строку mynetworks:
mynetworks = … 192.168.0.14
* где mynetworks — список доверенных узлов, которым можно будет отправлять сообщения без дополнительных проверок. В данном примере мы добавили хост 192.168.0.14.
Перечитываем конфигурацию postfix:
systemctl reload postfix