Пошаговая инструкция · Самостоятельная установка
Как установить Mailu на сервер и настроить почту домена
Пошаговая инструкция для самостоятельной установки. Установим Mailu на Ubuntu 26.04 через официальный генератор: объясним DNS и поля формы, проверим ящик, доставку писем и полную копию данных.
Что нужно для собственного почтового сервера #
Развернём Mailu на отдельной Ubuntu Server 26.04 LTS с Docker Engine и Compose. Понадобятся постоянный публичный IP, домен example.com и имя почтового сервера mail.example.com. Заменяйте эти имена и адрес 203.0.113.10 своим доменом и IP. Команды выполняйте в SSH-терминале сервера, панели провайдера и DNS открывайте в браузере своего компьютера.
До установки получите подтверждение провайдера, что TCP 25 разрешён в обе стороны и можно задать PTR — обратную DNS-запись для IP. Для почты важно не только входящее соединение: сервер должен отправлять письма другим почтовым серверам. Если провайдер запрещает это, сначала решите вопрос с ним.
Пройдите подготовку Ubuntu только до Docker/Compose: дополнительный Nginx на хосте не устанавливайте. Веб-интерфейс обслуживает встроенный контейнер Nginx, сертификатом управляет Mailu. Подбор сервера объясняет расход памяти и диска на почту. До смены MX рабочего домена сохраните прежнюю почту и подготовьте её перенос.
Если домен уже получает рабочую почту, сначала проверяйте установку на отдельном тестовом домене. Не переключайте его действующий MX раньше готовности ящиков. Ниже предполагается новый домен. IPv6 не включайте и AAAA не создавайте, если не настроены его связность и PTR.
Используем Mailu stable 2024.06. В генераторе выбирайте этот выпуск: вариант master относится к разработке, его состав может отличаться от инструкции.
Шаг 1. Подготовьте команды для проверки домена #
После общей подготовки Ubuntu добавим инструменты этой статьи. dnsutils содержит dig, который показывает DNS-записи; openssl понадобится секретам и проверке TLS, nano — редактированию файлов. Обновление списка пакетов ещё ничего не устанавливает, следующая команда устанавливает инструменты. Затем убедимся, что Docker и Compose доступны вашему пользователю.
sudo apt update
sudo apt install -y openssl dnsutils nano
docker version
docker compose versionУстановка завершилась без ошибки; docker version показывает Server, а compose version — версию плагина. При отказе в доступе к Docker вернитесь к шагу добавления пользователя в группу docker в подготовке Ubuntu, заново войдите по SSH и повторите проверку.
Шаг 2. Проверьте IP на интерфейсе и занятые порты #
Mailu в этом сценарии привязывается к публичному IPv4, который действительно назначен сетевому интерфейсу. Адрес нужен для поля IPv4 listen address в генераторе. Посмотрите его и службы, занимающие сетевые порты.
ip -br address
sudo ss -lntupПубличный IP должен присутствовать в списке интерфейсов. Порты 25/80/443/465/993 должны быть свободны от чужих служб. Если сервер за NAT и публичного IP на интерфейсе нет, сначала выберите поддерживаемую сетевую схему; не подставляйте 0.0.0.0 наугад.
Шаг 3. Создайте записи имени и входящей почты #
В DNS-панели создайте A mail.example.com с IP сервера. Затем для нового почтового домена example.com добавьте MX с приоритетом 10 на mail.example.com. A связывает имя с адресом, MX сообщает отправителям сервер доставки. Отключите HTTP-проксирование почтового имени.
dig +short A mail.example.com
dig +short MX example.comОжидаются ваш IP и 10 mail.example.com.. Если рабочий домен уже получает почту, пока создайте только A, а смену MX отложите до окончания испытаний.
Шаг 4. Задайте обратное имя IP #
В панели провайдера задайте PTR вашего IPv4 на mail.example.com. Замените адрес в команде настоящим. PTR помогает другим серверам проверить, какое имя соответствует адресу отправителя.
dig +short -x 203.0.113.10Ответ должен быть mail.example.com., а его A должен возвращать тот же IP. Если PTR нельзя задать, решите этот вопрос до отправки рабочих писем.
Шаг 5. Подготовьте SPF и DMARC #
В DNS-панели добавьте одну SPF-запись для example.com: v=spf1 mx -all, если домен отправляет только через Mailu. При внешней CRM/рассылках объедините все разрешённые источники. Для _dmarc.example.com добавьте v=DMARC1; p=none; rua=mailto:postmaster@example.com. SPF перечисляет отправителей, DMARC собирает результаты их проверки; пока используем мягкий режим.
dig +short TXT example.com
dig +short TXT _dmarc.example.comДолжна быть ровно одна SPF-запись и ваш DMARC с p=none. Ключ DKIM для подписи письма возьмём из панели после запуска. Строгую политику не включайте до успешных тестов.
Шаг 6. Создайте каталог постоянных данных #
Весь комплект и его данные будем хранить под /mailu. Владельцем каталога станет ваш пользователь, чтобы вы могли сохранить файлы генератора. Контейнерные команды ниже запускаем через sudo.
sudo install -d -m 750 -o "$USER" -g "$(id -gn)" /mailu
cd /mailuДалее выполняйте Compose из /mailu. В новом SSH-сеансе сначала вернитесь командой cd /mailu.
Шаг 7. Заполните основные поля генератора #
В браузере своего компьютера откройте официальный генератор. Выберите stable 2024.06. В начальном разделе задайте Mailu storage path=/mailu, Main mail domain=example.com, Postmaster local part=postmaster. Для TLS certificates выберите letsencrypt — автоматическое получение сертификата.
Имена заменены вашими, путь совпадает с созданным каталогом. Не выбирайте notls: рабочие пароли должны передаваться по защищённому соединению.
Шаг 8. Выберите нужные компоненты #
Включите Enable the admin UI и Web email client, например Roundcube. Оставьте рекомендуемый антиспам и внутренний DNS resolver. Антивирус включайте, если выделили для него память по требованиям: он загружает большую базу сигнатур. Не добавляйте необязательные службы ради первого запуска.
Проверьте, что административная панель и webmail включены. Сохраните список выбранных компонентов: он определяет сервисы и объём резервной копии.
Шаг 9. Задайте сетевые адреса генератора #
В разделе expose Mailu to the world укажите IPv4 listen address — публичный IPv4 из шага 1. Не выбирайте 0.0.0.0. Подсеть Docker не должна пересекаться с сетями сервера или VPN. IPv6 оставьте выключенным, если он не подготовлен. В Public hostnames укажите mail.example.com; это имя должно разрешаться в выбранный адрес.
Сравните bind IP с ip -br address, hostname с A/PTR. Разрешите у провайдера 25/TCP, 80/443, 465 и 993. Порт 587 включайте в Mailu и открывайте отдельно, если нужен STARTTLS.
Шаг 10. Скачайте два файла своей конфигурации #
После завершения формы генератор покажет docker-compose.yml и mailu.env и команды их загрузки. Выполните именно показанные им команды в SSH-терминале из /mailu. Можно скачать файлы в браузере и передать через SFTP, сохранив исходные имена. Чужой готовый Compose не отражает выбранные вами адреса и функции.
ls -l /mailu/docker-compose.yml /mailu/mailu.envОба файла должны существовать и иметь ненулевой размер. Проверьте, что постоянные mounts в Compose находятся под /mailu; внешняя база потребует собственной копии.
Шаг 11. Получите ключ и пароль администратора #
openssl создаёт случайные значения. Первая строка будет SECRET_KEY, вторая — паролем первого администратора. Сохраните их с подписями в менеджере паролей.
openssl rand -hex 16
openssl rand -hex 24Получены две разные строки. SECRET_KEY сохраняйте между перезапусками и включайте в копию, не заменяйте его при обычном обновлении.
Шаг 12. Запишите домен и первого администратора #
Откройте nano mailu.env. Измените существующие строки из примера и добавьте INITIAL_ADMIN_* при их отсутствии. Секреты замените своими из предыдущего шага. INITIAL_ADMIN_MODE=ifmissing создаёт администратора только при его отсутствии. Сохраните Ctrl+O, Enter, Ctrl+X. Не заменяйте весь сгенерированный файл этим фрагментом.
DOMAIN=example.com
HOSTNAMES=mail.example.com
POSTMASTER=postmaster
TLS_FLAVOR=letsencrypt
SECRET_KEY=ВСТАВЬТЕ_ПЕРВЫЙ_СЕКРЕТ
INITIAL_ADMIN_ACCOUNT=admin
INITIAL_ADMIN_DOMAIN=example.com
INITIAL_ADMIN_PW=ВСТАВЬТЕ_ВТОРОЙ_СЕКРЕТ
INITIAL_ADMIN_MODE=ifmissingВ файле не должно быть шаблонных паролей или дубликатов параметров. Hostnames должны совпадать с DNS и именем сертификата.
Шаг 13. Проверьте файлы и закройте секреты #
Ограничим доступ к mailu.env и проверим, что Compose может прочитать конфигурацию. При --quiet подставленные пароли не выводятся.
sudo chmod 600 mailu.env
sudo docker compose config --quietПри успехе ошибки и вывод отсутствуют. Ошибку файла, переменной или отступа исправьте до запуска.
Шаг 14. Загрузите выбранные образы #
Скачаем все компоненты stable 2024.06, которые включены в вашей конфигурации. Это ещё не запуск служб.
sudo docker compose pullКаждый образ должен загрузиться успешно. При ошибке доступа к ghcr.io проверьте сеть и повторите загрузку после исправления.
Шаг 15. Запустите Mailu #
Compose включит службы в фоне. Первый запуск и получение сертификата могут занять время. После запуска посмотрите sudo docker compose ps и при необходимости sudo docker compose logs --tail=100 front admin.
sudo docker compose up -dНе должно быть постоянных перезапусков. Если сертификат не выпущен, проверьте A/AAAA всех HOSTNAMES и входящий порт 80. Не обходите ошибку отключением TLS.
Шаг 16. Войдите администратором #
Откройте в браузере https://mail.example.com/admin. Используйте admin@example.com и INITIAL_ADMIN_PW, которые задали сами. Проверьте защищённое соединение и доступ к почтовому домену. Администратора не используйте как общий аккаунт всей команды.
Вход должен работать без предупреждения сертификата. Сохраните данные администратора и отдельно проверьте повторный вход.
Шаг 17. Создайте тестовый и служебные ящики #
В панели создайте test@example.com с отдельным паролем и квотой. Обязательно создайте postmaster@example.com либо алиас на обслуживаемый ящик: адрес нужен настройке POSTMASTER и отчётам. Добавьте abuse для сообщений о проблемах. Алиас передаёт почту на уже существующий ящик.
Войдите в выбранный webmail с полным адресом test@example.com и паролем ящика. Пароль панели администратора не является паролем обычного ящика.
Шаг 18. Опубликуйте подпись домена #
В панели домена получите DKIM и точные DNS-записи. Добавьте выданный TXT с правильным selector в DNS. DKIM подписывает исходящие письма, чтобы получатель мог проверить домен. Если панель предлагает SPF, согласуйте его с уже действующей записью, не создавая второй.
После применения DNS ключ должен быть доступен под указанным именем. Не копируйте ключ из чужой установки и не публикуйте приватную часть ключа.
Шаг 19. Проверьте почту из внешнего ящика и клиента #
Отправьте письмо с внешнего адреса на test@example.com и ответьте через webmail. Повторите с адресом другого почтового оператора. В заголовках полученного ответа проверьте SPF, DKIM и DMARC: ожидается успешная проверка.
Подключите обычный клиент: IMAP mail.example.com:993 с TLS и SMTP mail.example.com:465 с TLS. Используйте полный email и пароль ящика. Для 587 нужен отдельно включённый порт и STARTTLS. Проверьте небольшое вложение и доверие к сертификату.
Письма должны реально приходить в обе стороны, вложение — открываться. При ошибке смотрите sudo docker compose logs --since=15m front smtp imap antispam. Не расширяйте RELAYNETS на весь интернет: это позволит посторонним отправлять почту через вас.
Шаг 20. Остановите службы и сохраните весь каталог #
Предупредите пользователей о коротком перерыве. Архив /mailu сохранит письма, базы, настройки, DKIM, сертификаты и webmail. Здесь сохраняем весь каталог, поскольку все постоянные данные выбрали внутри него. Если добавлена внешняя база, её нужно копировать отдельно. При ошибке сразу выполните sudo docker compose start.
sudo install -d -m 700 /var/backups/mailu
sudo docker compose stop
sudo tar -czpf /var/backups/mailu/mailu-$(date +%F-%H%M).tar.gz -C / mailutar должен завершиться без ошибки. Архив включает секреты и письма; не размещайте его в публичной папке сайта.
Шаг 21. Верните почту и проверьте копию #
Ограничим чтение архивов, снова запустим службы и посмотрим созданный файл. После этого перенесите архив через SFTP в закрытое хранилище вне сервера.
sudo chmod 600 /var/backups/mailu/*.tar.gz
sudo docker compose start
sudo ls -lh /var/backups/mailuПроверьте вход в webmail, прежнее письмо и ненулевой размер архива. Ошибку копирования нельзя оставлять с остановленным сервером.
Восстановление и обслуживание #
На отдельной машине с теми же версиями верните /mailu из архива с сохранением владельцев и прав. До запуска ограничьте вход и исходящую отправку, исправьте bind IP и имена тестовой среды. Проверьте старый ящик, пароль, письмо и вложение. Возврат одного каталога писем без базы пользователей не восстанавливает Mailu полностью.
Назначьте регулярные копии и контроль ошибок. Перед обновлением сохраните свежий комплект и прочитайте release notes выбранной stable-ветки. Получите её Compose через генератор, сравните mounts и перенесите собственные параметры. Простое переключение тегов не гарантирует откат после изменения баз.
Рабочий MX переключайте после проверки всех пользователей, доставки и переноса прежних писем. Учитывайте время DNS-кешей и сохраняйте старый сервер до завершения переноса. Если публичного IP нет на интерфейсе, не пытайтесь исправить это широкими доверенными сетями: выберите документированный сетевой сценарий.