Configuration Postfix Multi-instances

Soit une machine, par exemple liée à une application web de type réseau social, chargée d’envoyer des courriers électroniques. Il existe différents types de courriers dans notre application. Exemple :

  • les courriers d’inscriptions;
  • les courriers de notifications («vous avez un nouveau contact»);
  • les courriers d’invitations.

Plusieurs milliers courriers d’invitations peuvent être envoyés d’un seul coup (de nos jours, les gens ont beaucoup de contacts). Le traitement de ces milliers de courrier ne doit pas bloquer un courrier de confirmation d’inscription, qui doit être reçu quelques secondes après que l’utilisateur se soit inscrit sur le site.

C’est pour cela que chaque type de courrier va être envoyé à un serveurs SMTP dédié, chez un prestataire externe, qui est chargé de délivrer le courrier à son destinataire final. Mais en local, sur notre serveur, il est nécessaire aussi de paralléliser l’envoi des courriers.

Comme notre serveur utilise [Postfixhttp://www.postfix.org] pour relayer les courriers, nous allons utiliser la fonctionnalité [MULTI_INSTANCEhttp://www.postfix.org/MULTI_INSTAN...] de Postfix, pour pouvoir disposer en local de différentes instance de Postfix, qui fonctionneront en parallèle, chacune possédant sa propre queues.

Postfix est déjà installé et configuré sur notre serveur. Cette configuration sera dédiée à l’envoi des mails depuis la machine (via la commmande sendmail). Pour installer des nouvelles instances il faut lancer :

postmulti -e init

Cette commande ajoute deux lignes dans les fichiers main.cf :

multi_instance_wrapper = ${command_directory}/postmulti -p --
multi_instance_enable = yes

Ensuite on créé la première instance supplémentaire :

postmulti -I postfix-1 -G secondary -e create

Les arguments de la commande sont :

  • -I: nom de l’instance; c’est aussi le répertoire
  • -G: le groupe de l’instance; il sera possible d’effectuer des opérations sur toutes les instances d’un groupe.

Cette commande:

  1. crée des fichiers master.cf et main.cf dans le répertoire /etc/postfix-1;
  2. rajoute la directives multi_instance_directories dans le fichiet /etc/postfix/main.cf; cette clé contient le répertoire de configuration de la nouvelle instance (/etc/postfix-1 donc);
  3. crée sur le serveurs tous les fichiers nécessaires à Postfix pour gérer cette deuxième instance; en particulier dans le répertoires /var/lib/postfix-1 et /var/spool/postfix-1.

C’est le moment d’aller modifier les fichiers nouvellement créés, main.cf et master.cf, du répertoire de configuration de la nouvelle instance pour personnaliser les paramètres de la nouvelle instance selon vos souhaits.

Dans mon cas, je souhaite que la nouvelle instance écoute sur le port 10025 au lieu du port 25. Il faut donc ajouter la ligne suivante dans le fichier main.cf :

# À la place de 'smtp      inet  n       -       -       -        -      smtpd'
127.0.0.1:10025     inet  n       -       n       -       -       smtpd

Dans ma situation, j’ai aussi modifié le fichier main.cf pour envoyer les courriers au bon serveur SMTP.

Pour démarrer la nouvelle instance, la commande à lancer est :

postmulti -i postfix-1 -p start

Sous Debian (et Ubuntu), vous aurez un mesasge d’erreur indiquant que le fichier dynamicmaps.cf est manquant. Cela se résout simplement avec un lien symbolique :

ln -s /etc/postfix/dynamicmaps.cf /etc/postfix-1/

Pour pourrez créer autant d’instance Postfix que nécessaire à vos besoins.

Pour tester la configuration de chaque nouvelle instance, les commandes habituelles de Postfix sont disponibles. Il faut seulement leur passer en argument le répertoire de configuration de l’instance à tester, avec l’option -c ou -C en fonction de la commande :

mailq -C /etc/postfix-1
sendmail -C /etc/postfix-1
postsuper -c /etc/postfix-1
postconf -c /etc/postfix-1
postqueue -f -c /etc/postfix-1

Les dernières commandes à connaître pour manipuler une instance sont assez simple à retenir :

postmulti -i postfix-1 -p stop
postmulti -i postfix-1 -e disable
postmulti -i postfix-1 -e destroy

À noter qu’il est possible de lancer ces instructions à un groupe d’instance, en utilisant l’option -g suivi d’un nom du groupe, au lieu de l’option -i et du nom de l’isntance.

Toutes les commandes et toutes leurs options sont détaillées dans la page manuelle de la configuration Multi-instances.