Mailman 3
Mailman 3 est encore en cours de déploiement, cette documentation risque d'évoluer dans les jours à venir.
Sommaire
Mailman 3 est le service de listes de diffusions utilisé au Crans. Il vient remplacer Mailman 2, après près de 20 ans de bons et loyaux services.
Mailman est déployé sur le serveur mailman. L'interface web de Mailman est disponible sur https://lists.crans.org/ (à venir) ou sur https://mailman.crans.org/.
Les listes de diffusion sont dans le domaine @lists.crans.org (certaines ont des alias @crans.org).
Installation
Mailman
Mailman 3 est gentiment packagé sous Debian, on se contente donc d'installer le paquet depuis APT.
Les données de Mailman seront stockées dans /var/lib/mailman3. On prévoie donc un disque dédié monté sur ce chemin.
Sur un Debian Bullseye propre, il suffit de faire :
$ sudo apt update $ sudo apt install --no-install-recommends mailman3-full
Mailman est désormais déjà prêt à être configuré et utilisé Il est bon de vérifier néanmoins que le dossier /var/lib/mailman3 appartient bien à list:list.
Pour des raisons de confort d'utilisation d'un terminal Django, installer iPython via le paquet python3-ipython peut se révéler très pratique.
Installation de la base de données
Mailman est essentiellement séparé en deux cœurs : mailman qui gère les listes et mailman-web qui gère l'affichage web avec Django. Les deux parties ont besoin de leur propre base de données.
Sur le serveur qui héberge PostgreSQL (tealc au Crans), il faut donc créer les deux bases de données :
$ sudo -u postgres createuser -P mailman3 $ sudo -u postgres createdb -O mailman3 mailman3 $ sudo -u postgres createuser -P mailman3web $ sudo -u postgres createdb -O mailman3web mailman3web
On n'oublie pas d'autoriser les connexions dans /etc/postgresql/11/main/pg_hba.conf :
host mailman3 mailman3 172.16.10.0/24 md5 host mailman3 mailman3 fd00:0:0:10::/64 md5 host mailman3web mailman3web 172.16.10.0/24 md5 host mailman3web mailman3web fd00:0:0:10::/64 md5
Configuration de Mailman
Sa configuration se trouve dans /etc/mailman/mailman.cfg, qui doit appartenir à root:list et avoir pour permissions 0640.
On définit dans la partie [database] les paramètres de connexion à la base de données :
[database] class: mailman.database.postgresql.PostgreSQLDatabase url: postgres://mailman3:PASSWORD@172.16.10.1:5432/mailman3
Dans la partie [webservice], on définit un mot de passe pour la connexion à l'API nommé admin_pass.
On configure enfin la réception et l'envoi de mails :
[mta] incoming: mailman.mta.postfix.LMTP outgoing: mailman.mta.deliver.deliver smtp_host: 172.16.10.124 # Redisdead smtp_port: 25 smtp_user: smtp_pass: lmtp_host: 127.0.0.1 lmtp_port: 8024 configuration: python:mailman.config.postfix
Les mails sont reçus localement par LMTP et pour l'envoi mailman s'adresse au serveur SMTP de Redisdead.
Configuration de Hyerkitty
Hyperkitty est le service d'archivage de Mailman. Pour l'activer, il faut ajouter dans le fichier de configuration de Mailman :
[archiver.hyperkitty] class: mailman_hyperkitty.Archiver enable: yes configuration: /etc/mailman3/mailman-hyperkitty.cfg
Et renseigner le mot de passe dans /etc/mailman3/mailman-hyperkitty.cfg :
[general] base_url: http://localhost/hyperkitty/ api_key: {{ mailman3.archiver_key }}
Configuration de Mailman-web
Sa configuration se trouve dans /etc/mailman/mailman-web.py, qui doit appartenir à root:www-data et avoir pour permissions 0640.
SECRET_KEY = '{{ mailman3.web_secret_key }}' ADMINS = ( ('Mailman Suite Admin', 'root@crans.org'), ) ALLOWED_HOSTS = [ "localhost", # Archiving API from Mailman, keep it. "mailman.crans.org", "lists.crans.org", ] # Mailman API credentials MAILMAN_REST_API_URL = 'http://localhost:8001' MAILMAN_REST_API_USER = 'restadmin' MAILMAN_REST_API_PASS = '{{ mailman3.restadmin_pass }}' MAILMAN_ARCHIVER_KEY = '{{ mailman3.archiver_key }}' MAILMAN_ARCHIVER_FROM = ('127.0.0.1', '::1') # Add allauth_cas_crans path import sys sys.path.insert(0, "/usr/scripts/mailman") INSTALLED_APPS = ( 'mailman_theme_crans', # override templates 'hyperkitty', 'postorius', 'django_mailman3', 'django.contrib.admin', 'django.contrib.admindocs', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', 'django_gravatar', 'compressor', 'haystack', 'django_extensions', 'django_q', 'allauth', 'allauth.account', 'allauth.socialaccount', 'allauth_cas', 'allauth_cas_crans', ) # Database configuration DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'mailman3web', 'USER': 'mailman3web', 'PASSWORD': 'PASSWORD', 'HOST': '172.16.10.1', 'PORT': 5432, 'OPTIONS': { }, } } # Reverse-proxy configuration USE_X_FORWARDED_HOST = True SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https') SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_SCHEME', 'https') LANGUAGE_CODE = 'en-us' TIME_ZONE = 'UTC' USE_I18N = True USE_L10N = True USE_TZ = True EMAILNAME = 'crans.org' DEFAULT_FROM_EMAIL = f'contact@crans.org' SERVER_EMAIL = f'root@crans.org' ACCOUNT_DEFAULT_HTTP_PROTOCOL = "https" SOCIALACCOUNT_PROVIDERS = { 'crans': {}, } COMPRESS_PRECOMPILERS = ( ('text/less', 'lessc {infile} {outfile}'), ('text/x-scss', 'sassc -t compressed {infile} {outfile}'), ('text/x-sass', 'sassc -t compressed {infile} {outfile}'), ) COMPRESS_OFFLINE = True POSTORIUS_TEMPLATE_BASE_URL = 'http://localhost/mailman3/'
Certains paramètres concernent la connexion au CAS, voir ci-dessous.
Connexion via le CAS
On souhaite que les adhérents se connectent sur l'interface web via le CAS du Crans. On comment pour cela par installer l'exension nécessaire pour django-allauth, qui n'existe malheureusement pas dans les paquets Debian :
$ sudo apt install --no-install-recommends python3-pip python3-lxml $ sudo pip3 install django-allauth-cas
On ajoute alors le module allauth_cas aux applications installées (voir ci-dessus).
On souhaite alors configurer le CAS pour le Crans. On utilise pour cela le module allauth_cas_crans qui est implémenté dans le dépôt scripts du Crans. En le supposant clôné dans /usr/scripts, on ajoute alors au fichier de configuration de mailman-web :
import sys sys.path.insert(0, "/usr/scripts/mailman")
On peut désormais ajouter le module allauth_cas_crans. On n'oubliera pas d'autoriser https://mailman.crans.org/ et https://lists.crans.org/ d'accéder au CAS.
Thèmes Crans personnalisés
Une fois les scripts Crans sourcés comme ci-dessus, il suffit d'ajouter en première application mailman_theme_crans pour remplacer les thèmes par défaut.
Migration de la base de données, collecte des fichiers statiques
Pour migrer la base de données et créer les différentes tables, une fois Mailman bien configuré, il suffit de lancer :
$ sudo -u www-data mailman-web migrate
Pour importer les fichiers statiques :
$ sudo -u www-data mailman-web collectstatic
Et enfin, pour compresser et mettre en cache certaines ressources (afin d'optimiser le délai de réponse) :
$ sudo -u www-data mailman-web compress
Toutes ces opérations sont à faire après chaque mise à jour de mailman.
Redémarrer mailman
Les services sont gérés par systemd :
$ sudo systemctl restart mailman $ sudo systemctl restart mailman-web
Postfix
TODO