Por defecto Mailman se ejecuta con el usuario y grupo de Apache, pero en este caso queremos que se ejecute con el usuario de Nginx. Para ello, en tu /etc/make.conf añade:
/etc/make.conf
MAILMAN_CGIUID=“nginx”
MAILMAN_CGIGID=“nginx”
# emerge mailman
Después configura Mailman editando:
/etc/mailman/mm_cfg.py
Ejemplo:
DEFAULT_URL_HOST = ‘mailman.example.com’
DEFAULT_EMAIL_HOST = ‘example.com’
DEFAULT_URL_PATTERN = ‘https://%s/mailman/’
PUBLIC_ARCHIVE_URL = ‘https://%(hostname)s/pipermail/%(listname)s’
# Indicar que Exim no necesita alias
MTA = None
Añade las tareas al crontab de Mailman, crea la contraseña del sitio y la lista principal:
# su – mailman
mailman $ crontab cron/crontab.in
mailman $ bin/mmsitepass
mailman $ bin/newlist mailman
Inicia Mailman al arranque y ejecútalo:
# rc-update add mailman default
# service mailman start
Mailman usa CGI, por lo que hay que adecuar Nginx para ejecutar scripts CGI. Para eso utiliza spawn-fcgi y fcgiwrap:
# emerge spawn-fcgi fcgiwrap
Configura y arranca el demonio fcgiwrap (modificando según tu sistema):
/etc/conf.d/spawn-fcgi.fcgiwrap
FCGI_SOCKET=/run/fcgiwrap.sock
FCGI_PROGRAM=/usr/sbin/fcgiwrap
FCGI_USER=nginx
FCGI_GROUP=nginx
Activa y arranca el servicio:
# cd /etc/init.d
# ln -s spawn-fcgi spawn-fcgi.fcgiwrap
# rc-update add spawn-fcgi.fcgiwrap default
# service spawn-fcgi.fcgiwrap start
Crea un archivo, por ejemplo mailman.conf, y añádelo al Nginx:
server {
listen 80;
server_name mailman.example.com;location /.well-known/acme-challenge {
root /var/www/letsencrypt;
}location / {
return 301 https://$host$request_uri;
}
}server {
listen 443 ssl;
server_name mailman.example.com;
root /usr/lib64/mailman/cgi-bin;ssl_certificate /etc/letsencrypt/live/mailman.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mailman.example.com/privkey.pem;location / {
rewrite ^ /mailman/listinfo permanent;
}location ~ ^/mailman(/[^/]*)(/.*)?$ {
fastcgi_split_path_info ^/mailman/([^/]*)(.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/$1;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass unix:/run/fcgiwrap.sock-1;
}location /mailman-icons {
alias /usr/lib64/mailman/icons;
}location /pipermail {
alias /var/lib/mailman/archives/public;
}
}
Incluye este archivo en tu configuración principal de Nginx y reinicia:
# service nginx restart
También es necesario añadir el usuario de Nginx al grupo de Mailman para que tenga acceso a los archivos del archivo público de mensajes:
# gpasswd -a nginx mailman
Para que Mailman y Exim funcionen bien juntos no necesitas definir alias para las listas, ya que la documentación oficial de Exim permite integrarlos directamente sin ese paso.
Sin embargo, sí puede ser útil definir un alias para mailman-loop en tu /etc/mail/aliases apuntando a una dirección válida (como root) por si acaso:
/etc/mail/aliases
mailman-loop: root
