Во второй части описание процесса установки системы. После установки будет некоторое количество нюансов, хотя кажется что система работает, но это не совсем так. Значит позже будет третья часть.
Подготовка
Описывать процесс установки базовой системы нет смысла. Никаких ключевых особенностей он не содержит. Использование Ubuntu 20.04 LTS Server связано с некоторыми технологическими особенностями требований. Задача заключалась в проведении демонстрации функционала, а не подготовки рабочего решения - соответственно минимальные затраты, сделано на том что попало под руку.
ПК 8 Гб, Core i3, SDD
Для примера доменное имя tester.ru
Прописываем у регистратора A запись для почтового архива arcmail.tester.ru. 3600 A 57.142.12.223
Соответственно hostname сервера - arcmail
1. Собственно установка
(собрано из разных источников частично дополняющих друг друга, лучшее
https://patrik.kernstock.net/2020/08/mailpiler-installation-guide/)
1.1.Для удобства задаём переменные оболочки
# наш почтовый архив
PILER_DOMAIN="arcmail.tester.ru"
# наш почтовый сервер с которого планируем хранить почту (кстати протестировать хранилище можно и без оного)
MAILSERVER_DOMAIN="mail.tester.ru"
1.2. Общие зависимости
apt install sysstat build-essential libwrap0-dev libpst-dev tnef libytnef0-dev unrtf catdoc libtre-dev tre-agrep poppler-utils libzip-dev unixodbc libpq5 software-properties-common libpoppler-dev openssl libssl-dev python3-mysqldb memcached pwgen telnet
1.3. Очистка
apt remove --yes snapd multipath-toolsapt autoremove --yes
1.4. Подготовить и установить базу данных MariaDB.
apt-key adv --fetch-keys '
https://mariadb.org/mariadb_release_signing_key.asc'
add-apt-repository 'deb [arch=amd64]
https://mirror.netcologne.de/mariadb/repo/10.4/ubuntu focal main'
apt install mariadb-{server,client} libmariadb-client-lgpl-dev-compat
1.5. Оптимизация базы
cat > /etc/mysql/conf.d/mailpiler.conf <
innodb_buffer_pool_size=256M
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=64M
innodb_log_file_size=16M
query_cache_size=0
query_cache_type=0
query_cache_limit=2M
EOF
1.6. Перезапуск mysql
systemctl restart mariadb
1.7. Ставим PHP и необходимые модули
add-apt-repository --yes ppa:ondrej/php
apt install php7.4-{fpm,common,ldap,mysql,cli,opcache,phpdbg,gd,memcache,json,readline,zip}
1.8. Web-сервер nginx
add-apt-repository --yes ppa:ondrej/nginx-mainline
apt install nginx
systemctl enable nginx
С базовыми установками всё - дальше идут специфические
1.9. Установим поисковый движок sphinx, необходимый для индексации почтовым сборщиком. Здесь начинаются некоторые нюансы. Как показала практика не все сфинксы одинаковы - рекомендую ставить непосредственно по инструкции, с соблюдением версии пакета (в нашем случае 3.3.1)
mkdir -p /root/mailpiler/sphinxsearch/
cd /root/mailpiler/sphinxsearch/
wget
http://sphinxsearch.com/files/sphinx-3.3.1-b72d67b-linux-amd64.tar.gztar xfz sphinx-*-linux-amd64.tar.gz
cp -v sphinx-*/bin/* /usr/local/bin/
# на следующей команде 100% выскакивает ошибка поскольку записи крон для сфинска на чистой системе не существует
rm /etc/cron.d/sphinxsearch
1.10 XLHTML зависимость для mailpiler. xlhtml - консольная утилита для преобразования xls-файлов в html формат.
mkdir -p /root/mailpiler/xlhtml/
cd /root/mailpiler/xlhtml/
wget
https://bitbucket.org/jsuto/piler/downloads/xlhtml-0.5.1-sj-mod.tar.gztar xzf xlhtml-*-sj-mod.tar.gz
cd xlhtml-*-sj-mod/
./configure
make
make install
ldconfig
Готовимся к установке непосредственно mailpiler
1.11. Создадим пользователя и установим необходимые разрешения
groupadd piler
useradd -g piler -m -s /bin/bash -d /var/piler piler
usermod -L piler
chmod 755 /var/piler
1.12. Загрузка, настройка, компиляция и установка.
Опять же ставим пакет по инструкции (1.3.9) в дальнейшем обновим пакет до последней версии 1.4.3. Почему так - иначе нарушается формирование конфига поисковика, т.к. 1.4.3 использует по умолчанию мантикору вместо сфинкса.
mkdir -p /root/mailpiler/piler/
cd /root/mailpiler/piler/
wget
https://bitbucket.org/jsuto/piler/downloads/piler-1.3.9.tar.gztar xzf piler-*.tar.gz
cd piler-*/
./configure --localstatedir=/var --with-database=mysql --enable-memcached
make
make install
ldconfig
1.13. Необходимо сгенерировать пароль и подготовить базу данных для mailpiler
PILER_MYSQL_USER_PW="$(pwgen -cnsB 32 1)"
echo; echo "---"; echo "MYSQL PILER PASSWORD: $PILER_MYSQL_USER_PW"; echo "---"; echo
# здесь мы получим пароль, который нам понадобится в дальнейшем - запомним его
cp util/postinstall.sh util/postinstall.sh.bak
sed -i "s/ SMARTHOST=.*/ SMARTHOST="\"$MAILSERVER_DOMAIN\""/" util/postinstall.sh
sed -i 's/ WWWGROUP=.*/ WWWGROUP="www-data"/' util/postinstall.sh
1.14. Постустановка
make postinstall
# скрипт задаёт несколько вопросов, читаем внимательно все ответы принимаем по умолчанию кроме требования ввода пароля для базы piler (см. шаг 1.13) и ввода пароля root для mysql (задаем самостоятельно, будет использоваться сокет)
1.15. Настройка Пилера и Сфинскса
cp /usr/local/etc/piler/piler.conf /usr/local/etc/piler/piler.conf.bak
cp /usr/local/etc/piler/sphinx.conf /usr/local/etc/piler/sphinx.conf.bak
sed -i "s/hostid=.*/hostid=$PILER_DOMAIN/" /usr/local/etc/piler/piler.conf
sed -i "s/update_counters_to_memcached=.*/update_counters_to_memcached=1/" /usr/local/etc/piler/piler.conf
sed -i "s/define('SPHINX_VERSION', .*/define('SPHINX_VERSION', 331);/" /usr/local/etc/piler/sphinx.conf
# в последствии при обновление сфинкса меняем номер версии в sphinx.conf
sed -i "s/define('SPHINX_STRICT_SCHEMA', 0);/define('SPHINX_STRICT_SCHEMA', 1);/" /usr/local/etc/piler/sphinx.conf
# требование для Sphinx 3.3.1 (работает при обновлении)
1.16. Запуск mailpiler и searchd и включение автозапуска:
/etc/init.d/rc.piler start
/etc/init.d/rc.searchd start
update-rc.d rc.piler defaults
update-rc.d rc.searchd defaults
1.17. Настроить веб-интерфейс почтового сборщика
Самозаверяемый сертификат:
mkdir -p /etc/nginx/ssl
openssl req -x509 -nodes -days 3650 -newkey rsa:4096 -keyout /etc/nginx/ssl/piler.key -out /etc/nginx/ssl/piler.crt -subj "/CN=$PILER_DOMAIN" -addext "subjectAltName=DNS:$PILER_DOMAIN"
1.18. Настроим nginx и PHP:
cp contrib/webserver/piler-nginx.conf /etc/nginx/sites-enabled/piler
sed -i "s|PILER_HOST|$PILER_DOMAIN|g" /etc/nginx/sites-enabled/piler
sed -i "s|/var/run/php/php7.2-fpm.sock|/var/run/php/php7.4-fpm.sock|g" /etc/nginx/sites-enabled/piler
1.19. Сделаем доступ к интерфейсу mailpiler по https и редирект 301:
sed -i "/server_name.*/a \\
listen 443 ssl http2;\n\n\
ssl_certificate /etc/nginx/ssl/piler.crt;\n\
ssl_certificate_key /etc/nginx/ssl/piler.key;\n\n\
ssl_session_timeout 1d;\n\
ssl_session_cache shared:SSL:15m;\n\
ssl_session_tickets off;\n\n\
# modern configuration of Mozilla SSL configurator. Tweak to your needs.\n\
ssl_protocols TLSv1.2 TLSv1.3;\n\
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;\n\
ssl_prefer_server_ciphers off;\n\n\
add_header X-Frame-Options SAMEORIGIN;\n\
add_header X-Content-Type-Options nosniff;" /etc/nginx/sites-enabled/piler
sed -i "/^server {.*/i\
\# HTTP to HTTPS redirect.\n\
server {\n\
listen 80;\n\
server_name $PILER_DOMAIN;\n\
return 301
https://\$host\$request_uri;\n\}" /etc/nginx/sites-enabled/piler
1.20. Перезапуск nginx
nginx -t && systemctl reload nginx
1. 21 Настраиваем конфигурационный файл вебинтерфейса mailpiler.
Кроме того, включаем аутентификацию по IMAP. Значение: все пользователи с почтовым ящиком могут напрямую войти в mailpiler, не требуется ручное вмешательство или создание учетных записей вручную. Каждый пользователь может видеть только те письма, в которых адрес электронной почты был либо получателем, либо отправителем.
cp /usr/local/etc/piler/config-site.php /usr/local/etc/piler/config-site.bak.php
sed -i "s|\$config\['SITE_URL'\] = .*|\$config\['SITE_URL'\] = '
https://$PILER_DOMAIN/';|" /usr/local/etc/piler/config-site.php
cat >> /usr/local/etc/piler/config-site.php <
// CUSTOM
\$config['PROVIDED_BY'] = '$MAILSERVER_DOMAIN';
\$config['SUPPORT_LINK'] = '
https://$MAILSERVER_DOMAIN';
\$config['COMPATIBILITY'] = '';
// fancy features.
\$config['ENABLE_INSTANT_SEARCH'] = 1;
\$config['ENABLE_TABLE_RESIZE'] = 1;
\$config['ENABLE_DELETE'] = 1;
\$config['ENABLE_ON_THE_FLY_VERIFICATION'] = 1;
// general settings.
\$config['TIMEZONE'] = 'UTC';
// authentication
// Enable authentication against an imap server
\$config['ENABLE_IMAP_AUTH'] = 1;
\$config['RESTORE_OVER_IMAP'] = 1;
\$config['IMAP_RESTORE_FOLDER_INBOX'] = 'INBOX';
\$config['IMAP_RESTORE_FOLDER_SENT'] = 'Sent';
\$config['IMAP_HOST'] = '$MAILSERVER_DOMAIN';
\$config['IMAP_PORT'] = 993;
\$config['IMAP_SSL'] = true;
// special settings.
\$config['MEMCACHED_ENABLED'] = 1;
\$config['SPHINX_STRICT_SCHEMA'] = 1; // required for Sphinx 3.3.1, see
https://bitbucket.org/jsuto/piler/issues/1085/sphinx-331.
EOF
1.22. Подчистим после всей возни
apt autoremove --yes
apt clean
Обновление mailpiler
1.23. Останавливаем
/etc/init.d/rc.searchd stop
/etc/init.d/rc.piler stop
Посмотрим актуальную версию piler на
https://bitbucket.org/jsuto/piler/downloads Для удобства создадим переменную
PILER_VERSION="1.4.3"
и поехали
cd /root/mailpiler/piler/
wget
https://bitbucket.org/jsuto/piler/downloads/piler-$PILER_VERSION.tar.gztar xzf piler-$PILER_VERSION.tar.gz
cd piler-$PILER_VERSION/
./configure --localstatedir=/var --with-database=mysql --enable-memcached
make
make install
ldconfig
Запускаем mailpiler и sphinx
/etc/init.d/rc.piler start
/etc/init.d/rc.searchd start
Если всё нормально то страница авторизации в архив будет доступена по адресу
https://arcmail.tester.ruВход admin@local : pilerrocks
Вход auditor@local - пароль не помню, поменяете войдя админом.
В целом с установкой всё. Нюансы будут в третьей части.