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é.
Niveau d’utilisateur requis : Administrateur système
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 ?
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"
Discourse est-il le seul site web sur votre serveur ?
Si vous utilisez déjà
web.socketed.template.ymlparce 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 :
- Démarre un nginx léger pour servir les défis ACME sur le port
80avant que lenginxprincipal ne soit lancé. - Émet à la fois un certificat RSA (4096 bits) et un certificat ECDSA (ec-256) Let’s Encrypt en mode webroot avec
/var/www/discourse/publiccomme répertoire. - Installe les certificats dans le répertoire
/shared/ssl/attendu parnginx. 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. - 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.