nginx : renouveler le certificat
Dans une installation Docker avec nginx comme proxy inverse (alternative à Traefik ou installations plus anciennes), la procédure varie selon que le certificat a été obtenu auprès de Let’s Encrypt avec Certbot ou acheté auprès d’une autorité de certification. Pour l’installation standard avec Traefik, voir Traefik : renouveler le certificat →.
Let’s Encrypt (Certbot)
Cette section s’applique si le certificat a été obtenu avec Certbot en mode standalone, comme décrit dans Certificats SSL - Certbot →.
Il peut arriver que Certbot n’ait pas demandé de nouveau certificat pour diverses raisons. Le renouvellement peut également être déclenché manuellement. Le port 80 doit pour cela être libre ; nginx est donc arrêté pendant le renouvellement :
sudo certbot renew --pre-hook "/usr/bin/docker compose -f /opt/relution/compose.yaml down nginx" --post-hook "/usr/bin/docker compose -f /opt/relution/compose.yaml up --detach nginx"
Pour les installations plus anciennes avec docker-compose.yml, le chemin est adapté à l’installation. nginx peut également être arrêté au préalable dans le répertoire du fichier Compose (par défaut /opt/relution) avec sudo docker compose down nginx, puis redémarré avec sudo docker compose up --detach nginx. nginx ne délivre le nouveau certificat qu’après le redémarrage. Pour un test, la commande peut d’abord être exécutée avec --dry-run.
Après le renouvellement, Certbot affiche les certificats existants avec leur date d’expiration :
sudo certbot certificates
Pour finir, l’interface web de Relution est ouverte dans le navigateur et l’icône de cadenas dans la barre d’adresse permet de vérifier que nginx délivre le nouveau certificat avec la nouvelle date d’expiration.
Certificat acheté
La chaîne de certificats (server.pem) et la clé privée (server.key) sont d’abord préparées comme décrit dans Renouveler un certificat acheté →. Elles sont ensuite mises en place pour nginx comme suit.
Placer les fichiers
Dans une installation Docker avec nginx, les deux fichiers se trouvent par défaut dans le répertoire /opt/relution. Avant le remplacement, les fichiers existants sont sauvegardés afin de pouvoir les restaurer en cas de problème :
cd /opt/relution
sudo cp server.pem server.pem.old
sudo cp server.key server.key.old
Les nouveaux fichiers server.pem et, le cas échéant, server.key sont ensuite copiés dans le répertoire en écrasant les fichiers existants. La clé privée est enfin rendue lisible uniquement par son propriétaire :
sudo chmod 600 /opt/relution/server.key
Vérifier les chemins dans la configuration nginx
Le conteneur nginx lit le certificat et la clé à partir des fichiers montés dans le fichier Compose. Dans les installations actuelles, il s’appelle compose.yaml (dans le répertoire /opt/relution), dans les installations plus anciennes docker-compose.yml. Les montages figurent dans le bloc nginx: sous volumes: :
services:
…
nginx:
image: nginx:stable
…
volumes:
- "/opt/relution/relution-nginx.conf:/etc/nginx/conf.d/relution-nginx.conf"
- "/opt/relution/server.pem:/etc/nginx/server.pem"
- "/opt/relution/server.key:/etc/nginx/server.key"
À gauche des deux-points figure le chemin sur le serveur, à droite le chemin dans le conteneur. Les installations plus anciennes utilisent des chemins relatifs comme ./server.pem ; les fichiers se trouvent alors dans le même répertoire que le fichier Compose.
Dans la configuration nginx relution-nginx.conf, les entrées ssl_certificate et ssl_certificate_key du bloc server pour le port 443 renvoient aux chemins dans le conteneur :
server {
listen 0.0.0.0:443 ssl default_server;
…
ssl_certificate /etc/nginx/server.pem;
ssl_certificate_key /etc/nginx/server.key;
…
}
Si les fichiers existants ont été remplacés sous le même nom, aucune modification n’est nécessaire. Si les nouveaux fichiers ont été enregistrés sous un autre nom ou à un autre emplacement, le chemin à gauche des deux-points est adapté en conséquence dans le fichier Compose.
Redémarrer le conteneur nginx
nginx ne lit le certificat et la clé qu’au démarrage. Le conteneur est donc redémarré dans le répertoire /opt/relution :
cd /opt/relution
sudo docker compose restart nginx
Si le fichier Compose a été modifié, un redémarrage ne suffit pas ; le conteneur est alors recréé avec la configuration modifiée :
sudo docker compose up -d nginx
Si nginx ne démarre pas, les journaux du conteneur en indiquent la cause, par exemple un fichier de certificat erroné ou une clé qui ne correspond pas :
sudo docker compose logs nginx
Dans ce cas, les fichiers sauvegardés server.pem.old et server.key.old peuvent être recopiés jusqu’à ce que l’erreur soit corrigée.
Pour finir, l’interface web de Relution est ouverte dans le navigateur et l’icône de cadenas dans la barre d’adresse permet de vérifier que le nouveau certificat est délivré avec la nouvelle date d’expiration. La délivrance de la chaîne complète peut en outre être vérifiée, par exemple, avec WhatsMyChainCert →.
server.pem et server.key depuis /opt/relution, ceux-ci sont déjà remplacés ; un redémarrage avec sudo docker compose restart relution dans le répertoire /opt/relution suffit alors.