Permettre SSL / HTTPS pour votre installation Discourse Docker

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.

75 « J'aime »
I need help with SSL
Broken image since https
Troubles installing SSL
NGINX Proxy Mixed Content Error
SSL on Discourse / DO sub-domain of Heroku hosted domain
Force Discourse to use SSL/HTTPS through CloudFlare
How to force redirect from https to http on Docker installation
SSL Let's Encrypt Error After Installation
Cannot connect to IP address and no errors in log
Can i change Lets Encrypt to EssentialSSL / Wildcard SLL
I have a very difficult problem installing ssl - please help
Go Daddy SSL certificate installation error in D.O. server
How Do I Uninstall SSL Certificate?
How to Set Up SSL in Discourse
Site down after enabling SSL
SSL installation
SSL certificate expired and after that - Error 404 Not Found
Skipping built-in SSL certificate?
Unable to renew Let's encrypt certificate
Adding SSL certificate
Getting Cloudflare 521 Error After Upgrade to 3.5.0.beta8-dev
Let's encrypt failing for IP behind firewall
Unable To Connect/Connection Refused due to https certificates
Rebuild goes into a loop
Transfer from bitnami to normal discourse
My site is down with a weird SSL notification
Https with let's encrypt behind a vpn?
Cannot install custom SSL new_file: no such file
Favicon is failing to load for logged-in users
How to install SSL certificate in Discourse
Disabe letsencrypt failed and Run discourse-setup had some not normal alert
How to modify Dockerfile?
DNS validation for Let's Encrypt?
How might we better structure #howto?
Hit Let's encrypt renewal limit
Unable To Connect/Connection Refused due to https certificates
Setting up Discourse with SSL on Docker with AWS ELB breaks and returns 503 Service Unavailable (Back-end server is at capacity)
Disabe letsencrypt failed and Run discourse-setup had some not normal alert
Global setting to hide origin IP from everywhere - is it possible?
Latest update requires cache purge in CloudFlare