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.