Установка animails и Mailman 3 на базе docker-версий¶
Информация
Данное руководство является копией репозитория dockerized-animails-mailman. Пожалуйста, публикуйте сообщения о проблемах, вопросы и предложения по улучшению в трекере задач этого репозитория.
Внимание
animails не несет ответственности за любую потерю данных, повреждение оборудования или сломанные клавиатуры. Данное руководство предоставляется без каких-либо гарантий. Сделайте резервные копии перед началом, потому что: Нет бэкапа — нет пощады!
Введение¶
Цель данного руководства — установить и настроить animails совместно с docker-mailman, а также предоставить полезные скрипты. Важным условием является сохранение animails и Mailman в виде отдельных инсталляций для возможности их независимого обновления.
В интернете существуют и другие руководства, но они либо устарели, либо содержат неполную документацию/конфигурацию. Данное руководство основано на работах:
После выполнения инструкций будут запущены animails и docker-mailman, а Apache в качестве обратного прокси-сервера будет обслуживать веб-интерфейсы.
Используемая операционная система — Ubuntu 20.04 LTS.
Установка¶
Руководство разделено на следующие этапы:
- Настройка DNS
- Установка Apache в качестве обратного прокси
- Получение SSL-сертификатов через Let's Encrypt
- Установка animails с интеграцией Mailman
- Установка Mailman
- 🏃 Запуск
Настройка DNS¶
# Name Type Value
lists IN A 1.2.3.4
lists IN AAAA dead:beef
Установка Apache в качестве обратного прокси¶
Установите Apache, например, используя руководство от Digital Ocean: How To Install the Apache Web Server on Ubuntu 20.04.
Активируйте необходимые модули Apache (от имени root или через sudo):
a2enmod rewrite proxy proxy_http headers ssl wsgi proxy_uwsgi http2
Возможно, для работы этих модулей потребуется установить дополнительные пакеты. Вам может помочь этот PPA от Ondřej Surý.
Конфигурация vHost¶
Скопируйте файлы animails.conf и mailman.conf в папку конфигураций Apache sites-available (например, в /etc/apache2/sites-available).
В файле animails.conf измените:
MAILCOW_HOSTNAMEна ваш MAILCOW_HOSTNAME
В файле mailman.conf измените:
MAILMAN_DOMAINна ваш домен Mailman (например,lists.example.org)
Не активируйте конфигурацию сейчас, так как SSL-сертификаты и директории еще отсутствуют.
Получение SSL-сертификатов через Let's Encrypt¶
Проверьте, доступна ли ваша DNS-конфигурация в интернете и указывает ли она на правильные IP-адреса, например, с помощью MXToolBox:
- https://mxtoolbox.com/SuperTool.aspx?action=a%3aMAILCOW_HOSTNAME
- https://mxtoolbox.com/SuperTool.aspx?action=aaaa%3aMAILCOW_HOSTNAME
- https://mxtoolbox.com/SuperTool.aspx?action=a%3aMAILMAN_DOMAIN
- https://mxtoolbox.com/SuperTool.aspx?action=aaaa%3aMAILMAN_DOMAIN
Установите certbot (от имени root или через sudo):
apt install certbot
Получите нужные сертификаты (от имени root или через sudo):
certbot certonly -d MAILCOW_HOSTNAME
certbot certonly -d MAILMAN_DOMAIN
Установка animails с интеграцией Mailman¶
Установка animails¶
Следуйте [инструкции по установке animails]../../getstarted/install.ru.md). Пропустите шаг «Запуск animails» и не выполняйте команды pull и up!
Настройка animails¶
Выполните шаг Инициализация animails из официальной документации и отредактируйте конфигурацию с помощью nano animails.conf, изменив следующие переменные:
HTTP_PORT=18080 # не используйте 8080, так как он нужен mailman
HTTP_BIND=127.0.0.1 #
HTTPS_PORT=18443 # можно использовать 8443
HTTPS_BIND=127.0.0.1 #
SKIP_LETS_ENCRYPT=y # SSL-терминацию выполнит обратный прокси
SNAT_TO_SOURCE=1.2.3.4 # замените на ваш IPv4
SNAT6_TO_SOURCE=dead:beef # замените на ваш глобальный IPv6
Добавление интеграции с Mailman¶
Создайте файл /opt/animails/docker-compose.override.yml (например, через nano) и добавьте следующие строки:
services:
postfix-animails:
volumes:
- /opt/mailman/core/var/data/:/opt/mailman/core/var/data/
networks:
- docker-mailman_mailman
networks:
docker-mailman_mailman:
external: true
Создайте файл /opt/animails/data/conf/postfix/extra.cf (например, через nano) и добавьте следующие строки:
# mailman
recipient_delimiter = +
unknown_local_recipient_reject_code = 550
owner_request_special = no
local_recipient_maps =
regexp:/opt/mailman/core/var/data/postfix_lmtp,
proxy:unix:passwd.byname,
$alias_maps
virtual_mailbox_maps =
proxy:mysql:/opt/postfix/conf/sql/mysql_virtual_mailbox_maps.cf,
regexp:/opt/mailman/core/var/data/postfix_lmtp
transport_maps =
pcre:/opt/postfix/conf/custom_transport.pcre,
pcre:/opt/postfix/conf/local_transport,
proxy:mysql:/opt/postfix/conf/sql/mysql_relay_ne.cf,
proxy:mysql:/opt/postfix/conf/sql/mysql_transport_maps.cf,
regexp:/opt/mailman/core/var/data/postfix_lmtp
relay_domains =
proxy:mysql:/opt/postfix/conf/sql/mysql_virtual_relay_domain_maps.cf,
regexp:/opt/mailman/core/var/data/postfix_domains
relay_recipient_maps =
proxy:mysql:/opt/postfix/conf/sql/mysql_relay_recipient_maps.cf,
regexp:/opt/mailman/core/var/data/postfix_lmtp
SSL-сертификаты¶
Поскольку мы проксируем animails, нам нужно скопировать SSL-сертификаты в файловую структуру animails. Эту задачу выполнит скрипт renew-ssl.sh:
- Скопируйте файл в
/opt/animails - Измените animails_HOSTNAME на ваш хостнейм animails
- Сделайте его исполняемым (
chmod a+x renew-ssl.sh) - Пока не запускайте его, так как сначала нужен Mailman
Вам нужно создать задачу в cron, чтобы новые сертификаты копировались автоматически. Выполните от имени root или через sudo:
crontab -e
Чтобы запускать скрипт каждый день в 5 утра, добавьте:
0 5 * * * /opt/animails/renew-ssl.sh
Установка Mailman¶
В целом следуйте инструкциям docker-mailman. Поскольку их много, ниже приведено краткое изложение действий:
От имени root или через sudo:
cd /opt
mkdir -p mailman/core
mkdir -p mailman/web
git clone https://github.com/maxking/docker-mailman
cd docker-mailman
Настройка Mailman¶
Создайте длинный ключ для Hyperkitty, например, командой cat /dev/urandom | tr -dc a-zA-Z0-9 | head -c30; echo. Сохраните его как HYPERKITTY_KEY.
Создайте длинный пароль для базы данных, например, командой cat /dev/urandom | tr -dc a-zA-Z0-9 | head -c30; echo. Сохраните его как DBPASS.
Создайте длинный ключ для Django, например, командой cat /dev/urandom | tr -dc a-zA-Z0-9 | head -c30; echo. Сохраните его как DJANGO_KEY.
Создайте файл /opt/docker-mailman/docker-compose.override.yaml и замените HYPERKITTY_KEY, DBPASS и DJANGO_KEY на сгенерированные значения:
services:
mailman-core:
environment:
- DATABASE_URL=postgresql://mailman:DBPASS@database/mailmandb
- HYPERKITTY_API_KEY=HYPERKITTY_KEY
- TZ=Europe/Berlin
- MTA=postfix
restart: always
networks:
- mailman
mailman-web:
environment:
- DATABASE_URL=postgresql://mailman:DBPASS@database/mailmandb
- HYPERKITTY_API_KEY=HYPERKITTY_KEY
- TZ=Europe/Berlin
- SECRET_KEY=DJANGO_KEY
- SERVE_FROM_DOMAIN=MAILMAN_DOMAIN # например, lists.example.org
- MAILMAN_ADMIN_USER=admin # имя администратора
- MAILMAN_ADMIN_EMAIL=admin@example.org # email администратора
- UWSGI_STATIC_MAP=/static=/opt/mailman-web-data/static
restart: always
database:
environment:
- POSTGRES_PASSWORD=DBPASS
restart: always
В блоке mailman-web укажите корректные значения для SERVE_FROM_DOMAIN (например, lists.example.org), MAILMAN_ADMIN_USER и MAILMAN_ADMIN_EMAIL. Вам понадобятся данные администратора для входа в веб-интерфейс (Postorius). Для установки пароля в первый раз воспользуйтесь функцией «Забыли пароль» (Forgot password) в веб-интерфейсе.
О других параметрах конфигурации читайте в документации Mailman-web и Mailman-core.
Настройка Mailman core и Mailman web¶
Создайте файл /opt/mailman/core/mailman-extra.cfg со следующим содержимым. Адрес mailman@example.org должен указывать на действующий почтовый ящик или перенаправление.
[mailman]
default_language: de
site_owner: mailman@example.org
Создайте файл /opt/mailman/web/settings_local.py со следующим содержимым.
# locale
LANGUAGE_CODE = 'ru-ru'
# disable social authentication
MAILMAN_WEB_SOCIAL_AUTH = []
# change it
DEFAULT_FROM_EMAIL = 'mailman@example.org'
DEBUG = False
Вы можете изменить LANGUAGE_CODE и SOCIALACCOUNT_PROVIDERS в соответствии со своими потребностями.
🏃 Запуск¶
Выполните (от имени root или через sudo):
a2ensite animails.conf
a2ensite mailman.conf
systemctl restart apache2
cd /opt/docker-mailman
docker compose pull
docker compose up -d
cd /opt/animails/
docker compose pull
./renew-ssl.sh
a2ensite animails.conf
a2ensite mailman.conf
systemctl restart apache2
cd /opt/docker-mailman
docker-compose pull
docker-compose up -d
cd /opt/animails/
docker-compose pull
./renew-ssl.sh
Подождите несколько минут! Контейнерам нужно время для создания баз данных и конфигурационных файлов. Это может занять от 1 минуты и более.
Примечания¶
Новые списки не распознаются postfix мгновенно¶
При создании нового списка и попытке немедленно отправить письмо postfix может ответить User doesn't exist, так как он еще не знает о необходимости доставки письма в Mailman. Конфигурация в /opt/mailman/core/var/data/postfix_lmtp обновляется не мгновенно. Если список нужен немедленно, перезапустите postfix вручную:
cd /opt/animails
docker compose restart postfix-animails
cd /opt/animails
docker-compose restart postfix-animails
Обновление¶
Для Mailman просто получите последнюю версию из репозитория GitHub.
Резервное копирование¶
У animails есть собственный скрипт резервного копирования. [Ознакомьтесь с документацией]../../backup_restore/b_n_r-backup.ru.md) для получения дополнительной информации.
Mailman не содержит инструкций по резервному копированию в файле README.md. В репозитории GitBucket пользователя pgollor есть скрипт, который может быть полезен.
В README.md Mailman инструкции по бэкапу отсутствуют. В gitbucket от pgollor есть скрипт, который может быть полезен.
Список задач (ToDo)¶
Скрипт установки¶
Написать скрипт, подобный mailman-animails-integration/mailman-install.sh, так как многие шаги можно автоматизировать.
- Запрашивать все переменные конфигурации, создавать пароли и ключи.
- Выполнять (полу)автоматическую установку.
- Получать удовольствие!