Ce guide est probablement obsolète car il y a maintenant très peu de raisons de ne pas utiliser le certificat Let’s Encrypt intégré qui fonctionne tout simplement. Voir aussi :
Le 2023-04-10 @pfaffman dit : Ceci est laissé ici principalement à des fins historiques.
Alors, vous souhaitez activer le SSL pour votre configuration Discourse basée sur Docker ? Faisons-le !
Ce guide suppose que vous avez utilisé tous les paramètres par défaut d’installation standard – un fichier de configuration de conteneur à /var/discourse/containers/app.yml et que Discourse docker est installé à : /var/discourse
Acheter un certificat SSL
Allez sur namecheap ou un autre fournisseur de certificats SSL et achetez un certificat SSL pour votre domaine. Suivez toutes les étapes documentées par eux pour générer la clé privée et la CSR, puis obtenez votre certificat. J’ai utilisé les paramètres par défaut d’apache, ils fonctionneront bien.
Gardez votre clé privée et votre certificat en lieu sûr.
Placer le certificat et la clé
Prenez un certificat signé et une clé et placez-les dans le dossier /var/discourse/shared/standalone/ssl/
La clé privée est :
/var/discourse/shared/standalone/ssl/ssl.key
Le certificat est
/var/discourse/shared/standalone/ssl/ssl.crt
Les noms de fichiers sont critiques ne vous en écartez pas, sinon votre modèle nginx ne saura pas où trouver le certificat.
Jetez un œil à votre fichier de configuration app.yml pour voir où le dossier partagé est monté.
volumes:
- volume:
host: /var/discourse/shared/standalone
guest: /shared
En substance, les fichiers doivent être situés à /shared/ssl/ssl.key /shared/ssl/ssl.crt à l’intérieur du conteneur.
Pour que tous les clients trouvent un chemin depuis votre certificat vers un certificat racine de confiance (c’est-à-dire pour ne pas afficher d’avertissements à vos utilisateurs), vous devrez peut-être concaténer les fichiers de certificat de votre fournisseur comme suit :
cat "Your PositiveSSL Certificate" "Intermediate CA Certificate" "Intermediate CA Certificate" >> ssl.crt
Configurer NGINX
Ajoutez une référence au modèle ssl nginx à partir de votre fichier de configuration app.yml :
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
- "templates/web.ssl.template.yml"
Configurer votre conteneur Docker
Indiquez à votre conteneur d’écouter sur SSL
expose:
- "80:80"
- "443:443"
Amorcer votre conteneur Docker
Reconstruisez votre application
./launcher rebuild app
Profitez-en, vous avez terminé !
Dépannage
Assurez-vous de lire les journaux en utilisant
./launcher logs app
Si quelque chose ne va pas.
Comment cela fonctionne
Le modèle configure nginx avec TLSv1.2 et TLSv1.3, des suites de chiffrement fortes, des en-têtes HSTS et des paramètres de ticket de session. Il utilise des prises de configuration nginx pour injecter la configuration SSL.
L’image contient des règles de réécriture qui redirigeront toutes les requêtes sur le port 80 vers https://DISCOURSE_HOST_NAME, et redirigeront également les requêtes pour d’autres noms d’hôte sur le port 443 vers le nom d’hôte canonique.
La personnalisation de cette configuration est très facile, voir :
Vous pouvez faire une copie de ce fichier et modifier le modèle selon les besoins.
L’avantage d’utiliser des modèles et des prises ici est que nous conservons le reste de la configuration NGINX recommandée par Discourse, elle évolue avec le temps.
Tester votre configuration
Voir SSL Server Test (Powered by Qualys SSL Labs) pour s’assurer que tout fonctionne correctement. Il est possible que certains navigateurs et combinaisons de systèmes d’exploitation soient satisfaits d’un https partiellement configuré, alors vérifiez-le ici en premier.