La nueva instalación en una nueva instancia EC2 con configuración estándar falla. Lanzé una instancia EC2 en AWS con Ubuntu 20.04.3 y apliqué todas las actualizaciones más recientes de Ubuntu. Ejecuté la instalación estándar sencilla que se encuentra aquí.
sudo -s
git clone https://github.com/discourse/discourse_docker.git /var/discourse
cd /var/discourse
./discourse-setup
La única particularidad es que, al ejecutarse la configuración, falló la conexión al servidor mediante HTTP(S); había olvidado abrir los dos puertos de entrada en AWS. Así que configuré manualmente mi archivo app.yml y ejecuté ./launcher rebuild app después de abrir los puertos en el grupo de seguridad de AWS.
El navegador no puede conectarse y mi registro de producción muestra lo siguiente.
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/message_bus-3.3.6/lib/message_bus.rb:729:in `block in new_subscriber_thread'
Excepción de trabajo: Error al conectar con Redis en localhost:6379 (Errno::EADDRNOTAVAIL)
Excepción de trabajo: Error al conectar con Redis en localhost:6379 (Errno::EADDRNOTAVAIL)
Excepción de trabajo: Error al conectar con Redis en localhost:6379 (Errno::EADDRNOTAVAIL)
Excepción de trabajo: Error al conectar con Redis en localhost:6379 (Errno::EADDRNOTAVAIL)
Excepción de trabajo: Error al conectar con Redis en localhost:6379 (Errno::EADDRNOTAVAIL)
Excepción de trabajo: Error al conectar con Redis en localhost:6379 (Errno::EADDRNOTAVAIL)
Error al conectar con Redis en localhost:6379 (Errno::EADDRNOTAVAIL) suscripción fallida, reconectando en 1 segundo. Pila de llamadas /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.4.0/lib/redis/client.rb:384:in `rescue in establish_connection'
Lanzé una nueva instancia EC2 porque estaba utilizando un servidor reutilizado, también con Ubuntu 20.04.3, que presentaba exactamente el mismo problema al instalar Discourse. Los mismos errores aparecen en el registro de producción. Así que pensé: empecemos desde cero y hagamos esto sencillo.
OK, ahora estoy bastante convencido de que hay un problema con el instalador de Discourse al usar Ubuntu 20.04.3 con las últimas actualizaciones. Acabo de ejecutar el instalador nuevamente y esta vez me aseguré de tener los puertos abiertos, por lo que nunca tuve que configurar manualmente el archivo app.yml (eliminando el error humano). Todo pareció ir bien; el instalador encontró el dominio y todo. Sin embargo… no hay sitio. El registro de producción muestra:
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/message_bus-3.3.6/lib/message_bus.rb:729:in `block in new_subscriber_thread'
Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)
Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL) subscribe failed, reconnecting in 1 second. Call stack /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.4.0/lib/redis/client.rb:384:in `rescue in establish_connection'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.4.0/lib/redis/client.rb:365:in `establish_connection'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.4.0/lib/redis/client.rb:117:in `block in connect'
Esto es demasiado sencillo como para que haya cometido algún error esta vez; solo ejecuté los scripts.
Aquí está la información de RAM y swap. Es una instancia AWS recién lanzada, sin modificaciones, con todas las actualizaciones estándar de Ubuntu. Se trata de una instancia EC2 tipo t2.small. No se realizó ningún cambio, adición, configuración o modificación. Los únicos comandos utilizados para actualizar antes de la instalación fueron sudo apt update y sudo apt upgrade. Esta es la tercera vez que intento instalar Discourse sin modificaciones en dos instancias separadas con el mismo sistema operativo (Ubuntu 20.04.3). Por eso, creo que podría haber algún problema con el instalador y la versión reciente.
$ free -h
total used free shared buff/cache available
Mem: 1.9Gi 973Mi 131Mi 36Mi 875Mi 855Mi
Swap: 2.0Gi 0.0Ki 2.0Gi
Espacio en disco, por si fuera de alguna preocupación:
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 39G 7.8G 31G 20% /
Acabo de ejecutar una instalación en un nuevo droplet de Digital Ocean y funcionó correctamente. No es el instalador.
Mi mejor suposición, aunque no tiene mucho sentido que aparezca el error de Redis, es que ejecutaste el instalador tantas veces que alcanzaste el límite de tasa de Let’s Encrypt, y eso es el verdadero problema.
Vuelve a intentarlo con un nombre de dominio diferente (por ejemplo, foro2.ejemplo.com).
Bueno, he estado reconstruyendo mucho porque he estado probando la transferencia de un foro desde un servidor antiguo.
¿Cómo demonios puedo solucionar este problema? Ni siquiera uso Let’s Encrypt. Después de la instalación exitosa, actualicé el archivo app.yml para cambiar el dominio y me aseguré de que la plantilla de Let’s Encrypt estuviera comentada en app.yml, pero al reconstruir no ayuda y obtengo el mismo error: fallo de Redis. ¿Estoy atrapado porque la llamada a Let’s Encrypt está integrada en el instalador?
A menos que estés usando un proxy inverso para proporcionar HTTPS, no puedes hacer eso. Debes tener HTTPS. Y si eliminas Let’s Encrypt, también debes eliminar la plantilla de HTTPS (cualquiera que sea su nombre).
No termino de entender por qué estás obteniendo el error de Redis; tal vez comentaste Redis cuando comentaste Let’s Encrypt. Esa es mi mejor suposición.
Bueno, si lees el hilo verás que se realizó una instalación simple en una instancia totalmente nueva, por lo que no pude comentar nada, ya que el instalador, basándose en las preguntas, es lo que crea el archivo app.yml. Por lo tanto, el fallo de Redis está directamente relacionado con el límite de tasa de Let’s Encrypt. Si eso puede ayudar de alguna manera al equipo de desarrollo.
Estoy usando un proxy, o mejor dicho Cloudflare, para servir el certificado SSL y conectar/entregar únicamente HTTPS.
Probé comentando la plantilla HTTPS: “templates/web.ssl.template.yml” y ejecuté un launcher rebuild app, por supuesto, teniendo también comentada la plantilla de Let’s Encrypt, y ocurrió lo mismo: error de Redis. Así que supongo que estoy atascado, ¿verdad? Qué decisión tan mala del instalador, no ofrecer una forma de omitir las llamadas a Let’s Encrypt. A menos que puedas proporcionarme algo más para probar, la paciencia será una virtud en esto. Agradezco mucho toda tu ayuda. Me quedo humildemente frustrado.