La versión más reciente de Discourse rompe la reconstrucción, el puerto de Redis ya está en uso

SO: Ubuntu 20.04
Servidor: vServer 4 núcleos, 16 GB
Disco: SSD 160 GB

Recientemente actualicé a la versión más reciente de Discourse. Ahora tengo el problema de que Discourse informa que el puerto 6379 está en uso, por lo que no se puede construir el contenedor:

Cuando verifico todos los puertos en uso, ese puerto está libre:

Algo en la comprobación de Discourse falla al reconocer que el puerto está libre.
En Docker puedo ver que solo se inició el contenedor de Discourse y todo lo demás falla:

Este problema realmente se ha convertido en una paradoja.
Discourse inicia el pid de redis-server en Docker y luego se bloquea, porque ya había iniciado el proceso:

Tengo una instalación principal de Redis en el host en ejecución, pero esa está en el puerto 6800, así que no debería interferir.

Claramente parece que la verificación falla sobre sí misma, porque Redis se inicia correctamente y luego reporta un error: dirección en uso:

¿Podrías compartir tu archivo app.yml, por favor?

Sí, claro, gracias por revisarlo :smiley:. Aquí está mi app.yml:

## esta es la plantilla del contenedor Docker de Discourse todo en uno y autónomo
##
## Después de realizar cambios en este archivo, DEBES reconstruir
## /var/discourse/launcher rebuild app
##
## ¡TEN *MUCHO* CUIDADO AL EDITAR!
## ¡LOS ARCHIVOS YAML SON SUPER SUPER SENSIBLES A ERRORES EN LOS ESPACIOS EN BLANCO O EN LA ALINEACIÓN!
## visita http://www.yamllint.com/ para validar este archivo según sea necesario

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## Descomenta estas dos líneas si deseas agregar Lets Encrypt (https)
  #- "templates/web.ssl.template.yml"
  #- "templates/web.letsencrypt.ssl.template.yml"

## ¿Qué puertos TCP/IP debe exponer este contenedor?
## Si deseas que Discourse comparta un puerto con otro servidor web como Apache o nginx,
## consulta https://meta.discourse.org/t/17247 para obtener detalles
expose:
  - "12080:80"   # http
  - "12443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## Establece db_shared_buffers a un máximo del 25% de la memoria total.
  ## se establecerá automáticamente durante el arranque según la RAM detectada, o puedes sobrescribirlo
  db_shared_buffers: "4096MB"

  ## puede mejorar el rendimiento de ordenación, pero aumenta el uso de memoria por conexión
  #db_work_mem: "40MB"

  ## ¿Qué revisión de Git debe usar este contenedor? (predeterminado: tests-passed)
  #version: tests-passed

env:
  LANG: en_US.UTF-8
  # DISCOURSE_DEFAULT_LOCALE: en

  ## ¿Cuántas solicitudes web simultáneas se admiten? Depende de la memoria y los núcleos de CPU.
  ## se establecerá automáticamente durante el arranque según los CPUs detectados, o puedes sobrescribirlo
  UNICORN_WORKERS: 8

  ## TODO: El nombre de dominio al que responderá esta instancia de Discourse
  DISCOURSE_HOSTNAME: discourse.forum

  ## Descomenta si deseas que el contenedor se inicie con el mismo
  ## nombre de host (opción -h) especificado anteriormente (predeterminado "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: Lista de correos electrónicos separados por comas que serán administradores y desarrolladores
  ## en el registro inicial, por ejemplo 'usuario1@ejemplo.com,usuario2@ejemplo.com'
  DISCOURSE_DEVELOPER_EMAILS: 'developer@email'

  ## TODO: El servidor de correo SMTP utilizado para validar nuevas cuentas y enviar notificaciones
  DISCOURSE_SMTP_ADDRESS: mailserver
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: email@email
  DISCOURSE_SMTP_PASSWORD: "****"
  #DISCOURSE_SMTP_AUTHENTICATION: plain
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (opcional, predeterminado true)

  ## Si agregaste la plantilla de Lets Encrypt, descomenta a continuación para obtener un certificado SSL gratuito
  #LETSENCRYPT_ACCOUNT_EMAIL: me@example.com

  ## La dirección CDN para esta instancia de Discourse (configurada para extraer)
  ## consulta https://meta.discourse.org/t/14857 para obtener detalles
  #DISCOURSE_CDN_URL: //discourse-cdn.example.com

## El contenedor Docker es sin estado; todos los datos se almacenan en /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## Los plugins van aquí
## consulta https://meta.discourse.org/t/19157 para obtener detalles
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/angusmcleod/discourse-question-answer.git
          - git clone https://github.com/discourse/discourse-solved.git
          - git clone https://github.com/discourse/discourse-voting.git
          - git clone https://github.com/gdpelican/retort.git
          - git clone https://github.com/davidtaylorhq/discourse-whos-online.git
          - git clone https://github.com/vinkas0/discourse-navigation.git
          - git clone https://github.com/discourse/discourse-spoiler-alert.git
          - git clone https://github.com/iunctis/discourse-formatting-toolbar.git
          - git clone https://github.com/discourse/discourse-tooltips.git
          - git clone https://github.com/gdpelican/babble.git
          - git clone https://github.com/paviliondev/discourse-quick-messages.git
          - git clone https://github.com/worldismine/PM-Scanner.git
          - git clone https://github.com/paviliondev/discourse-ratings.git
          - git clone https://github.com/discourse/discourse-calendar.git
          - git clone https://github.com/jannolii/discourse-topic-trade-buttons.git

## Cualquier comando personalizado para ejecutar después de la compilación
run:
  - exec: echo "Inicio de comandos personalizados"
  ## Si deseas establecer la dirección de correo electrónico 'De' para tu primer registro, descomenta y cambia:
  ## Después de recibir el primer correo de registro, vuelve a comentar la línea. Solo necesita ejecutarse una vez.
  ##- exec: rails r "SiteSetting.notification_email='email@email"
  - exec: echo "Fin de comandos personalizados"

¿Podrías publicar también la salida completa de la reconstrucción?

Estoy bastante seguro de que las líneas que ves aparecen en cada reconstrucción desde siempre y no bloquean la reconstrucción de ninguna manera, ya que solo nos aseguramos de que Redis esté ejecutándose en dos hooks diferentes. Tu problema está en otro lugar.

Claro. Si necesitas otros registros, puedo proporcionarlos :slight_smile:
Los publiqué en Pastebin, ya que supera las 3226 líneas y excede el límite de publicaciones del foro: Discourse Rebuild Log - Pastebin.com

Esa salida muestra una reconstrucción exitosa…

¿No está funcionando tu sitio en el puerto 12080?

Sí, el sitio se está reconstruyendo nuevamente con éxito.
Descubrí la causa del problema, por la cual el sitio no se cargaba correctamente en mi caso.
El fallo estaba en un certificado SSL inverso, que no se renovó automáticamente y provocó que el sitio no cargara las imágenes, lo que me llevó a asumir que la caché de Redis no funcionaba :man_facepalming:

La compilación muestra el aviso, pero el servidor Redis funciona correctamente.
Después de renovar el certificado SSL, el sitio volvió a funcionar.

Gracias por tu apoyo y perdón por mi estupidez :sweat_smile: