Configurar Let's Encrypt con múltiples dominios / redireccionamientos

Hola @pfaffman, la edición a la publicación original tiene un + erróneo en la línea to:, lo que rompe la expresión regular. Debería eliminarse.

Por separado, el siguiente párrafo necesita ser editado ya que ya no tiene sentido:

Hay dos patrones que deben ser reemplazados, uno que termina en --keylength y otro que termina en --fullchainpath (en el archivo real, tu dominio original está antes de cada uno de estos modificadores). Introduce tu (sub)dominio (y cualquier subdominio adicional precedido por -d ) y luego añade lo siguiente a la sección hooks de tu app.yml (hacia el final del archivo):

Sugiero:

Usa domain1 y domain2 en esta publicación para generar el código que necesitarás. domain1 es tu dominio original y domain2 es el dominio adicional que deseas agregar. Agrega el bloque after_ssl: resultante a la sección hooks: de tu app.yml y haz un launcher rebuild app.

1 me gusta

Oops. Eliminé el + y ajusté el texto. Volveré a mirar más tarde cuando esté en un ordenador.

Hola @textkit, esto es una wiki, así que puedes hacer más ediciones si quieres.

Desde la última actualización a 3.5.0.beta8-dev

/etc/runit/1.d/letsencrypt

falta en el contenedor de Docker. Por lo tanto, no se compilará. Solución alternativa: https://www.forcewww.com/

Así que esto dejó de funcionar:

## Añadir certificado Let's Encrypt para nombre de dominio no www y www
  after_ssl:
    - replace:
        filename: "/etc/runit/1.d/letsencrypt"
        from: /--keylength/
        to: "-d example.de -d www.example.de --keylength"

Antes de eliminar este tipo de herramientas/binarios del contenedor de Docker, sería bueno recibir una notificación…

4 Me gusta

¿Es este un cambio en la forma en que Discourse maneja LetsEncrypt o un cambio en LetsEncrypt en sí?

Tengo un servidor que actualmente se ve afectado por este problema. Por ahora, mi solución es comentar esa parte de app.yml, pero creo que necesitamos alguna forma de agregar estos certificados adicionales a la configuración en el futuro.

2 Me gusta

Discourse ha movido eso a otro archivo. Actualmente se está trabajando en ello. Intentaré echar un vistazo en los próximos días para ver qué se necesita para que sea posible admitir varios subdominios.

2 Me gusta

Edité el OP con una nueva plantilla, pero aún no la he probado.

1 me gusta

No, esto no funciona:

FALLÓ

Errno::ENOENT: No existe tal archivo o directorio @ rb_sysopen - /usr/local/bin/letsencrypt
Ubicación del fallo: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.3.0/lib/pups/replace_command.rb:11:in `read’
El reemplazo falló con los parámetros {“filename”=>“/usr/local/bin/letsencrypt”, “from”=>“/-d spokes.nz/”, “to”=>“-d spokes.nz -d www.spokes.nz”}
El arranque falló con el código de salida 1
FALLÓ EL ARRANQUE por favor desplázate hacia arriba y busca mensajes de error anteriores, puede haber más de uno.

2 Me gusta

Debe ser demasiado pronto.

Quizás intenta poner el reemplazo en la estrofa de abajo, donde solía estar la información de SSH, si eso tiene sentido (estoy en mi teléfono, intentaré mirar mañana).

1 me gusta

Hola @nathank

Supongo que el error que estás recibiendo podría estar relacionado con la falta de un espacio antes de la barra final y las comillas finales en las respectivas líneas de la estrofa sugerida en tu archivo app.yml.

Infiero por el mensaje de error que tus respectivas líneas son (textualmente):

from: /-d spokes.nz/
to: “-d spokes.nz -d www.spokes.nz”

Lo digo porque en mi caso las líneas son:

from: /-d nzarchitecture.net.nz /
to: "-d nzarchitecture.net.nz -d www.nzarchitecture.net.nz "

Y con espacios justo antes del final de cada línea, como se muestra, ahora puedo reconstruir Discourse sin lanzar ese error. (si miras de cerca verás que la estrofa actualizada de @pfaffman publicada al principio de este hilo mostraba esos espacios adicionales).

Tampoco tengo ningún archivo en el directorio usr/local/bin/ (como se indica en tu mensaje de error), lo que me hizo sospechar que la falta de ese archivo letsencrypt no es lo que desencadena el error.

Dicho esto, para mí, aunque Discourse funciona bien en su URL nzarchitecture.net.nz, desafortunadamente todavía obtengo un error de certificado si escribo www.nzarchitecture.net.nz en un navegador, no sé si esto se debe a la falta de ese archivo.

2 Me gusta

Solo señalo que actualmente estoy intentando integrar esto en las variables de entorno para manejarlas directamente en discourse_docker, algo así como una lista separada por comas de alias de nombres de host. Parece un caso de uso lo suficientemente común como para manejarlo directamente.

Hará que la configuración sea más fácil para este caso, por lo que nadie necesitará hacer modificaciones en sus app.ymls.

Mi plan actual es con DISCOURSE_HOSTNAMEwww.domain.com

Permitir variables de entorno como:
DISCOURSE_HOSTNAME_ALIASES: domain.com,other.domain.com extraerá el certificado, válido para todos los nombres de host.

(Mientras estoy en ello, las renovaciones automáticas de Let’s Encrypt tampoco parecen funcionar correctamente, así que también las estoy arreglando).

8 Me gusta

¡Eso es genial! Muchas gracias. ¡Eso sin duda hará las cosas más fáciles!

3 Me gusta

¡Me lo perdí! Hice lo que sugeriste, pero sigo teniendo un error de arranque:

FALLÓ

Errno::ENOENT: No such file or directory @ rb_sysopen - /usr/local/bin/letsencrypt
Ubicación del fallo: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.3.0/lib/pups/replace_command.rb:11:in `read’
replace falló con los parámetros {“filename”=>“/usr/local/bin/letsencrypt”, “from”=>“/-d spokes.nz /”, “to”=>"-d spokes.nz -d www.spokes.nz "}
bootstrap falló con el código de salida 1
FALLÓ EL ARRANQUE por favor desplázate hacia arriba y busca mensajes de error anteriores, puede haber más de uno.

