#pragma keywords créer, mailing, list, Mailing, List, Créer = Mailman 3 = {{{#!wiki caution Mailman 3 est encore en cours de déploiement, cette documentation risque d'évoluer dans les jours à venir. }}} <> Mailman 3 est le service de listes de diffusions utilisé au Crans. Il vient remplacer [[CransTechnique/ServicesMineurs/MailMan|Mailman 2]], après près de 20 ans de bons et loyaux services. Mailman est déployé sur le serveur [[CransTechnique/LesServeurs/Virtuels/ServeurMailman|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 [[CransTechnique/Services/PostGreSQL|PostgreSQL]] ([[CransTechnique/LesServeurs/ServeurTealc|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 Hyperkitty === 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') INSTALLED_APPS = ( 'mailman_crans_theme', # 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, avec son module spécial Crans : {{{ $ sudo apt install --no-install-recommends python3-pip python3-lxml $ sudo pip3 install django-allauth-cas git+https://gitlab.crans.org/nounous/allauth-cas-crans.git }}} On ajoute alors le module {{{allauth_cas}}} et {{{allauth_cas_crans}}} aux applications installées (voir ci-dessus). 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 === De la même manière, on installe le paquet PIP personnalisé : {{{ $ sudo pip install git+https://gitlab.crans.org/nounous/mailman-crans-theme.git }}} Il suffit ensuite 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 }}} === Définition du site === Par défaut, le site s'appelle {{{example.com}}}. On peut le changer en ligne de commande : {{{ $ sudo mailman-web shell_plus [1]: site = Site.objects.first() [2]: site.name = "Listes Crans" [3]: site.domain = "mailman.crans.org" [4]: site.save() }}} === Ajout d'un super-utilisateur === Avant d'avoir un super-utilisateur capable d'accéder à l'interface d'administration, on peut déjà essayer d'ajouter des droits en ligne de commande. On commande par ouvrir un shell Django : {{{ $ sudo mailman-web shell_plus }}} On peut ensuite récupérer l'utilisateur voulu et lui donner les droits super-utilisateur et les droits staff (nécessaires pour accéder à l'interface d'administration) : {{{ [1]: user = User.objects.get(username="ynerant") [2]: user.is_superuser = True [3]: user.is_staff = True [4]: user.save() }}} L'utilisateur a désormais les pleins pouvoirs sur la plateforme. === Postfix === ==== Configuration standard ==== On installe un serveur Postfix qui servira uniquement à recevoir les mails (comme indiqué plus haut, l'envoi des mails se fait en contactant directement redisdead). On commence par installer {{{postfix}}} : {{{ $ sudo apt install --no-install-recommends postfix }}} Sa configuration se fait dans {{{/etc/postfix/main.cf}}}. Le début de la configration est assez standard : {{{ # See /usr/share/postfix/main.cf.dist for a commented, more complete version # This postfix configuration set up a MTA only to send and receive mailing list mails # When a mail is sent to @localhost, this domain will be used myorigin = crans.org smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) biff = no # Uncomment the next line to generate "delayed mail" warnings delay_warning_time = 4h # See http://www.postfix.org/COMPATIBILITY_README.html -- default to 2 on # fresh installs. compatibility_level = 2 # TLS parameters smtpd_tls_cert_file=/etc/letsencrypt/live/crans.org/fullchain.pem smtpd_tls_key_file=/etc/letsencrypt/live/crans.org/privkey.pem smtpd_use_tls=yes smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache # See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for # information on enabling SSL in the smtp client. # Limit to 200Mo by message message_size_limit = 209715200 # Default aliases alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases # Only localhost mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 # Listen on IPv4 and IPv6 inet_interfaces = all inet_protocols = all # Do not use gethostname myhostname = mailman.adm.crans.org mydomain = crans.org # Softbounce, ask remote mail server to send the mail again if error # Do not keep it active in production! soft_bounce = no }}} On veillera en particulier à bien générer un certificat TLS via certbot nommé {{{crans.org}}}. On ajoute la configuration spécifique à Mailman 3 : {{{ # Mailman3 integration recipient_delimiter = + unknown_local_recipient_reject_code = 550 owner_request_special = no transport_maps = hash:/var/lib/mailman3/data/postfix_lmtp local_recipient_maps = hash:/var/lib/mailman3/data/postfix_lmtp relay_domains = hash:/var/lib/mailman3/data/postfix_domains }}} Il suffit ensuite de recharger Postfix. ==== Configuration du serveur mail principal ==== On souhaite que les mails soient reçus par le serveur mail principal, à savoir redisdead, afin de faire un premier tri et de gérer lui-même la sécurité des mails. On ajoute alors {{{redisdead.crans.org}}}, {{{freebox.crans.org}}} et {{{sputnik.crans.org}}} en serveurs MX pour {{{lists.crans.org}}}. Dans le fichier {{{/etc/postfix/main.cf}}}, on pense bien à ajouter {{{lists.crans.org}}} dans le champ {{{$mydestination}}} (et non {{{relay_domains}}} uniquement). Dans {{{/etc/postfix/transport}}}, on indique à postfix de transporter les mails envoyer sur une adresse {{{@lists.crans.org}}} sur le serveur de Mailman : {{{ lists.crans.org smtp:[172.16.10.110] }}} Après un rechargement de postfix, les mails sont prêts à être distribués ! == Migration == Les données de Mailman 2 vers Mailman 3 seront migrées prochainement. Le plan de migration est accessible sur la page [[/Migration]]. ---- CatégorieCrans CatégoriePagePublique