Mise en place d'un serveur de mail qui utilise les certificats traefik

Je me suis basé sur cet excellent tuto, pour réaliser un container docker de serveur de mail avec Postfix et Dovecot

Pas de difficulté majeur, ça marche assez bien. Il faut juste être patient que les DNS se propoagent bien pour le nom de domain du serveur mail et pour la signature DKIM et SPF, mais en regardant les log on est assez vite renseigné sur les problèmes qui se pose

Le container est disponible ici github

Mais le sujet n'est pas la, j'utilise un environnement avec Traefik et je voulais pouvoir utiliser mes certificats générés pas traefik dans mon container docker. Mais il se trouve que les certificats de Traefik sont généré dans un format qui ne convient pas à postfix

Pour info, on a besoin de ces certificats pour sécuriser la connexion au serveur mail, en mode SSL/TLS
Il est a noté que chez OVH, le port 465 n'est pas accessible. C'est le port qui par defaut permet d'envoyer les email en SSL, il est assez simple d'utiliser un autre port dans le fichier docker-compose et de configurer son clien mail en conséquence

J'ai donc trouvé ce projet réalisé en GO : traefik-acme qui permet de convertir les certificats généré par traefik

Certificate Resolver not found

En lançant la commande

                    docker run --rm
                    -v "/home/ubuntu/docker/traefik:/input"
                    -v "/docker/myservice/certs:/output"
                    --workdir /output ghcr.io/na4ma4/traefik-acme:latest
                    --acme /input/cert.json
                    --certificate-resolver tls-challenge
                     subdomain.domain.fr
                
J'ai eu l'erreur certificate resolver not found, ce qui s'explique bien, c'est le certificate resolver qui n'est pas trouvé. En creusant un peu et en allant regader le code go j'ai vu que ce paraètre correspondait à la première clef du fichier acme.json, j'ai donc passé

                    --certificate-resolver default
                

La suite avec inotify

Il faut faire en sorte que les certificats soit renouvelés dans le container de mail, à chaque fois qu'ils changent dans le fichier acme.json. Traefik est bien fait, et c'est en partie pour cela que je l'utilise, car il renouvelle les certicats avant qu'il n'arrivent à échéance.
Inotify du packet inotify-tools permet de surveiller les modifications d'une fichier et de déclencher une action quand le fichier est modifié. J'ai donc :

                    #!/bin/bash
                    inotifywait -m -e modify /home/ubuntu/docker/traefik/acme.json |
                       while read file_path file_event file_name; do
                            docker compose up acme
                            docker exec -i mail sh -c "service postfix restart"
                            docker exec -i mail sh -c "service dovecot restart"
                       done
                
Ainsi, on execute le container acme qui renouvelle les certificats et on relance les service de mail pour qu'ils prennent en compte les nouveaux certificats