¡¡¡Maravilloso!!!

3 Me gusta

Probablemente no sea el problema central aquí, pero en mi intento de solución, también actualicé la versión de Docker que se ejecuta en Digital Ocean de 20.0.4 (creo) a 28.3.3; posiblemente eso ayudó, al menos con este error. Si no es más, eliminó las advertencias de ‘obsoleto’ de Docker que estaba recibiendo al principio del proceso de reconstrucción.

1 me gusta

Necesitas eliminar la parte que intenta modificar el archivo lets encrypt y esperar a que se acepte la PR.

2 Me gusta

¡Me di cuenta de eso! Afortunadamente, estoy en una instalación de dos contenedores, así que no es gran cosa.

¿Algún avance con esto hasta ahora?

1 me gusta

Sí, tengo una PR abierta aquí pendiente de revisión:

4 Me gusta

Hola a todos, solo para informarles, los dominios múltiples ahora están fusionados. En la última versión de discourse_docker, ahora pueden incluir las plantillas ssl y letsencrypt y configurar variables de entorno del tipo DISCOURSE_HOSTNAME_ALIASES: domain.com,other.domain.com para configurar nombres de host alternativos.

Su sitio además obtendrá los nombres de host configurados con la solicitud de certificado sin cambios adicionales en la configuración.

4 Me gusta

[quote=“featheredtoast, post:172, topic:56685”]Ahora puedes incluir las plantillas ssl y letsencrypt y configurar variables de entorno del tipo DISCOURSE_HOSTNAME_ALIASES: domain.com,other.domain.com para configurar nombres de host alternativos.

[/quote]

Perdona mi ignorancia, pero ¿se puede editar esto a través de alguna configuración del sitio o hay que editar algo en app.yml?

Si es lo primero, no tuve suerte encontrándolo después de actualizar a la última versión y, si es lo segundo, ¿qué se debería modificar específicamente en app.yml?

Va en app.yml. No lo maneja Discourse, sino NGINX en el contenedor y no tiene acceso a la base de datos de Discourse.

Va en la sección ENV

env:
   DISCOURSE_HOSTNAME_ALIASES: domain.com,other.domain.com

Solo incluirías dominios adicionales a los que te gustaría que la gente pudiera enlazar y ser redirigida al nombre de host real de tu sitio.

3 Me gusta

Perfecto, ¡todo funciona, gracias!

Sería aún mejor si hubiera alguna forma inteligente para que Discourse escribiera las alias proporcionadas por el administrador en el propio archivo app.yml al actualizar, o para dejar la información donde una instrucción de app.yml pueda leerla.

2 Me gusta