Configurer la prise en charge HTTPS avec Let's Encrypt

:bookmark: Ce guide explique comment activer HTTPS sur une installation Discourse existante en utilisant Let’s Encrypt. Il suppose que l’installation a été effectuée précédemment sans HTTPS activé.

:person_raising_hand: Niveau d’utilisateur requis : Administrateur système

:exclamation: Ce guide s’adresse uniquement aux installations existantes où HTTPS n’est pas activé. En suivant le guide de configuration officiel, HTTPS est activé automatiquement par défaut.

Vous souhaitez ajouter HTTPS à votre installation Discourse gratuitement, grâce à nos amis de Let’s Encrypt ?

:bell: Tout le reste de votre site est-il prêt pour HTTPS ?

Avant de commencer, gardez à l’esprit que pour que HTTPS fonctionne correctement, chaque ressource de la page doit être compatible avec HTTPS. Pensez à votre CDN, vos connexions via les réseaux sociaux, vos fichiers de logo, tout JavaScript tiers, les images, les polices ou le CSS — tous doivent être disponibles en HTTPS !

Remarque : ./discourse-setup activera Let’s Encrypt. À partir de mars 2017, vous pouvez le relancer, appuyer plusieurs fois sur Entrée et saisir votre adresse e-mail ; le script inclura les modèles requis et insérera votre adresse e-mail comme nécessaire. Sauf si vous êtes un administrateur système expert et que vous avez une raison de ne pas le faire, vous devriez exécuter discourse-setup plutôt que de lire la suite. (Si vous avez installé Discourse il y a très longtemps, vous devrez peut-être encore modifier app.yml manuellement.)

Remarque : Si votre Discourse est accessible via un proxy inverse (par exemple, Cloudflare), cette configuration ne fonctionnera pas.

Configurer HTTPS avec Let’s Encrypt

1. Modifier app.yml

Accédez au fichier de configuration de votre Discourse :

cd /var/discourse
nano containers/app.yml
  • Ajoutez les modèles suivants :
    templates:
      - "templates/web.template.yml"
      - "templates/web.ssl.template.yml"
      - "templates/web.letsencrypt.ssl.template.yml"
    

:warning: Discourse est-il le seul site web sur votre serveur ?

Si vous utilisez déjà web.socketed.template.yml parce que vous hébergez d’autres sites web via le port 80 sur le même serveur, arrêtez-vous. Vous devriez utiliser un client Let’s Encrypt sur le système hôte ; la validation échouera car le client utilisé ne peut pas se lier aux sockets nécessaires.

2. Exposer les ports HTTPS

Assurez-vous que les ports suivants sont exposés pour le trafic HTTPS :

expose:
  - "80:80"
  - "443:443"

3. Ajouter l’e-mail pour Let’s Encrypt

Insérez l’adresse e-mail pour les notifications Let’s Encrypt :

env:
  LETSENCRYPT_ACCOUNT_EMAIL: 'votre-email@exemple.com'

4. Reconstruire l’application

Appliquez les modifications en reconstruisant le conteneur :

./launcher rebuild app

5. Valider HTTPS

Accédez à votre site via https://votredomaine.com. En cas de succès, vous verrez votre site sécurisé avec HTTPS.

Vérifiez vos ressources :

  • Assurez-vous que les ressources (par exemple, images, scripts) se chargent en HTTPS.
  • Reconfigurez les connexions via les réseaux sociaux et le CDN pour HTTPS si nécessaire.
  • Corrigez tous les avertissements dans la console du navigateur concernant des ressources non sécurisées.

Discourse active automatiquement force_https après une reconstruction avec un certificat HTTPS valide.

Comment cela fonctionne-t-il ?

Le modèle utilise GitHub - acmesh-official/acme.sh: A pure Unix shell script ACME client for SSL / TLS certificate automation · GitHub qui est

Le script shell le plus simple pour le client de certificat gratuit Let’s Encrypt

Simple et puissant, vous n’avez besoin que de 3 minutes pour l’apprendre.

