Permitir SSL / HTTPS para su configuración de Discourse Docker

Es probable que esta guía esté desactualizada, ya que ahora hay muy pocas razones para no usar el certificado Let’s Encrypt incorporado que Simplemente Funciona. Consulte también:

2023-04-10 @pfaffman dice: Esto se deja aquí principalmente con fines históricos.

Entonces, ¿quiere habilitar SSL para su configuración de Discourse basada en Docker? ¡Hagámoslo!

Esta guía asume que utilizó todas las opciones predeterminadas de instalación estándar: un archivo de configuración de contenedor en /var/discourse/containers/app.yml y Discourse docker instalado en: /var/discourse

Comprar un certificado SSL

Vaya a namecheap o a algún otro proveedor de certificados SSL y compre un certificado SSL para su dominio. Siga todos los pasos documentados por ellos para generar la clave privada y el CSR y finalmente obtenga su certificado. Utilicé las opciones predeterminadas de apache, funcionarán bien.

Mantenga su clave privada y su certificado en un lugar seguro.

Colocar el certificado y la clave

Obtenga un certificado firmado y una clave y colóquelos en la carpeta /var/discourse/shared/standalone/ssl/

La clave privada es:

/var/discourse/shared/standalone/ssl/ssl.key

El certificado es:

/var/discourse/shared/standalone/ssl/ssl.crt

Los nombres de archivo son críticos, no se desvíe de ellos o su plantilla nginx no sabrá dónde encontrar el certificado.

Eche un vistazo a su archivo de configuración app.yml para ver dónde está montada la carpeta compartida.

    volumes:
      - volume:
          host: /var/discourse/shared/standalone
          guest: /shared

En esencia, los archivos deben estar ubicados en /shared/ssl/ssl.key /shared/ssl/ssl.crt dentro del contenedor.

Para que todos los clientes encuentren una ruta desde su certificado hasta un certificado raíz de confianza (es decir, no muestren advertencias a sus usuarios), es posible que deba concatenar los archivos de certificado de su proveedor de la siguiente manera:

cat "Your PositiveSSL Certificate" "Intermediate CA Certificate" "Intermediate CA Certificate" >> ssl.crt

Configurar NGINX

Agregue una referencia a la plantilla ssl de nginx desde su archivo de configuración 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"

Configurar su contenedor Docker

Indique a su contenedor que escuche en SSL

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

Inicializar su contenedor Docker

Reconstruya su aplicación

./launcher rebuild app

¡Disfrute, ha terminado!

Solución de problemas

Asegúrese de revisar los registros usando:

./launcher logs app

Si algo sale mal.

Cómo funciona esto

La plantilla configura nginx con TLSv1.2 y TLSv1.3, conjuntos de cifrado fuertes, encabezados HSTS y configuraciones de ticket de sesión. Utiliza salidas de configuración de nginx para inyectar la configuración SSL.

La imagen tiene reglas de reescritura que redirigirán cualquier solicitud en el puerto 80 a https://DISCOURSE_HOST_NAME, y también redirigirán las solicitudes para otros nombres de host en el puerto 443 al nombre de host canónico.

Personalizar esta configuración es muy fácil, vea:

Puede hacer una copia de ese archivo y modificar la plantilla según sea necesario.

La ventaja de usar plantillas y salidas aquí es que podemos mantener el resto de la configuración NGINX recomendada por Discourse, ya que cambia con el tiempo.

Probar su configuración

Consulte SSL Server Test (Powered by Qualys SSL Labs) para asegurarse de que todo funcione correctamente. Es posible que algunos navegadores y combinaciones de sistemas operativos se sientan cómodos con https parcialmente configurado, así que compruébelo aquí primero.

75 Me gusta
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