Mail Server на Docker за 10 минут

ARTICLES 28.06.22 28.06.22 223
Бесплатные курсына главную сниппетов

Предисловие

В Интернетах много разных очень крутых сервисов, которые позволяют сделать свой почтовый сервис с собственными адресами. Однако, захотелось приключений и появилась тяга к созданию чего-нибудь своего. Зачем что-то делать просто, если можно причудливо?

Предпосылки, что и зачем описал тут: статья

Постановка задачи

Захотелось сделать собственный почтовый сервис, чтобы письма отправлял/получал, рассылки делал и интегрировался с другими сервисами (чтобы клубная платформа Vas3k могла отправлять письма). Плюс имел бы веб-интерфейс для администрирования.

Описание проекта

В GitHub создал проект, с помощью которого можно создать собственный почтовый сервис за 10 минут, используя Docker. Посмотреть все исходники можно тут: MyDockerMailserver

Что же оно умеет:

Приступим к настройке

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

Необходимые средства для развертывания почтового сервиса:

В статье предполагается, что почтовый сервис будет доступен по адресу https://mail.domain.my. При этом, на основном адресе будет развернут основной веб-сайт.

Автор использует обратный прокси jwilder/nginx-proxy для маршрутизации запросов туды-сюды по тому или иному адресу.

ШАГ 0

Почтовый сервер должен отправлять почту. А это позволено лишь не всем, а не каким-то там спамерам. По умолчанию, свой почтовый сервер не сможет отправлять сообщения популярным почтовым серверам.

Чтобы обойти это недоразумение есть разные способы (наверное). Простой способ - это использовать Relay сервис по отправке сообщений. Автор остановился на сервисе SendInBlue, который на момент написания этих строк по бесплатному тарифу предлагает отправку 300 сообщений в день.

https://www.sendinblue.com

Настройка SendInBlue не должно быть какой-то проблемой. Важно это сделать для вашего домена. В итоге, на странице https://account.sendinblue.com/advanced/api будут доступным необходимые данные для настройки RelayHost.

Вот тута, в целом, написано неплохо: как настраивать SendInBlue.

ШАГ 1

Подключаемся на сервер через SSH любым удобным доступным способом.

На сервере нужен какой-нибудь редактор текстовых файликов. Т.к. автор не смог выйти из VIM, то он использует Nano.

ШАГ 2

mkdir mailserver
    cd mailserver
git clone https://github.com/TopTuK/docker-mailserver.git

ШАГ 3

cp .env.dist .env
    nano .env

Если будем использовать RelayHost, то обязательно указываем соответствующие поля. Иначе, оставляем пустым. В целом, название переменных говорят сами за себя.

MYSQL_DATABASE=mailserver # Название mysql базы. Оставляем как есть
    MYSQL_USER=mailserver # Имя пользователя. Оставляем как есть
    MYSQL_PASSWORD=changeme # Пароль от базы. Меняем на свой
    MYSQL_ROOT_PASSWORD=changeme # Пароль от базы. Меняем на свой
    MAILNAME=mail.domain.my # Меняем на свой домен, где доступен mailserver
    POSTMASTER=postmaster@domain.my # Меням постмастера
    RELAYHOST= # указываем relayhost. Если используется sendinblue, то '[smtp-relay.sendinblue.com]:587'
    RELAY_PASSWD_KEY= # В случае sendinblue, то будет что-то вида 'user@domain.my:QQQYYYZZZ'
    RELAY_OPTIONS=noanonymous # Для работы Relayhost
    HEADER_SIZE_LIMIT=4096000 # Для работы Relayhost
    FILTER_MIME=false
    FILTER_VIRUS=true
    ENABLE_IMAP=true
    ENABLE_POP3=true
    ENABLE_FTS=true
    CONTROLLER_PASSWORD=changeme # Меняем на свой для доступа в RSPADM
    WAITSTART_TIMEOUT=2m
    RECIPIENT_DELIMITER=-
    FTS_ARGS="partial=3 full=20 verbose=0 lowmemory=256"
    FTS_VSZ_LIMIT=256M

ШАГ 4

Настраиваем использование своих SSL сертификатов

Примечание: я сделал путем копирования содержимого файлов сертификатов, т.е. через Ctrl-C -> Ctrl-V. Название файлов с сертификатами может быть произвольным.

rm domain.*
    touch mail.domain.my.crt
    touch mail.domain.my.key
    # Копируем содержимое сертификатов в созданные файлики. Например, через nano
    cd ..

ШАГ 5

Конфигурируем файлы docker-compose.*

# Либо комментируем, либо удаляем
    # ssl:
    # image: jeboehm/mailserver-ssl:latest
    # build: ./ssl
    # env_file: .env
    # volumes:
    # - data-tls:/media/tls:rw
...
    # - data-tls:/media/tls:ro
    # Uncomment lines below and change left part for using your own certificates
    - ./certs/mail.domain.my.crt:/media/tls/mailserver.crt:ro
    - ./certs/mail.domain.my.key:/media/tls/mailserver.key:ro
    ...
...
    # For use with jwilder/nginx-proxy. Uncomment this if you are using jwilder/nginx-proxy
    environment:
    - VIRTUAL_HOST=mail.domain.my
    ...
...
    volumes:
    data-db:
    data-dkim:
    ...
    # Comment line below if you are using your own certificates
    # data-tls:
    data-filter:
    ...
    ...

ШАГ 6

На данном шаге требуется сделать последние шаги перед запуском почтового сервиса. Сконфигурировать production параметры. Редактируем параметры docker-compose.production.yml

...
    # Remove this block if you are using jwilder/nginx-proxy reverse proxy
    # web:
    # ports:
    # - "0.0.0.0:81:80"
    ...
...
    # Uncomment next block if you use jwilder/nginx-proxy reverse proxy
    networks:
    default:
    # Set your network name
    name: mynetwork
    ...

ШАГ 7

Конфигурирование сделано. Настало время запустить почтовый сервис и убедиться, что все работает.

./bin/production.sh pull
    ./bin/production.sh build
    ./bin/production.sh up -d

ШАГ 8

На этом шаге требуется создать первого пользователя администратора

Выполняем команду ниже, а потом отвечаем на простые вопросы, следуя инструкции.

./bin/production.sh run --rm web setup.sh

ШАГ 9: Оно работает!

В результате выполнения всех шагов выше все сервисы должны заработать в PROD.

Заключение

Вот так, с помощью нехитрых приобщений можно превратить буханку черного (или белого) хлеба в троллейбус построить свой почтовый сервер буквально за 5-10 минуты имея манипулятор типа мышь и клавиатуру.

 

на главную сниппетов
Курсы