Mailman3 Core Docker Image¶
When you spawn off this container, you must mount /opt/mailman
to the
container. Mailman's var
directory will also be stored here so that it can
persist across different sessions and containers. Any configuration at
/opt/mailman/core/mailman-extra.cfg
(on the host) will be added to the mailman's default
generated confifguration (see below).
It is not advised to run multiple mailman processes on the same host sharing the
same /opt/mailman
(/opt/mailman/core
on the host) directory as this will
almost certainly be dangerous.
Configuration¶
These are the variables that you MUST change before deploying:
-
HYPERKITTY_API_KEY
: Hyperkitty's API Key, should be set to the same value as set for the mailman-core. -
DATABASE_URL
: URL of the typedriver://user:password@hostname:port/databasename
for the django to use. If not set, the default is set tosqlite:///opt/mailman-web-data/mailmanweb.db
. The standard docker-compose.yaml comes with it set to a postgres database. It is not must to change this if you are happy with PostgreSQL. -
DATABASE_TYPE
: Its value can be one ofsqlite
,postgres
ormysql
as these are the only three database types that Mailman 3 supports. Its default value is set tosqlite
along with the default database class and default database url above. -
DATABASE_CLASS
: Default value ismailman.database.sqlite.SQLiteDatabase
. The values for this can be found in the mailman's documentation [here][11].
These are the variables that you don't need to change if you are using a standard version of docker-compose.yaml from this repository.
-
MM_HOSTNAME
: Which hostname or IP should Core bind to for REST API and LMTP. If not defined output from thehostname -i
command is used. -
MAILMAN_REST_PORT
: Which port should Core use for the REST API. If not defined the default is8001
. -
MAILMAN_REST_USER
: Which username should Core use for the REST API. If not defined the default isrestadmin
. -
MAILMAN_REST_PASSWORD
: Which password should Core use for the REST API. If not defined the default isrestpass
. -
MTA
: Mail Transfer Agent to use. Eitherexim
orpostfix
. Default value isexim
. -
SMTP_HOST
: IP Address/hostname from which you will be sending emails. Default value is the container's gateway retrieved from: /sbin/ip route | awk '/default/ { print $3 }' -
SMTP_PORT
: Port used for SMTP. Default is25
. -
SMTP_SECURE_MODE
: Security mode (encryption) used for SMTP. Default issmtp
. Can also bestarttls
orsmtps
. -
HYPERKITTY_URL
: Default value ishttp://mailman-web:8000/hyperkitty
In case of a need for fine tuning of REST API web-server that uses Gunicorn (e.g. for raising of timeouts) /opt/mailman/core/gunicorn-extra.cfg
file could be provided holding necessary configuration options.
Configuration file, shipped with Mailman Core, is used by default.
For example, to increase the default 30 sec timeout, which won't work for some API calls to highly populated lists, provide the following gunicorn-extra.cfg
file:
[gunicorn]
graceful_timeout = 30
timeout = 300
Running Mailman-Core¶
It is highly recomended that you run this image along with the docker-compose.yaml file provided at the github repo of this image. However, it is possible to run this image as a standalone container if you want just a mailman-core.
$ mkdir -p /opt/mailman/core
$ docker run -it -e "HYPERKITTY_API_KEY=changeme" -h mailman-core -v /opt/mailman/core:/opt/mailman mailman-core
However, if you don't provide the environment DATABASE_URL
, the database may
not be persisted. All the configuration options are explained in more detail.
If you need mode advanced configuration for mailman, you can create
/opt/mailman/mailman.cfg
and it be added to the configuration inside the
container. Note that anything inside this configuration will override the
settings provided via the environment variables and their default values.
By default, the following settings are generated:
# mailman.cfg
[mta]
incoming: mailman.mta.exim4.LMTP
outgoing: mailman.mta.deliver.deliver
lmtp_host: $MM_HOSTNAME
lmtp_port: 8024
smtp_host: $SMTP_HOST
smtp_port: $SMTP_PORT
smtp_secure_mode: $SMTP_SECURE_MODE
smtp_verify_hostname: $SMTP_VERIFY_HOSTNAME
smtp_verify_cert: $SMTP_VERIFY_CERT
configuration: python:mailman.config.exim4
[runner.retry]
sleep_time: 10s
[webservice]
hostname: $MM_HOSTNAME
port: $MAILMAN_REST_PORT
admin_user: $MAILMAN_REST_USER
admin_pass: $MAILMAN_REST_PASSWORD
configuration: /etc/gunicorn.cfg
[archiver.hyperkitty]
class: mailman_hyperkitty.Archiver
enable: yes
configuration: /etc/mailman-hyperkitty.cfg
[database]
class: $DATABASE_CLASS
url: $DATABASE_URL
# mailman-hyperkitty.cfg
[general]
base_url: $HYPERKITTY_URL
api_key: $HYPERKITTY_API_KEY
MTA¶
You can use Postfix or Exim with this image to send emails. Mailman Core can interact with any modern MTA which can deliver emails over LMTP. The documentation for Mailman Core has configuration settigs for using them.
Only Exim and Postfix have been tested with these images and are supported as of now. There might be some limitations with using other MTAs in a containerized environments. Contributions are welcome for anything additional needed to support other MTAs.
To setup Exim or Posfix, checkout the documentation.