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:
co-authored by
Claude Opus 5.5
parent
f974203973
commit
3fc9ae52c9
@@ -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"
|
||||
Reference in New Issue
Block a user