Ancrer le relais sur le VirtualHost 443, pas sur certbot

L'installateur cherchait la ligne Include des options SSL de Let's
Encrypt pour savoir où poser le ProxyPass. Elle n'existe que dans les
vhosts écrits par certbot : celui qu'ISPConfig génère porte ses propres
directives SSLCertificate*, et le patch échouait sur sites-available.

L'ancrage devient l'ouverture du bloc *:443, que les deux ont. Deux
autres choses au passage : un vhost récalcitrant n'interrompt plus le
script avant le rechargement d'Apache — il est signalé à la fin — et le
fichier est réécrit en place plutôt que remplacé par un `mv`, qui lui
aurait donné des droits neufs et lui aurait retiré son ACL.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CTvii1CYBLjD14uvuD7Kos
This commit is contained in:
Cédrix 2026-09-20 10:16:21 +02:00
parent 56c4e9ff29
commit ca177d3e7b

View file

@ -61,23 +61,31 @@ patcher_vhost() {
return 0
fi
cp -a "$fichier" "$fichier.bak-$(date +%Y%m%d%H%M)"
# Inséré juste avant le premier Include letsencrypt, donc dans le VirtualHost *:443.
# Inséré en tête du VirtualHost *:443. L'ancrage précédent — la ligne Include des
# options SSL de Let's Encrypt — n'existe que dans les vhosts écrits par certbot :
# celui qu'ISPConfig génère porte ses propres directives SSLCertificate*.
awk '
!fait && /Include \/etc\/letsencrypt\/options-ssl-apache\.conf/ {
{ print }
!fait && /^[[:space:]]*<VirtualHost[^>]*:443>/ {
print "\t\tProxyPass /deploy http://127.0.0.1:9877/deploy"
print "\t\tProxyPassReverse /deploy http://127.0.0.1:9877/deploy"
fait = 1
}
{ print }
' "$fichier" > "$fichier.tmp" && mv "$fichier.tmp" "$fichier"
' "$fichier" > "$fichier.tmp" || return 1
# Recopié dans le fichier plutôt que déplacé par-dessus : un `mv` remplacerait
# l'original par un fichier neuf, avec d'autres droits et sans son ACL.
cat "$fichier.tmp" > "$fichier" && rm -f "$fichier.tmp"
grep -q "127.0.0.1:9877" "$fichier" || { echo " ÉCHEC sur $fichier" >&2; return 1; }
echo " $fichier : relais ajouté"
}
# Sur owni, sites-enabled contient des copies et non des liens : les deux sont à traiter.
# Un vhost récalcitrant ne doit pas emporter la suite : c'est celui de sites-enabled qui
# sert, et Apache attend d'être rechargé. On note l'échec et on le dit à la fin.
manques=""
for vhost in /etc/apache2/sites-enabled/100-alpinux.org.vhost \
/etc/apache2/sites-available/alpinux.org.vhost; do
patcher_vhost "$vhost"
patcher_vhost "$vhost" || manques="$manques $vhost"
done
if apache2ctl configtest; then
@ -88,6 +96,13 @@ else
exit 1
fi
if [ -n "$manques" ]; then
echo
echo "Relais non posé dans :$manques" >&2
echo "Le déploiement fonctionne — c'est sites-enabled qui sert — mais si ISPConfig" >&2
echo "recopie un jour le vhost par-dessus, le relais sera à remettre." >&2
fi
echo
echo "────────────────────────────────────────────────────────────"
echo "Reste à déclarer le webhook dans Gitea :"