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

Vaya, finalmente funcionó:

true | openssl s_client -connect www.starzen.space:443 2>/dev/null \
| openssl x509 -noout -text \
| perl -l -0777 -ne '@names=/\\bDNS:([^\\s,]+)/g; print join("\n", sort @names);'
starzen.space
www.starzen.space

Comenté las sentencias if en el script de letsencrypt para forzar una reemisión. Esto no es una solución de ‘fábrica’, por supuesto.

Sin embargo, sugiere que hubo un problema con el ‘estado’ en lugar de con las opciones proporcionadas.

Parece que el script actual puede verse afectado dependiendo del estado anterior, pero si fuerzas una reemisión, puedes solucionarlo.

¡Pero ahora tengo un dominio raíz que funciona! :tada:

4 Me gusta

Es parte de la instalación estándar. Consulte User Guide — Certbot 5.1.0 documentation y desplácese hacia abajo hasta Administración de certificados y también inmediatamente debajo de eso, Recreación y actualización de certificados existentes.

Estos comandos se ejecutarían desde donde ejecutó Certbot inicialmente.

1 me gusta

Tengo una instalación estándar y certbot no está en uso. Ni en el “nivel de servidor normal”, ni si digo primero ./launcher enter app.

Supongo que falta debido a acme.sh.

3 Me gusta

