Не просто «Корова»: развертывание и боевая настройка MailCow в продакшене

Прокомментировать Просмотры: 3

В предыдущей публикации мы разобрали предпосылки перехода с облачного сервиса Mail.Ru на собственный почтовый стек. Тогда мы обошли стороной техническую часть, что вызвало закономерные вопросы в комментариях. Исправляем ситуацию: ниже представлен подробный пошаговый гайд по развертыванию Mailcow со всеми практическими тонкостями.

Этот материал — сугубо прикладной мануал: никакой теории, только терминал, конфигурационные файлы и реальный опыт настройки.

P.S. В прошлый раз в комментариях шутили, будто всю инфраструктуру настраивал школьник — что ж, текущий мануал подготовлен как раз при его непосредственном участии. Оцените результат объективно 🙂

Подготовка окружения и запуск Mailcow

Авторизуемся на целевом сервере и актуализируем пакетную базу:

apt update && apt upgrade -y

Инсталлируем обязательный набор утилит согласно официальным рекомендациям:

apt install -y git openssl curl gawk coreutils grep jq

Предварительно убедитесь, что порт 25 открыт для входящих/исходящих соединений, а в системе функционируют Docker и Docker Compose.

Загружаем исходный код Mailcow:

# Клонируем репозиторий
su
umask 0022
cd /opt
git clone https://github.com/mailcow/mailcow-dockerized
cd mailcow-dockerized

Инициализируем генерацию основного конфигурационного файла:

./generate_config.sh

Скрипт запросит базовые параметры:

  1. Полное доменное имя (FQDN) почтового узла

  2. Корректный часовой пояс (Timezone)

  3. Предпочтительную ветку/версию сборки

Если требуются специфические правки, корректируем сгенерированный файл:

nano mailcow.conf

Скачиваем образы и стартуем контейнеры в фоновом режиме:

docker compose pull
docker compose up -d

После завершения инициализации открываем веб-интерфейс в браузере и переходим к форме входа администратора.

Внимание! Дефолтные учетные данные: логин — admin, пароль — moohoo.

Обязательная смена мастер-пароля

Сгенерируйте надежный пароль, обязательно сохраните его в надежном месте (иначе доступ в панель управления будет утерян) и примените изменения.

Подключение почтового домена

Переходим во вкладку E-Mail:

Нажимаем кнопку добавления нового домена:

Вводим доменное имя и задаем лимиты дискового пространства и учетных записей. Важный нюанс: параметр предельного числа ящиков ограничивает создание новых пользователей. Мы сами однажды столкнулись с этим лимитом, поэтому рекомендуем сразу закладывать достаточный запас.

Создание почтовых ящиков

Возвращаемся в раздел E-Mail:

Переходим к списку почтовых ящиков:

Кликаем по опции создания нового ящика:

Указываем имя пользователя, связываем его с нужным доменом, генерируем сложный пароль и подтверждаем создание нажатием Add.

С этого момента пользователь может войти в почтовый веб-клиент:

Конфигурация DNS-записей

Корректность DNS — ключевой фактор доставляемости почты. Требуется настроить базовый комплект: A, MX, SPF, DKIM и DMARC.

Тип записи

Значение

Назначение

A

mail.mycompany.ru → IP сервера (к примеру, 85.255.xxx.xxx)

Привязывает хостнейм почтового узла к его публичному IP-адресу.

MX

@ → mail.mycompany.ru (приоритет: 10)

Определяет маршрутизацию входящей корреспонденции для доменной зоны.

SPF (TXT)

v=spf1 mx -all

Авторизует отправку исключительно с хостов из MX-записи, блокируя попытки спуфинга от имени домена.

DKIM (TXT)

Имя: dkim._domainkey
Значение: ключ из панели Mailcow

Обеспечивает цифровую подпись исходящих сообщений, подтверждая неизменность содержимого при транзите.

DMARC (TXT)

Имя: _dmarc
Значение: v=DMARC1; p=quarantine; rua=mailto:dmarc@mycompany.ru

Задает политику обработки писем при сбое SPF/DKIM (в данном случае отправка в карантин/спам) и адрес агрегации отчетов (rua).

Приведенная конфигурация является базовой и может адаптироваться под индивидуальные требования безопасности.

Указанные ресурсные записи прописываются в панели управления DNS вашего регистратора или DNS-провайдера.

