Справочник по установке, настройке и эксплуатации Mailcow (Пункты 1–100)
Установка и Docker
- Команда
sudo docker compose pullскачивает все необходимые Docker-образы, указанные в файлеdocker-compose.yml, без запуска контейнеров. - Команда
sudo docker compose up -dскачивает образы (если их нет), создает и запускает все контейнеры Mailcow в фоновом режиме. - Команда
sudo docker compose downостанавливает и удаляет все контейнеры и сети Mailcow, но сохраняет тома с данными. - Команда
sudo docker compose down -vполностью удаляет все контейнеры, сети и тома (включая все письма и базу данных). sudo docker compose psпоказывает статус всех контейнеров Mailcow (работает/остановлен).sudo docker compose logs --tail=200 <имя_контейнера>показывает последние 200 строк логов указанного контейнера (например,nginx-mailcow,php-fpm-mailcow).- Конфликт портов — самая частая проблема при запуске Mailcow, когда порт уже занят другим сервисом (nginx, apache).
- Ошибка
address already in useозначает, что порт, который пытается занять контейнер, уже используется другим процессом на хосте. - Для тестового запуска Mailcow можно временно остановить системный Nginx командой
sudo systemctl stop nginx. - Чтобы Nginx не запускался автоматически, используется команда
sudo systemctl disable nginx. - Статус контейнера Healthy означает, что он не просто запущен, но и успешно прошел внутренние проверки работоспособности.
- Статус Started / Running означает, что процесс контейнера запущен, но его функциональность может быть еще не готова (например, база данных инициализируется).
- Конфликт Docker-сетей возникает, когда подсеть, которую пытается создать Mailcow, уже используется другой сетью Docker.
- Ошибка
Pool overlaps with other one on this address spaceрешается изменением подсети в переменнойIPV4_NETWORKв файле.env. - Для смены подсети Mailcow нужно изменить третий октет в
IPV4_NETWORK(например, с172.22.1на172.22.2). - В качестве гарантированно свободной подсети можно использовать диапазон
10.0.0.0/24(установивIPV4_NETWORK=10.0.0). - Файл
.envв директории/opt/mailcow-dockerizedявляется основным конфигурационным файлом Mailcow. MAILCOW_HOSTNAMEв файле.env— это полное доменное имя (FQDN) вашего почтового сервера (например,mail.domain.tld).- Переменная
HTTP_PORTв.envзадает порт на хосте, который будет слушать веб-интерфейс Mailcow по HTTP. - Переменная
HTTPS_PORTв.envзадает порт на хосте для HTTPS-интерфейса Mailcow. - Если
HTTPS_PORTзакомментирован, Mailcow использует стандартный порт 443. SKIP_LETS_ENCRYPT=yв.envотключает встроенный ACME-клиент Mailcow, что необходимо при использовании внешнего прокси и Certbot.HTTP_REDIRECT=yзаставляет Mailcow принудительно перенаправлять все HTTP-запросы на HTTPS.- Переменная
ADDITIONAL_SERVER_NAMESуказывает дополнительные доменные имена, на которые должен отвечать веб-интерфейс Mailcow. TZ=Europe/Moscowзадает часовой пояс для контейнеров Mailcow.DBPASSиDBROOT— автоматически сгенерированные пароли к базе данных MySQL/MariaDB.- При изменении файла
.envнеобходимо перезапустить Mailcow:sudo docker compose down && sudo docker compose up -d.
Обратный прокси (Reverse Proxy)
- При использовании внешнего обратного прокси (например, Nginx) Mailcow должен слушать на нестандартных портах (например, 8080 и 8443).
- Внешний Nginx принимает трафик на стандартных портах 80 и 443 и перенаправляет его на внутренние порты Mailcow.
- Ключевой заголовок для Mailcow при работе за прокси:
proxy_set_header X-Forwarded-Proto https;. - Он сообщает Mailcow, что исходный запрос был по HTTPS, даже если внутри он идет по HTTP.
- Для работы с Certbot в конфиге Nginx обязательно должен быть блок
serverдля порта 80. - Certbot для проверки домена использует временную директорию
location /.well-known/acme-challenge/. - После успешного получения сертификата Certbot автоматически модифицирует конфиг Nginx, добавляя настройки SSL.
- Ошибка "if directive is not allowed here" возникает, когда Certbot добавляет неправильный редирект в конфиг Nginx.
- Правильный редирект HTTP -> HTTPS в Nginx выглядит так:
return 301 https://$host$request_uri;. - Для проксирования HTTPS-трафика внешний Nginx должен иметь свой собственный валидный SSL-сертификат (от Certbot).
- Конфиг внешнего Nginx должен быть разделен на два блока
server: для порта 80 (редирект) и для порта 443 (прокси). - В блоке для порта 443 обязательно должна быть директива
proxy_pass http://127.0.0.1:8087;(или ваш внутренний порт). - При использовании внешнего прокси встроенный HTTPS-порт Mailcow (например, 8443) остается неиспользуемым для внешнего трафика.
Решение проблем с запуском и подключением
- Ошибка "Waiting for SQL..." в логах
php-fpm-mailcowозначает, что контейнер ждет готовности базы данных MySQL. - Это нормально для первого запуска и может длиться несколько минут, пока MySQL инициализируется.
- Логи
mysql-mailcowпоказывают прогресс инициализации базы данных и момент, когда она готова к подключениям (ready for connections). - Ошибка HTTP 502 Bad Gateway от Nginx означает, что Nginx не может связаться с бэкендом (PHP-FPM).
- Самоподписанный сертификат вызывает предупреждение браузера "Недействительный сертификат" или "Ваше соединение не защищено".
- Ошибка "Циклическое перенаправление" в Firefox при доступе по HTTP возникает из-за принудительного редиректа Mailcow на HTTPS.
- Ошибка в Chrome "Этот сайт не может обеспечить безопасное подключение" возникает из-за проблем с SSL/TLS рукопожатием.
- Команда
sudo nginx -tпроверяет синтаксис конфигурационных файлов Nginx и указывает на ошибки. - Ошибка "conflicting server name" в логах Nginx означает, что одно и то же доменное имя объявлено в двух разных конфигурационных файлах.
- Ошибка "protocol options redefined" возникает, когда настройки SSL определены в нескольких блоках
serverдля одного порта. - Ошибка "duplicate extension" в mime.types означает, что одно расширение файла определено дважды и не критична.
- Для диагностики занятости порта используется команда
sudo ss -tuln | grep <порт>. - Для определения процесса, занимающего порт, используется
sudo lsof -i :<порт>. - Устаревший синтаксис
listen ... http2в Nginx рекомендуется заменить на отдельную директивуhttp2 on;. - Если после изменения портов в
.envконтейнер не запускается, нужно проверить, свободны ли эти порты. - При ручном исправлении конфига Nginx после Certbot, все настройки SSL должны быть только в блоке для порта 443.
- Доступ к веб-интерфейсу по
http://домен:8087приведет к редиректу на HTTPS и может вызвать циклическую ошибку. - Доступ по
https://домен:8443работает напрямую к Mailcow, но с предупреждением о самоподписанном сертификате. - Прямой доступ к внутренним портам Mailcow следует использовать только для отладки.
PTR, DNS и репутация
- PTR-запись связывает IP-адрес с доменным именем и критически важна для репутации почтового сервера.
- PTR-запись настраивается у хостинг-провайдера, а не в DNS-зоне домена у регистратора.
- Стандартные PTR от провайдера (например,
95-31-38-30.broadband.corbina.ru) вредят репутации почтового сервера. - Правильный PTR должен указывать на почтовый хостнейм (например,
mail.other5.nbics.net). - Для идеальной работы необходима связка FCrDNS: PTR и A-запись должны указывать друг на друга.
- Отсутствие правильного PTR — одна из главных причин попадания писем в спам.
- Проверить PTR можно командой
dig -x <IP-адрес>или на сайте mxtoolbox.com. - Если провайдер не дает настроить PTR, необходимо использовать внешний SMTP-релей или сменить хостера.
- MX-запись должна указывать на почтовый хост (например,
mail.other5.nbics.net), у которого есть A-запись. - Ошибка
{No A Record}для MX-хоста — критична. Почта не будет доставляться. - SPF-запись (TXT) определяет, какие серверы имеют право отправлять почту от имени домена.
- Проверить SPF можно на mxtoolbox.com или с помощью
dig TXT домен.tld. - Пример правильной SPF-записи:
v=spf1 mx a ip4:ВАШ_IP -all. - DKIM-запись — это цифровая подпись писем. Ключ генерируется в Mailcow и добавляется как TXT-запись.
- DMARC-запись (TXT для
_dmarc.домен.tld) определяет политику обработки писем, не прошедших SPF/DKIM. - Отсутствие DMARC-записи снижает доверие к домену и мешает внедрению BIMI.
- Отчеты mxtoolbox показывают, что ваш IP не находится в черных списках (RBL) — это хороший знак.
- Статус "Ok OK" для всех RBL означает чистую репутацию IP-адреса.
- Домашние IP-адреса (из пулов Билайна, Ростелекома) непригодны для серьезного почтового сервера из-за PTR и блокировок портов.
- IP от специализированных дата-центров (как
dedic-center.ru) имеют лучшую исходную репутацию.
Управление и функциональность
- В Mailcow по умолчанию нет самостоятельной регистрации пользователей.
- Новые почтовые ящики создаются администратором в веб-интерфейсе (Mail Setup → Mailboxes).
- Логин администратора по умолчанию:
admin, пароль:moohoo. - При первом входе необходимо сменить пароль администратора.
- Mailcow можно использовать как SMTP-сервер для внешних приложений (например, Element/Synapse).
- Для этого создается специальный почтовый ящик (например,
noreply@domain.tld), чьи данные указываются в настройках приложения. - При регистрации пользователя в стороннем сервисе, письмо подтверждения отправляется с этого спец-ящика на личную почту пользователя.
- Такие транзакционные письма не считаются спамом при правильной настройке аутентификации домена (SPF, DKIM, DMARC).
Общие вопросы и сравнения
- Установка почтового сервера — сложная задача, требующая знаний Linux, DNS и сетевых технологий.
- Настройка правильных DNS-записей (A, MX, PTR, SPF, DKIM, DMARC) — самый важный и сложный этап.
- Почтовый сервер состоит из нескольких компонентов: MTA (Postfix), MDA/IMAP (Dovecot), антиспам (Rspamd), веб-интерфейс (SOGo).
- YunoHost — это простая платформа для хостинга приложений (включая почту), идеальна для новичков.
- Mailcow — это профессиональное, мощное Docker-решение, сфокусированное только на почте.
- Помимо Mailcow и YunoHost, существуют другие open-source решения: iRedMail, Mail-in-a-Box, Modoboa.
- iRedMail — один из старейших и проверенных почтовых дистрибутивов.
- Mail-in-a-Box нацелен на максимальную простоту и автоматизацию.
- Modoboa — это гибкая панель управления для Postfix и Dovecot.
- Выбор решения зависит от опыта и целей: YunoHost для хобби, Mailcow/iRedMail для бизнеса.
- Для надежной корпоративной почты "из коробки" проще использовать Google Workspace или Microsoft 365.
- Свой сервер требует постоянного мониторинга, обновлений и борьбы со спамом.
- Самостоятельный почтовый сервер дает полный контроль над данными, но требует значительных временных затрат на поддержку.