Как поднять свой почтовый сервер на Docker и не сойти с ума

Каждый системный администратор или разработчик хотя бы раз в жизни пытался поднять собственный почтовый сервер с нуля. Обычно этот опыт оставляет глубокие душевные раны. Вы ставите Postfix, прикручиваете Dovecot, настраиваете MySQL для хранения пользователей, затем мучаетесь со SpamAssassin, настраиваете OpenDKIM, генерируете сертификаты, ломаете голову над SPF и DMARC. После недели страданий письма все равно падают в спам на Gmail, а конфиги превращаются в нечитаемую кашу.
Когда мне снова понадобилось поднять почту для пары пет-проектов и домена небольшой команды, собирать франкенштейна вручную не хотелось. Переплачивать за корпоративные подписки Google Workspace или Яндекс 360 тоже не входило в планы. Так я наткнулся на Mailu — проект, который упаковал весь джентльменский набор почтового сервера в аккуратные Docker-контейнеры.
Что такое Mailu
Mailu позиционирует себя как изолированный почтовый дистрибутив на базе Docker. Проект существует с 2016 года, собрал почти 7.5 тысяч звезд на GitHub и активно поддерживается.
Главная идея проста: дать готовый сервер, который разворачивается за десять минут через docker-compose, но при этом не тянет за собой лишнего. В отличие от тяжеловесных комбайнов вроде Zimbra или Nextcloud, Mailu занимается ровно одной задачей — надежно принимает, фильтрует и отправляет почту. Внутри нет проприетарного кода, трекеров или скрытых платных функций. Все компоненты открыты и распространяются под свободной лицензией.

Что скрывается под капотом
Архитектура проекта модульная. Вместо одного огромного контейнера Mailu разбит на десяток микросервисов, каждый из которых отвечает за свою область:
- Фронтенд на Nginx, принимающий веб-трафик и перенаправляющий почтовые порты
- Dovecot для работы по протоколам IMAP и POP3
- Postfix в роли SMTP-сервера
- Rspamd для защиты от спама, автоматического обучения и проверки репутации
- ClamAV для проверки входящих вложений на вирусы
- Панель управления на Python и Flask
- Несколько веб-клиентов на выбор, включая Roundcube и Snappymail
Все эти контейнеры общаются через внутреннюю сеть Docker, а данные (письма, базы пользователей, ключи) хранятся в примонтированных томах.
Ключевые возможности
Безопасность и доставляемость без ручной рутины
В почте самое сложное — не принять письмо, а отправить его так, чтобы почтовые сервисы адресата не отправили его в спам. Mailu берет настройку безопасности на себя:
- Автоматически выпускает и продлевает бесплатные TLS-сертификаты через Let's Encrypt
- Генерирует DKIM-ключи прямо в панели администратора и подсказывает правильные TXT-записи для DNS
- Поддерживает современные протоколы защиты доставки, включая DANE и MTA-STS
- Защищает веб-интерфейс с помощью Snuffleupagus (патч безопасности для PHP)
Удобная панель управления и мультидоменность
Через веб-интерфейс администратор заводит домены, создает ящики, настраивает псевдонимы (алиасы) и временные адреса. Приятная деталь: можно делегировать администрирование конкретного домена другому человеку. Например, вы держите сервер, но отдаете управление ящиками клиента его собственному менеджеру.
Здесь же настраиваются квоты на дисковое пространство для каждого пользователя, глобальные объявления и пересылки.
Готовые веб-клиенты и автонастройка
Пользователям не обязательно ставить почтовые клиенты на телефон или компьютер. В сборку встроены классический Roundcube и легковесный Snappymail.
Если же человек привык к Thunderbird, Apple Mail или Outlook, сервер отдает стандартные профили автонастройки. Пользователю достаточно ввести свой логин и пароль, а клиент сам подтянет нужные порты и протоколы шифрования.
Умные фильтры и сбор почты
Mailu поддерживает ManageSieve. Это значит, что пользователи могут настраивать правила сортировки, автоответчики в отпуске и пересылку писем прямо из веб-клиента. Еще есть встроенный fetchmail, который собирает почту из внешних сторонних ящиков и складывает в ваш локальный аккаунт.
Как запустить
Разработчики сделали отличный веб-генератор конфигурации на официальном сайте setup.mailu.io. Вы просто отмечаете галочками нужные компоненты (какой веб-клиент ставить, нужен ли антивирус, какая база данных), указываете доменное имя сервера и получаете готовый архив с двумя файлами: mailu.env и docker-compose.yml.
После этого запуск сводится к трем командам в терминале:
# Переходим в директорию с конфигами
cd /mailu
# Скачиваем образы и запускаем сервисы в фоне
docker compose up -d
# Создаем первого администратора
docker compose exec admin flask mailu admin admin example.com 'ВашСложныйПароль'
Останется зайти в панель управления, прописать DNS-записи у своего регистратора (MX, SPF, DKIM, DMARC) и сервер готов к полноценной работе.
Подводные камни
Каким бы удобным ни был софт, физику почтовых протоколов он не отменяет. Перед развертыванием держите в голове пару моментов:
- Потребление оперативной памяти. Если включить ClamAV, серверу потребуется минимум 3-4 ГБ оперативной памяти. Антивирусные базы тяжелые. Если у вас слабая VPS с 1 ГБ RAM, антивирус придется отключить в настройках, оставив только Rspamd.
- Чистота IP-адреса. Хостинг-провайдеры часто выдают адреса с плохой историей. Перед запуском обязательно проверьте IP сервера в черных списках (DNSBL) и настройте rDNS (PTR-запись) через поддержку хостинга, иначе письма до Gmail и Outlook доходить не будут.
- Порт 25. Многие облачные провайдеры по умолчанию блокируют исходящий 25 порт для борьбы со спамерами. Убедитесь, что ваш хостер позволяет его открыть.
Кому проект пригодится
Mailu — отличный выбор для студий веб-разработки, небольших компаний и энтузиастов селфхостинга. Он закрывает 99% потребностей в корпоративной почте, не требует многочасовой ручной правки конфигов Postfix и обновляется простым docker compose pull.
Если вам надоел постоянный рост цен на сторонние почтовые сервисы для доменов или вы хотите держать переписку под полным собственным контролем, разверните демо-стенд Mailu. С большой вероятностью возвращаться к ручной сборке почтовиков вам больше не захочется.