Критически важна и PTR-запись (обратная зона DNS, сопоставляющая IP-адрес с доменным именем). Почтовые серверы проверяют соответствие PTR и HELO/EHLO имени. При несовпадении корреспонденция отсеивается спам-фильтрами. Настройка PTR осуществляется в панели управления хостинг-провайдера (для VPS/Dedicated) либо через обращение к вашему ISP.

Для бесшовной интеграции почтовых клиентов (Outlook, Thunderbird, мобильных приложений) полезно добавить записи автоматического обнаружения настроек:

Тип записи

Значение

Назначение

autoconfig (CNAME)

autoconfig → mail.mycompany.ru

Применяется клиентами Thunderbird и совместимым ПО через эндпоинт http://autoconfig.ваш-домен.ru/config-v1.1.xml.

autodiscover (CNAME)

autodiscover → mail.mycompany.ru

Используется экосистемой Microsoft Outlook с обращением к https://autodiscover.ваш-домен.ru/autodiscover/autodiscover.xml.

Верификация и диагностика

Mail-Tester

Для комплексного анализа качества отправки рекомендуем сервис Mail-Tester. Скопируйте предоставленный временный адрес, отправьте на него тестовое письмо из нового ящика и нажмите Then check your score:

Система оценит валидность подписей, заголовков и выставит итоговый балл (в идеале — 10/10):

DNS Checker

Для контроля распространения DNS-записей по миру используем DNS Checker. Вводим FQDN, запускаем Search и смотрим статус резолва по регионам:

Проверка по спам-базам (DNSBL)

Проверяем чистоту IP-адреса через сервис DNSBL Information. Указываем IP, нажимаем CHECK THIS IP и убеждаемся в отсутствии адреса в глобальных блеклистах:

Автоматизация развертывания через GitLab CI

Для устранения рутины и жесткой привязки к железу организуем автоматический деплой через CI/CD конвейер:

  • Импортируем репозиторий Mailcow в собственный инстанс GitLab.

  • Создаем конфигурацию .gitlab-ci.yml.

    В меню Settings → CI/CD → Variables определяем переменные:

    • CI_MAILCOW_HOSTNAME

    • CI_DBPASS — Masked, Protected

    • CI_DBROOT — Masked, Protected

    • CI_REDISPASS — Masked, Protected

    • CI_TZ

    • CI_SOGO_URL_ENCRYPTION_KEY — Masked, Protected (ровно 16 буквенно-цифровых символов)

    variables:
    # Переменные для mailcow
    MAILCOW_HOSTNAME: ${CI_MAILCOW_HOSTNAME}
    DBPASS: ${CI_DBPASS}
    DBROOT: ${CI_DBROOT}
    REDISPASS: ${CI_REDISPASS}
    TZ: ${CI_TZ}
    SOGO_URL_ENCRYPTION_KEY: ${CI_SOGO_URL_ENCRYPTION_KEY}
    IPV6_BOOL: "false"
    SKIP_CLAMD: "n"
    SKIP_LETS_ENCRYPT: "n"
    USE_WATCHDOG: "y"

    Конфигурация стадии деплоя:

    deploy_manual-mailcow:
    stage: deploy_manual
    extends: .deploy_manual
    before_script:
    # Логинимся в GitLab registry
    - docker login {ВАШ РЕГИСТРИ} -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD}

    # Создаем директорию
    - mkdir -p ~/projects

    # Копируем измененные файлы
    - cp -ru ${CI_PROJECT_DIR} ~/projects

    # Переходим в директорию проекта
    - cd ~/projects/${CI_PROJECT_NAME}

    # Останавливаем запущенный проект
    - docker compose -f docker-compose-${COMPOSE_OVERRIDE_FILE}.yml down
    # Создаем симлинк и генерируем конфиг
    - rm -f .env
    - ln -s mailcow.conf .env
    - chmod +x generate_config_without_user_input.sh
    - ./generate_config_without_user_input.sh

Скрытый текст

Благодарим за внимание!
Больше практических кейсов и материалов об IT-инфраструктуре: SaaSoft в Telegram ||| Наш сайт SaaSoft

 

Источник

Поделиться:

Похожие статьи

Поиск по играм, новостям и статьям…

Введите не менее двух символов

Введите не менее двух символов