====== 2e instance de postfix ====== Il peut parfois être utile d'avoir une 2e instance de postfix (sur une autre IP, pour d'autres domaines, etc...) Tout ce qui suit est largement inspiré de http://advosys.ca/papers/postfix-instance.html (publié ici avec l'autorisation de l'auteur). Cette page **n'est donc pas sous licence CC**, vous devez demander la permission de l'auteur initial pour en reproduire tout ou partie (ma contribution est CC-by-sa). Dans tout ce qui suit doit être remplacé par l'ip spécifique à cette 2e instance. * On duplique la conf postfix : ''cp -a /etcv/postfix /etc/postfix2'' * On édite /etc/postfix2/main.cf pour spécifier myhostname = alias_maps = hash:/etc/postfix2/conf.d/aliases alias_database = hash:/etc/postfix2/conf.d/aliases myorigin = $myhostname mydestination = $myhostname, localhost relayhost = mynetworks = # on écoute seulement sur cette ip inet_interfaces = # spécifique à une 2e instance de postfix queue_directory = /var/spool/postfix2 config_directory = /etc/postfix2 data_directory = /var/lib/postfix2 # les mails sortants partent via cette ip smtp_bind_address = # facultatif, pour avoir une "facility" spécifique et pouvoir trier les logs dessus syslog_facility = local2 syslog_name = postfix2 (vous devez ajouter évidemment toutes les autres directives spécifiques à votre cas de figure, comme pour une configuration postfix "standard") * On crée une file d'attente spécifique à cette 2e instance, et le data_directory (sinon on a un message ''fatal: open lock file /var/lib/postfix/master.lock: unable to set exclusive lock'') # création de la 2e file (en root) mkdir /var/spool/postfix2 # init postfix -c /etc/postfix2 check # si postfix est en chroot, faut ajouter ces rep for r in etc usr lib; do cp -rp /var/spool/postfix/$r /var/spool/postfix2/; done; # le data_directory spécifique cp -a /var/lib/postfix /var/lib/postfix2 * il faut préciser au postfix principal (/etc/postfix/main.cf) qu'il y en a un autre qui tourne alternate_config_directories = /etc/postfix2 Sinon, ça génère dans les logs des : postfix2/sendmail[XXX]: warning: command "/usr/sbin/postdrop -r" exited with status 1 postfix2/sendmail[XXX]: fatal: user_concerne(id_user): unable to execute /usr/sbin/postdrop -r: Success * pour tester, recharger le 1er postfix avec ''/etc/init.d/postfix reload'' et lancer cette 2e instance avec ''postfix -c /etc/postfix2 start'' (et l'arrêter avec ''postfix -c /etc/postfix2 stop'') * script d'init : il faut créer le script d'init qui va bien pour cette 2e instance, ''cp -a /etc/init.d/postfix /etc/init.d/postfix2'', remplacer dedans toutes les références à /etc/postfix par /etc/postfix2 et ajouter à chaque appel de binaire, postfix ou ${DAEMON}, l'option ''-c /etc/postfix2'' ; attention, il faut ajouter cette option avant l'action à faire (start|stop|etc.) ) Pour debian, ça donne /etc/init.d/postfix2 (script simplifié, j'ai pas réussi à faire fonctionner le stop sur la base de /etc/init.d/postfix avec le start-stop-daemon, pas trop cherché non plus...): #!/bin/sh PATH=/bin:/usr/bin:/sbin:/usr/sbin DAEMON=/usr/sbin/postfix NAME=Postfix2 case "$1" in start) echo -n "Starting mail transport agent: Postfix2" $DAEMON -c /etc/postfix2 start 2>&1 | (grep -v 'starting the Postfix2' 1>&2 || /bin/true) echo "." ;; stop) echo -n "Stopping mail transport agent: Postfix2" $DAEMON -c /etc/postfix2 stop 2>&1 | (grep -v 'stopping the Postfix2' 1>&2 || /bin/true) echo "." ;; restart) $0 stop $0 start ;; *) echo "Usage: $0 {start|stop|restart}" exit 1 ;; esac exit 0 * pour que php utilise ce 2e postfix, il suffit de préciser ''sendmail_path = /usr/sbin/sendmail -t -i -C /etc/postfix2'' dans le php.ini concerné (ou dans le vhost apache). * pour tester : echo -e "Subject: Test postfix2\r\n\r\nUn message de test">msg sudo -u /usr/sbin/sendmail -i -C /etc/postfix2 user@example.com