Les backups nocturnes du 4 et 5 octobre ont échoué ("restic : commande
introuvable") : cron ne fournit que /usr/bin:/bin alors que restic est
dans /usr/local/bin. Testé avec le PATH de cron (systemd-run -E).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
41 lines
1.9 KiB
Bash
41 lines
1.9 KiB
Bash
#!/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
|
|
# cron ne fournit que /usr/bin:/bin
|
|
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
|
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"
|