Écrit en pur bash, sans dépendance vers python, acme-tiny ou le client officiel Let’s Encrypt. Un seul script pour émettre et renouveler automatiquement vos certificats.

Probablement le script shell le plus petit, le plus simple et le plus intelligent pour émettre et renouveler automatiquement les certificats gratuits de Let’s Encrypt.

web.letsencrypt.ssl.template.yml ajoute un script de démarrage à votre conteneur qui :

  1. Démarre un nginx léger pour servir les défis ACME sur le port 80 avant que le nginx principal ne soit lancé.
  2. Émet à la fois un certificat RSA (4096 bits) et un certificat ECDSA (ec-256) Let’s Encrypt en mode webroot avec /var/www/discourse/public comme répertoire.
  3. Installe les certificats dans le répertoire /shared/ssl/ attendu par nginx. En même temps, il configure une tâche cron pour le renouvellement automatique des certificats. Cela renouvellera automatiquement vos certificats. Rien ne se passe si les certificats n’ont pas expiré. Si un certificat expire, vous recevrez un e-mail de Let’s Encrypt à l’adresse e-mail fournie lors de la configuration.
  4. Définit force_https à true si des certificats valides sont obtenus.

Dépannage

Vérification des journaux

Si HTTPS ne fonctionne pas, vérifiez les journaux pour les erreurs SSL ou Let’s Encrypt avec :

./launcher logs app

Vérification des fichiers de certification

Assurez-vous que les fichiers de certificat et de clé sont en place avec :

ls -l /var/discourse/shared/standalone/ssl

Vous devriez voir des fichiers tels que :

  • votredomaine.com.cer (RSA)
  • votredomaine.com.key (RSA)
  • votredomaine.com_ecc.cer (ECDSA)
  • votredomaine.com_ecc.key (ECDSA)

Renouvellement manuel des certificats

Si le renouvellement automatique échoue, vous pouvez réémettre manuellement vos certificats :

./launcher enter app
sv stop nginx
/usr/sbin/nginx -c /etc/nginx/letsencrypt.conf
LE_WORKING_DIR=/shared/letsencrypt DEBUG=1 /shared/letsencrypt/acme.sh --issue -d example.com -k 4096 -w /var/www/discourse/public
LE_WORKING_DIR=/shared/letsencrypt /shared/letsencrypt/acme.sh --installcert -d example.com --fullchainpath /shared/ssl/example.com.cer --keypath /shared/ssl/example.com.key --reloadcmd "sv reload nginx"
LE_WORKING_DIR=/shared/letsencrypt DEBUG=1 /shared/letsencrypt/acme.sh --issue -d example.com --keylength ec-256 -w /var/www/discourse/public
LE_WORKING_DIR=/shared/letsencrypt /shared/letsencrypt/acme.sh --installcert --ecc -d example.com --fullchainpath /shared/ssl/example.com_ecc.cer --keypath /shared/ssl/example.com_ecc.key --reloadcmd "sv reload nginx"
/usr/sbin/nginx -c /etc/nginx/letsencrypt.conf -s stop

Reconstruction avec des certificats propres

Supprimez les anciens fichiers de certificat et reconstruisez pour repartir de zéro :

rm -rf /var/discourse/shared/standalone/ssl
rm -rf /var/discourse/shared/standalone/letsencrypt
./launcher rebuild app

Limitations

Les certificats Let’s Encrypt valident uniquement le domaine et le chiffrement. Ils ne confirment pas la propriété ou l’identité, ce qui peut être signalé dans certains navigateurs. Pour plus de détails, consultez la communauté Let’s Encrypt.

