fix(mail): certificat TLS de poste.io synchronisé depuis CapRover

Le certificat de mail.sans.pub servi par poste.io avait expiré le
2021-02-06 : son renouvellement Let's Encrypt intégré ne peut pas
fonctionner derrière le nginx de CapRover. Le script mail/mail-cert-sync.sh
(cron quotidien) copie désormais le certificat renouvelé par CapRover
et recharge Dovecot/Haraka. L'alerte du backup n'a plus besoin de -k.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Pierre Martin
2026-10-03 13:43:22 +02:00
co-authored by Claude Opus 5.5
parent f974203973
commit 3fc9ae52c9
4 changed files with 48 additions and 4 deletions
+38
View File
@@ -0,0 +1,38 @@
#!/bin/bash
# Synchronise le certificat Let's Encrypt de mail.sans.pub (renouvelé par CapRover)
# vers poste.io, qui ne sait pas le renouveler lui-même derrière le nginx de CapRover.
# Installé dans /root/mail-cert-sync.sh, lancé chaque jour par /etc/cron.d/mail-cert-sync
set -euo pipefail
LIVE=/captain/data/letencrypt/etc/live/mail.sans.pub
SSL=/var/lib/docker/volumes/captain--mail-data/_data/ssl
LOG=/var/log/mail-cert-sync.log
exec >> "$LOG" 2>&1
# Déjà à jour ?
if cmp -s "$LIVE/cert.pem" "$SSL/server.crt"; then
exit 0
fi
openssl x509 -in "$LIVE/cert.pem" -noout -checkend 86400 \
|| { echo "$(date -Is) certificat CapRover expiré ou invalide, rien fait"; exit 1; }
echo "$(date -Is) nouveau certificat : $(openssl x509 -in "$LIVE/cert.pem" -noout -enddate)"
stamp=$(date +%Y%m%d%H%M%S)
for f in server.crt server.key ca.crt; do
[ -f "$SSL/$f" ] && cp -p "$SSL/$f" "$SSL/$f.bak-$stamp"
done
install -m 644 -o mail -g mail "$LIVE/cert.pem" "$SSL/server.crt"
install -m 644 -o mail -g mail "$LIVE/chain.pem" "$SSL/ca.crt"
install -m 600 -o mail -g mail "$LIVE/privkey.pem" "$SSL/server.key"
# Garder seulement les 3 dernières sauvegardes de chaque fichier
for f in server.crt server.key ca.crt; do
ls -1t "$SSL/$f".bak-* 2>/dev/null | tail -n +4 | xargs -r rm -f
done
# Distribution dans le conteneur (script d'init de poste.io) puis rechargement des services TLS
M=$(docker ps -q -f name=srv-captain--mail)
docker exec "$M" bash /etc/cont-init.d/21-certificate.sh
docker exec "$M" s6-svc -h /var/run/s6/services/dovecot # IMAP/POP : relecture à chaud
docker exec "$M" s6-svc -t /var/run/s6/services/haraka-smtp # SMTP 25/465 : redémarrage (quelques s)
docker exec "$M" s6-svc -t /var/run/s6/services/haraka-submission # SMTP 587
echo "$(date -Is) certificat installé et services rechargés"