Correos de activación: discourse-doctor funciona, pero discourse no

Hola a todos,

Como dice el título. discourse-doctor se conectará a mi servidor de correo (que se ejecuta en la máquina anfitriona) a través de su interfaz externa y accesible desde Internet (pero no localhost), pero discourse simplemente no lo hará.

No se registra ningún intento por parte de discourse, ni en el registro de producción de Rails ni en los registros de mi servidor de correo. Incluso he ejecutado un analizador de paquetes en la interfaz de Docker y no veo tráfico de correo.

Sin embargo, discourse-doctor sí genera entradas de registro en mi servidor de correo, como se esperaba, y puedo leer el correo electrónico en mi cliente de correo.

He reconstruido el contenedor Docker varias veces con la siguiente configuración:

## Esta es la plantilla del contenedor Docker Discourse todo en uno, independiente
##
## 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 SENSIBLES A ERRORES EN EL ESPACIO EN BLANCO O 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:
  - "127.0.0.1:1234:80"   # http
    ###   - "127.0.0.1:1235: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: "256MB"

  ## puede mejorar el rendimiento de clasificación, pero añade 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 concurrentes 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: 4

  ## TODO: El nombre de dominio al que responderá esta instancia de Discourse
  ## Obligatorio. Discourse no funcionará con una dirección IP desnuda.
  DISCOURSE_HOSTNAME: example.com

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

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

  ## TODO: El servidor de correo SMTP utilizado para validar nuevas cuentas y enviar notificaciones
  # SE REQUIERE la DIRECCIÓN SMTP, el nombre de usuario y la contraseña
  # ADVERTENCIA: el carácter '#' en la contraseña SMTP puede causar problemas
  DISCOURSE_SMTP_ADDRESS: submission.example.com # El registro A funciona pero no el CNAME
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: somedumbuser
  DISCOURSE_SMTP_PASSWORD: somedumbpass
  #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: ssl@yetanother.com

  ## La dirección CDN http o https para esta instancia de Discourse (configurada para extraer)
  ## consulta https://meta.discourse.org/t/14857 para obtener detalles
  #DISCOURSE_CDN_URL: https://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

## 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 electrónico de registro, vuelve a comentar la línea. Solo necesita ejecutarse una vez.
  #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  - replace:
      filename: /etc/nginx/conf.d/discourse.conf
      from: "types {"
      to: |
        set_real_ip_from 0.0.0.0/0;
        real_ip_header X-Forwarded-For;
        real_ip_recursive on;
        types {
  - exec: echo "Fin de comandos personalizados"

¿Entonces ejecutar la prueba de correo en /admin/email no envía ningún mensaje? ¿Está funcionando /sidekiq? ¿Realizaste una instalación estándar?

Discourse necesita un nombre de dominio para funcionar, así que tu problema podría estar relacionado con que solo esté vinculado a localhost.

Hola Jay, gracias por responder.

Cuando ejecuto sudo docker exec -it app /bin/bash, no veo un directorio /admin. Tampoco veo un directorio /admin clonado desde el repositorio git.

pgrep -afl sidekiq sí muestra un proceso con ese nombre en ejecución.

Estoy ejecutando Discourse detrás de HAProxy, como describí aquí, de ahí el enlace a localhost: How to install Discourse behind Apache mod_proxy?

He intentado modificar la exposición de la siguiente manera y aún así no se envía ni siquiera un SYN al puerto 587 en mi servidor de correo. DISCOURSE_HOSTNAME está configurado con el dominio correcto, sidekiq se está ejecutando y todavía no tengo idea de dónde encontrar /admin/email.

expose:
  - "1234:80"   # http

/admin/email es una ruta relativa
Debes acceder a ella en un navegador web:
{Tu nombre de host de Discourse}/admin/email