143 « J'aime »
Setting up Let's Encrypt for multisite
How should I enable letsencrypt while discourse is beside other websites
Cant setting SLL (Let's Encrypt) for Discourse
Add to homescreen banner on Android
How to Set Up SSL in Discourse
Setting up SSL with my domain name and Discourse instance
Issue installing on subdomain
Completely automated SSL certificate generation
German 1&1-hosting user experience?
Problem with my SSL certificate
Replacement for whitelist-iframe
Site throws a blank screen after trying to enable LetsEncrypt
Missing file(discourse.conf) when launching after lets encrypt update?
Missing file(discourse.conf) when launching after lets encrypt update?
My discourse has either been hacked or catfished?
Discourse has stopped opening
Using a certificate when Discourse is installed behind a reverse proxy
Can discourse be installed in private mode
My Forum Is showing "Privacy Error" after upgrading SSL certificate
Using a certificate when Discourse is installed behind a reverse proxy
Why my forum not pop-up "Add to Home screen"(PWA) automatically?
Why my forum not pop-up "Add to Home screen"(PWA) automatically?
HTTPS : issue while trying to set up SSL certification
HTTPS : issue while trying to set up SSL certification
SSL received a record that exceeded the maximum permissible length
Discourse site loads via IP but via domain only header
Why is the Apple Touch Icon loaded via HTTP instead of HTTPS?
Defaultish app won't rebuild
Why is the Apple Touch Icon loaded via HTTP instead of HTTPS?
Why is the Apple Touch Icon loaded via HTTP instead of HTTPS?
Defaultish app won't rebuild
Unable to connect Discourse and WordPress
I have a very difficult problem installing ssl - please help
Not able to access site after letsencrypt cert expiry and rebuild due to IPV6
Cannot connect to IP address and no errors in log
Http logo urls after enabling LetsEncrypt
How to install SSL certificate in Discourse
White blank page on mobile app
Cloud installation not working
My forum goes offline after removing https
Trying to use Let's Encrypt + Cloudflare
New user invite links only give ERR_SSL_PROTOCOL_ERROR
[DigitalOcean] hostname having "www" in A records showing blank page
Error at LetsEncrypt validation
Migrate a phpBB3 forum to Discourse
Set Up Let's Encrypt with Second Domain for Existing Discourse Install
Not starting up after rebuild
Port 443 of computer does not appear to be accessible
Make auto-linked URLs use HTTPS
Unable to change domain name
LetsEncrypt certificate not renewing
How to deny request from unauthorized domain pointing to my IP address?
No login is possible after recovery a Discourse Backup on a new server
Letsencrypt issued on every build?
My Discourse is Down. Certificate Issue?
Setup Let’s Encrypt + non-www > www
No connection accepted on http / https after fresh installation on Ubuntu 22.04 LTS
SSL certificate expired and after that - Error 404 Not Found
SSL didn't renew automatically and I can't manually renew it
443 address already in use? Letencrypt
Set up Let’s Encrypt with multiple domains / redirects
Using Discourse with Cloudflare: Best Practices
./launcher rebuild app error bootstrap failed with exit code 125
Set up Let’s Encrypt with multiple domains / redirects
Uncaught ReferenceError: Discourse is not defined due to Cloudflare Rocket Loader
Let's Encrypt SSL Certificate Not Renewing
Uploads paths have 80 port but protocol is https
Bootstrap error during Discourse install: ENOENT - /etc/runit/1.d/letsencrypt
How to install Discourse in the AWS EC2 Instances(Ubuntu Server LTS)?
Question about the email configuration
Discourse-saml: There was an error authorizing your account
Problem in installing Let's Encrypt SSL for www and non-www
Email not sending out after installation. I need help please
Discourse not starting up: nginx: unable to open supervise/ok: file does not exist
Failed to bootstrap: Failure with receiving network data
Error when installing ssl Let's Encrypt
How to adjust dependencies for https?
Clicking links is stuck in click tracking, shows ERR_FAILED
Minimum needed to get LetsEncrypt working on a GCE instance
Can we install discourse in another container distro?
Problem with my SSL certificate
Cant setting SLL (Let's Encrypt) for Discourse
[PAID] setup ssl - Let's encrypt
Error after moving from HTTP to HTTPS
How to renew Let's Encrypt?
ServiceWorker script evaluation failed due to HTTP (not HTTPS)
Defaultish app won't rebuild
Too many redirects after enabling https