Estoy llegando a un punto de desesperación, porque intentar que el Bot de Discourse o Claude solucionen este problema parece imposible. No puedo explicar bien el problema, ya que no tengo mucho conocimiento al respecto, y creo que eso es lo que realmente me frustra.
Intentaré explicar lo que sucedió desde mi punto de vista.
Cuando estaba migrando de un contenedor único a dos contenedores, el archivo en samples/ usaba web-only y, por error, lo dejé así en lugar de usar web_only.
Entonces, debido a eso (creo), mis imágenes no se cargaban, porque se esperaba que un “elemento” apuntara a web_only, pero estaba configurado como web-only. Hice algunos cambios y las imágenes se arreglaron. El problema ahora son los certificados de Let’s Encrypt.
Le pedí al bot que me ayudara a solucionarlo; me dijo que esperara al día siguiente, porque el problema era el límite de tasa de los certificados. El problema se iba a resolver. No lo hizo. Luego le pregunté de nuevo, después le pregunté a Claude, y luego a Claude otra vez… y llevamos toda la semana en este ciclo de “espera hasta mañana a las X horas y se resolverá DEFINITIVAMENTE”. Nunca se resuelve. Ambos dicen: “Oh, lo siento, no debí asumir que se resolvería, probemos esto en su lugar, porque ahora sí se resolverá de verdad”. Y nunca pasa.
El sitio web en sí está en funcionamiento, pero siento que cada vez que quiero reconstruir, algo va a salir mal, y para ser honesto, no quiero depender de parches todo el tiempo.
Claude me dijo que añadiera algo a los hooks en web_only.yml, pero como no se menciona nada por el estilo en las instrucciones proporcionadas aquí en el foro, esperaba otra solución, como… resolver el problema real.
¿Podría alguien ayudarme a averiguar cuál es el problema y dónde se está rompiendo todo? Lo agradecería mucho, porque en este punto es agotador. No el trabajo en sí, sino no entender qué está pasando y por qué “esperar hasta mañana” nunca parece arreglar nada.
¡Gracias!
Le pedí a Claude que explicara cuál parece ser el problema, quizás eso ayude. Esto es lo que dijo:
Título: Configuración de dos contenedores: falta la carpeta de certificados ECC tras la división, el bucle --force agota el límite de tasa en cada arranque
Configuración: Dos contenedores (data + web_only), migrados de standalone. Plantillas: web, ratelimited, ssl, letsencrypt, cloudflare. Nombre de host alltiago.com, sin alias.
Síntoma: Cada inicio de web_only agota el límite de tasa de Let’s Encrypt y nginx falla al servir, devolviendo errores de conexión hasta que las líneas ECC se eliminan manualmente de /etc/nginx/conf.d/outlets/server/20-https.conf.
Lo que encontré:
/shared/letsencrypt/alltiago.com_ecc/ no existe en mi instalación. /shared/letsencrypt/alltiago.com/ (RSA) existe y funciona bien, renovándose normalmente.
En web.letsencrypt.ssl.template.yml:
cert_exists() {
[[ "$(cd ${LETSENCRYPT_DIR}/${DISCOURSE_HOSTNAME}$1 && openssl verify -CAfile <(openssl x509 -in ca.cer) fullchain.cer | grep "OK")" ]]
}
issue_cert "ec-256"
if ! cert_exists "_ecc"; then
issue_cert "ec-256" "--force"
fi
Dado que la carpeta no existe, cert_exists "_ecc" falla en cada arranque, por lo que se ejecuta --force y solicita un nuevo certificado ECC, independientemente de lo que haya en el disco. Esto es a través del hook after_ssl que parchea /etc/runit/1.d/install-ssl, por lo que se ejecuta en cada inicio del contenedor, no solo en el bootstrap.
Resultado: error 429 too many certificates (5) already issued for this exact set of identifiers in the last 168h. Luego --installcert se ejecuta de todos modos contra la carpeta vacía y escribe un /shared/ssl/alltiago.com_ecc.cer inutilizable. nginx está configurado con ambos certificados, no puede cargar el ECC y no sirve el contenido.
Confirmado que funciona: La validación ACME HTTP-01 tiene éxito (probado vía staging, el certificado ECC se emitió correctamente contra letsencrypt_test, se creó la estructura de directorios correcta). El certificado RSA se renovó con éxito hoy. Así que esto no es un problema de DNS, firewall o validación.
Preguntas:
- ¿Hay una forma soportada de recrear
alltiago.com_ecc/sin esperar a que pase el límite de tasa? - ¿Debería
cert_existsdevolviendo falso realmente desencadenar--forceen lugar de una emisión normal?--forceomite la comprobación de “certificado válido existente” y garantiza el agotamiento del límite de tasa cuando la carpeta no existe. - ¿Hay una forma documentada de ejecutar solo con RSA?
Dos notas factuales para que el hilo no se desvíe: la fecha de reintento pasó del 27 de agosto al 29 de agosto porque la renovación RSA de hoy consumió un cupo en la ventana móvil de 168 horas. Y la razón por la que nadie más reporta esto es que en una instalación normal ambos directorios se crean en el primer arranque y la rama --force nunca se ejecuta.