Files
moonwell-web/docs/mail-server.md
T

5.7 KiB

Почта техподдержки

Для support@moon-well.online используется отдельный контейнер Stalwart Mail Server. Он предоставляет SMTP, IMAP, антиспам, DKIM и административный интерфейс. Данные и конфигурация хранятся в именованных Docker volumes и переживают пересоздание контейнера.

Что требуется от сервера

  • постоянный публичный IPv4-адрес;
  • возможность принимать TCP-соединения на порты 25, 465, 587, 993;
  • разрешённый исходящий TCP-порт 25;
  • PTR/rDNS для IP со значением mail.moon-well.online;
  • доступ к управлению DNS-зоной moon-well.online.

Без корректного PTR исходящие сообщения часто попадают в спам. Некоторые хостинги блокируют исходящий порт 25 — это нужно проверить до настройки.

Первый запуск

./scripts/mail-server.sh init

Проверь значения в .env.mail. Затем создай DNS-запись:

mail.moon-well.online.  A  <публичный IPv4 сервера>

Запусти сервер:

./scripts/mail-server.sh up
./scripts/mail-server.sh credentials

Административный HTTP-порт намеренно доступен только на loopback-интерфейсе. Открой туннель со своего компьютера:

ssh -L 8081:127.0.0.1:8081 <пользователь>@<сервер>

После этого открой http://127.0.0.1:8081/admin и войди с временными реквизитами из команды credentials.

Мастер Stalwart

Используй следующие значения:

  • Server hostname: mail.moon-well.online
  • Default email domain: moon-well.online
  • Automatically obtain TLS certificate: включено
  • Generate email signing keys: включено
  • Storage: локальный RocksDB
  • Directory: Internal Directory
  • Logging: Console

Если DNS размещён у поддерживаемого Stalwart провайдера, подключи его в последнем шаге. Тогда сертификат выпускается через DNS-01 без занятия публичного порта 443. Иначе понадобится отдельно передать серверу TLS-сертификат или временно предоставить ему порт 443 для ACME-проверки.

Сохрани постоянные реквизиты администратора, показанные мастером, и перезапусти контейнер:

./scripts/mail-server.sh restart

Создай обычный пользовательский аккаунт support@moon-well.online. Административный аккаунт нельзя использовать в почтовом клиенте.

DNS после мастера

В панели Stalwart открой:

Management → Domains → Domains → moon-well.online → View DNS Zone file

Перенеси предложенные записи в DNS-панель. В обязательный минимум входят:

  • MX;
  • SPF;
  • DKIM;
  • DMARC;
  • записи автоконфигурации, которые предложит Stalwart.

Значение DKIM нужно брать только из созданной установки: ключ генерируется индивидуально. Не копируй DKIM из примеров.

Настройка почтового клиента

Адрес:               support@moon-well.online
IMAP-сервер:         mail.moon-well.online
IMAP-порт:           993
Шифрование IMAP:     SSL/TLS
SMTP-сервер:         mail.moon-well.online
SMTP-порт:           465
Шифрование SMTP:     SSL/TLS
SMTP-аутентификация: включена
Логин:               support@moon-well.online

Подключение Laravel

После создания ящика укажи в production .env:

MAIL_MAILER=smtp
MAIL_SCHEME=smtps
MAIL_HOST=mail.moon-well.online
MAIL_PORT=465
MAIL_USERNAME=support@moon-well.online
MAIL_PASSWORD=<пароль ящика>
MAIL_FROM_ADDRESS=support@moon-well.online
MAIL_FROM_NAME="${APP_NAME}"

Затем сбрось и пересобери кэш конфигурации:

docker compose exec -T laravel.test php artisan optimize:clear
docker compose exec -T laravel.test php artisan config:cache

Резервное копирование

В бэкап должны попадать оба именованных volume:

  • stalwart-config;
  • stalwart-data.

Перед восстановлением используй ту же minor-версию образа Stalwart, что указана в compose.mail.yaml.

TLS на production-сервере

На production сертификат выпускает системный Certbot через Nginx. Контейнер получает read-only каталог MAIL_TLS_DIR и использует:

/run/stalwart-tls/fullchain.pem
/run/stalwart-tls/privkey.pem

Deploy-hook Certbot копирует обновлённые файлы в этот каталог и перезапускает только контейнер Stalwart, чтобы он перечитал сертификат.

Hook устанавливается из scripts/deploy-mail-certificate.sh.