Creo que me estoy encontrando con un problema similar. Pensé que era porque usé un sub-subdominio (Let's Encrypt with sub-subdomain?) pero lo probé con un subdominio normal y el certificado todavía no se está generando para el nuevo sitio.

Estoy tratando de averiguar cómo lo hackeaste para que funcione, pero no puedo seguir :grimacing:

¿Qué hiciste para que te funcionara?

Si fue esto, ¿cuáles de las sentencias if comentaste?

Además, ¿alguna idea de qué podría estar causando este nuevo problema?

1 me gusta

Mi problema estaba relacionado con un nombre de dominio caducado en mi configuración multisitio:

2 Me gusta

Hola @Brahn,

Gracias por la reciente actualización de tus instrucciones.

Estaba viendo un error de certificado después de apuntar mi dominio raíz a un subdominio. He actualizado mi archivo app.yml con la versión más reciente que querías probar, y el problema está resuelto. :slightly_smiling_face:

4 Me gusta

También he tenido que implementar esto, después de cambiar de dominio y que la redirección fallara.

He hecho un pequeño ajuste en la wiki, eliminando las instrucciones antiguas y corrigiendo los espacios en las nuevas.

Sin embargo, hasta ahora no parece haber funcionado. Sospecho que necesito forzar la emisión de un nuevo certificado. ¿Alguien puede guiarme sobre cómo hacerlo fácilmente?

Estoy bastante seguro de que acabo de hacer una reconstrucción. Podría ser que algo haya cambiado de nuevo. ¿Todavía tienes el certificado antiguo? ¿Cuál es el nombre del host? Puedes enviarme un mensaje privado si quieres.

Gracias Jay - forum.hinz.org.nz es el dominio antiguo (y ehealthforum.nz el nuevo).

Hice una reconstrucción, (solo web_only como 2-container) pero eso no pareció solucionarlo.

¿También cambiaste el nombre del host? ¿Hiciste Cambiar el nombre de dominio o renombrar tu Discourse?

Consejo no solicitado: La mejor práctica parece ser usar www en lugar del dominio principal. Los navegadores que uso hacen casi imposible saber que www está ahí.

Mi única suposición es que el espacio al final dentro de las comillas es significativo y tú no lo tienes.

Creo que entraría en el contenedor, examinaría y trataría de ejecutar acme de la manera en que lo hace y vería qué sucede; nunca recuerdo cómo hacer eso o dónde buscar el comando acme; tengo que averiguarlo cada vez, así que no puedo decírtelo. Es posible que puedas verlo en docker logs web_only.

Juro que esto funcionó la última vez que edité esto. Acabo de revisar el sitio al que lo apliqué y parece que tiene su certificado válido adicional funcionando. Pero es concebible que tenga una imagen base diferente a la que existe ahora y se rompa en la próxima reconstrucción.

Intentaré revisar esto de nuevo cuando tenga la oportunidad. Quizás la próxima semana.

1 me gusta

Sí, hice todo eso sin problemas.

De hecho, pero solo vale la pena hacerlo si planeas usar una CDN o subdominios (yo no):
https://hostadvice.com/blog/domains/what-is-apex-domain/

Intenté agregarlo, pero no hizo ninguna diferencia.

Esto es bastante revelador (haz clic para revelar)

> root@forumhinz:/var/discourse# docker logs web_only
> run-parts: executing /etc/runit/1.d/00-ensure-links
> run-parts: executing /etc/runit/1.d/00-fix-var-logs
> run-parts: executing /etc/runit/1.d/01-cleanup-web-pids
> run-parts: executing /etc/runit/1.d/anacron
> run-parts: executing /etc/runit/1.d/cleanup-pids
> Cleaning stale PID files
> run-parts: executing /etc/runit/1.d/copy-env
> run-parts: executing /etc/runit/1.d/letsencrypt
> [Sat 9 Sep 08:19:27 UTC 2023] Domains not changed.
> [Sat 9 Sep 08:19:27 UTC 2023] Skip, Next renewal time is: 2023-10-26T08:24:32Z
> [Sat 9 Sep 08:19:27 UTC 2023] Add ‘–force’ to force to renew.
> [Sat 9 Sep 08:19:29 UTC 2023] Installing key to: /shared/ssl/ehealthforum.nz.key
> [Sat 9 Sep 08:19:29 UTC 2023] Installing full chain to: /shared/ssl/ehealthforum.nz.cer
> [Sat 9 Sep 08:19:29 UTC 2023] Run reload cmd: sv reload nginx
> warning: nginx: unable to open supervise/ok: file does not exist
> [Sat 9 Sep 08:19:29 UTC 2023] Reload error for :
> [Sat 9 Sep 08:19:29 UTC 2023] Domains not changed.
> [Sat 9 Sep 08:19:30 UTC 2023] Skip, Next renewal time is: 2023-10-26T08:24:45Z
> [Sat 9 Sep 08:19:30 UTC 2023] Add ‘–force’ to force to renew.
> [Sat 9 Sep 08:19:31 UTC 2023] Installing key to: /shared/ssl/ehealthforum.nz_ecc.key
> [Sat 9 Sep 08:19:31 UTC 2023] Installing full chain to: /shared/ssl/ehealthforum.nz_ecc.cer
> [Sat 9 Sep 08:19:31 UTC 2023] Run reload cmd: sv reload nginx
> warning: nginx: unable to open supervise/ok: file does not exist
> [Sat 9 Sep 08:19:31 UTC 2023] Reload error for :
> Started runsvdir, PID is 570
> supervisor pid: 578 unicorn pid: 590

¡Esto implica que si no encuentro una manera de forzar la renovación, tendré que esperar hasta el 2023-10-26T08:24:00Z antes de que el problema se solucione solo!

Voy a intentar algunas cosas, deséenme suerte.

más tarde…

¡Éxito!

Bueno, después de intentar y fallar varias veces para reiniciar la renovación del certificado, finalmente me mudé a un nuevo servidor (esto ya estaba planeado).

Sorprendentemente, esto renovó el certificado perfectamente con la configuración de la OP. Quién lo diría.

No estoy seguro de cómo hacer esto mejor en el futuro. Quizás establecer la configuración de DNS de tu nuevo dominio uno o dos meses antes, y luego agregar esas líneas a tu app.yml.

2 Me gusta

Agregué esto a mi archivo app.yml, ¿tengo que reconstruir? ¿o simplemente funciona?
también en el
“from: /-d www.first-domain.com/” ¿pongo el dominio al que quiero redirigir o mi subdominio?

1 me gusta

Sí, cualquier cambio en app.yml suele requerir una reconstrucción.

3 Me gusta

He reconstruido y ahora mi sitio no se puede alcanzar. ¿Debo reconstruir de nuevo?
dice esto después de la reconstrucción

"Pups::ExecError: cd /var/www/discourse & su discourse -c 'bundle exec rake themes:update assets:precompile' falló con retorno #<Process::Status: pid 3575 exit 134>
Ubicación del fallo: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
exec falló con los parámetros {\"cd\"=>\"$home\", \"hook\"=>\"assets_precompile\", \"cmd\"=>[\"su discourse -c 'bundle exec rake themes:update assets:precompile'\"]}
falló el arranque con el código de salida 134
** FALLÓ EL ARRANQUE ** por favor, desplázate hacia arriba y busca mensajes de error anteriores, puede haber más de uno."
1 me gusta

¿El proceso de reconstrucción se desarrolló sin problemas y sin errores?

2 Me gusta

Por favor, haz esto y comparte los mensajes de error.

2 Me gusta
110:M 10 Dec 2023 13:32:18.543 # Servidor inicializado
110:M 10 Dec 2023 13:32:18.543 # ADVERTENCIA ¡Memory overcommit debe estar habilitado! Sin él, un guardado en segundo plano o la replicación pueden fallar en condiciones de poca memoria. Al estar deshabilitado, también puede causar fallos sin condiciones de poca memoria, ver https://github.com/jemalloc/jemalloc/issues/1328. Para solucionar este problema, agregue 'vm.overcommit_memory = 1' a /etc/sysctl.conf y luego reinicie o ejecute el comando 'sysctl vm.overcommit_memory=1' para que esto tenga efecto.
110:M 10 Dec 2023 13:32:18.544 * Cargando RDB producido por la versión 7.0.7

Recibí estas advertencias, no estoy seguro si son importantes.

warning "@glint/environment-ember-loose@1.1.0" tiene dependencia de par no cumplida "@glimmer/component@^1.1.2".
warning "@glint/environment-ember-template-imports@1.1.0" tiene dependencia de par no cumplida "ember-template-imports@^3.0.0".
warning El campo de resolución "unset-value@2.0.1" es incompatible con la versión solicitada "unset-value@^1.0.0"
warning El patrón ["wrap-ansi@^7.0.0"] está intentando desempaquetar en el mismo destino "/home/discourse/.cache/yarn/v6/npm-wrap-ansi-cjs-7.0.0-67e145cff510a6a6984bdf1152911d69d2eb9e43-integrity/node_modules/wrap-ansi-cjs" que el patrón ["wrap-ansi-cjs@npm:wrap-ansi@^7.0.0"]. Esto podría resultar en un comportamiento no determinista, omitiendo.
warning " > discourse-markdown-it@1.0.0" tiene dependencia de par no cumplida "xss@*".
warning "workspace-aggregator-68bace53-129d-4a2d-85c3-4685b91c92ee > discourse > @ember/legacy-built-in-components@0.5.0" tiene una dependencia de par incorrecta "ember-source@>= 4.8".
warning "workspace-aggregator-68bace53-129d-4a2d-85c3-4685b91c92ee > discourse > @uppy/aws-s3@3.0.6" tiene una dependencia de par incorrecta "@uppy/core@^3.1.2".
warning "workspace-aggregator-68bace53-129d-4a2d-85c3-4685b91c92ee > discourse > @uppy/aws-s3-multipart@3.1.3" tiene una dependencia de par incorrecta "@uppy/core@^3.1.2".
warning "workspace-aggregator-68bace53-129d-4a2d-85c3-4685b91c92ee > discourse > @uppy/xhr-upload@3.1.1" tiene una dependencia de par incorrecta "@uppy/core@^3.1.2".
warning "workspace-aggregator-68bace53-129d-4a2d-85c3-4685b91c92ee > discourse-plugins > ember-this-fallback@0.4.0" tiene dependencia de par no cumplida "ember-source@^3.28.11 || ^4.0.0".
warning "workspace-aggregator-68bace53-129d-4a2d-85c3-4685b91c92ee > discourse > @uppy/aws-s3 > @uppy/xhr-upload@3.3.0" tiene una dependencia de par incorrecta "@uppy/core@^3.2.1".
<--- Últimos GCs --->

[3710:0x6291170]   681247 ms: Scavenge 942.0 (1034.0) -> 940.8 (1034.0) MB, 62.9 / 0.0 ms  (mu promedio = 0.704, mu actual = 0.878) fallo de asignación;
[3710:0x6291170]   681616 ms: Scavenge 942.4 (1034.0) -> 941.4 (1034.0) MB, 18.3 / 0.0 ms  (mu promedio = 0.704, mu actual = 0.878) fallo de asignación;
[3710:0x6291170]   681911 ms: Scavenge 943.0 (1034.0) -> 942.0 (1038.0) MB, 46.8 / 0.0 ms  (mu promedio = 0.704, mu actual = 0.878) fallo de asignación;
ERROR FATAL: Se alcanzó el límite del heap. Fallo de asignación - Memoria del heap de JavaScript agotada
 1: 0xb83f50 node::Abort() [ember]
 2: 0xa94834  [ember]
 3: 0xd647c0 v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [ember]
 4: 0xd64b67 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [ember]
 5: 0xf42265  [ember]
 6: 0xf5474d v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [ember]
 7: 0xf2ee4e v8::internal::HeapAllocator::AllocateRawWithLightRetrySlowPath(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment) [ember]
 8: 0xf30217 v8::internal::HeapAllocator::AllocateRawWithRetryOrFailSlowPath(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment) [ember]
 9: 0xf113ea v8::internal::Factory::NewFillerObject(int, v8::internal::AllocationAlignment, v8::internal::AllocationType, v8::internal::AllocationOrigin) [ember]
10: 0x12d674f v8::internal::Runtime_AllocateInYoungGeneration(int, unsigned long*, v8::internal::Isolate*) [ember]
11: 0x17035b9  [ember]
Abortado (volcado del núcleo)
error El comando falló con el código de salida 134.

y mi sitio dice

Este sitio no se puede alcanzar

forum.mysite.ca rechazó la conexión.

Intenta:

  • Comprobar la conexión
  • [Comprobar el proxy y el cortafuegos]

ERR_CONNECTION_REFUSED

este es el aspecto de mi app.yml

hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-zoom.git
  after_ssl:
    - replace:
        filename: "/etc/runit/1.d/letsencrypt"
        from: "-d www.mysite.ca/"
        to: "-d www.mysite.ca -d mysite.ca "
## Cualquier comando personalizado para ejecutar después de la compilación
1 me gusta

¿Cuánta memoria tiene tu servidor y tienes swap habilitado (free -h para ver)?

               total        used        free      shared  buff/cache   available
Mem:             957         190         371           3         395         613
Swap:           2047          79        1968

Tu servidor tiene 1 GB de RAM y 2 GB asignados para el intercambio (swap). Curiosamente, el proceso de reconstrucción fallaría con esta capacidad de intercambio.

Puedes intentar reconstruir de nuevo. Si falla, es posible que necesites aumentar la memoria del servidor, si es posible (solo para el proceso de compilación, puedes reducirla una vez que termine).

1 me gusta