Emails d'activation : discourse-doctor fonctionne, mais pas Discourse lui-même

Bonjour à tous,

Comme l’indique le titre, discourse-doctor parvient à se connecter à mon serveur de messagerie (exécuté sur la machine hôte) via son interface externe et accessible depuis Internet (mais pas via localhost), alors que Discourse lui-même n’y arrive tout simplement pas.

Aucune tentative de connexion de la part de Discourse n’est enregistrée, ni dans le journal de production Rails ni dans les journaux de mon serveur de messagerie. J’ai même lancé un analyseur de paquets sur l’interface Docker et je n’observe aucun trafic de messagerie.

En revanche, discourse-doctor génère bien des entrées dans les journaux de mon serveur de messagerie, comme prévu, et je peux lire les e-mails dans mon client de messagerie.

J’ai reconstruit le conteneur Docker à plusieurs reprises avec la configuration suivante :

## Ceci est le modèle de conteneur Docker Discourse tout-en-un, autonome
##
## Après avoir apporté des modifications à ce fichier, vous DEVEZ reconstruire
## /var/discourse/launcher rebuild app
##
## SOYEZ *TRÈS* PRUDENT EN MODIFIANT !
## LES FICHIERS YAML SONT EXTRÊMEMENT SENSIBLES AUX ERREURS D'ESPACEMENT OU D'ALIGNEMENT !
## visitez http://www.yamllint.com/ pour valider ce fichier si nécessaire

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## Décommentez ces deux lignes si vous souhaitez ajouter Lets Encrypt (https)
###   - "templates/web.ssl.template.yml"
###   - "templates/web.letsencrypt.ssl.template.yml"

## Quels ports TCP/IP ce conteneur doit-il exposer ?
## Si vous souhaitez que Discourse partage un port avec un autre serveur web comme Apache ou nginx,
## consultez https://meta.discourse.org/t/17247 pour plus de détails
expose:
  - "127.0.0.1:1234:80"   # http
    ###   - "127.0.0.1:1235:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## Définissez db_shared_buffers à un maximum de 25 % de la mémoire totale.
  ## Sera défini automatiquement par bootstrap en fonction de la RAM détectée, ou vous pouvez le remplacer
  db_shared_buffers: "256MB"

  ## Peut améliorer les performances de tri, mais augmente l'utilisation de la mémoire par connexion
  #db_work_mem: "40MB"

  ## Quelle révision Git ce conteneur doit-il utiliser ? (par défaut : tests-passed)
  #version: tests-passed

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

  ## Combien de requêtes web simultanées sont prises en charge ? Dépend de la mémoire et des cœurs CPU.
  ## Sera défini automatiquement par bootstrap en fonction des CPU détectés, ou vous pouvez le remplacer
  UNICORN_WORKERS: 4

  ## TODO : Le nom de domaine auquel cette instance Discourse répondra
  ## Requis. Discourse ne fonctionnera pas avec une adresse IP brute.
  DISCOURSE_HOSTNAME: example.com

  ## Décommentez si vous souhaitez que le conteneur soit démarré avec le même
  ## nom d'hôte (option -h) que celui spécifié ci-dessus (par défaut "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO : Liste d'e-mails séparés par des virgules qui seront définis comme administrateurs et développeurs
  ## lors de l'inscription initiale, par exemple 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'me@another.com'

  ## TODO : Le serveur SMTP utilisé pour valider les nouveaux comptes et envoyer des notifications
  # L'adresse SMTP, le nom d'utilisateur et le mot de passe sont requis
  # ATTENTION : le caractère '#' dans le mot de passe SMTP peut causer des problèmes !
  DISCOURSE_SMTP_ADDRESS: submission.example.com # Un enregistrement A fonctionne mais pas un CNAME
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: somedumbuser
  DISCOURSE_SMTP_PASSWORD: somedumbpass
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (facultatif, par défaut true)

  ## Si vous avez ajouté le modèle Lets Encrypt, décommentez ci-dessous pour obtenir un certificat SSL gratuit
  LETSENCRYPT_ACCOUNT_EMAIL: ssl@yetanother.com

  ## L'adresse CDN http ou https pour cette instance Discourse (configurée pour récupérer)
  ## consultez https://meta.discourse.org/t/14857 pour plus de détails
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com

## Le conteneur Docker est sans état ; toutes les données sont stockées dans /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## Les plugins vont ici
## consultez https://meta.discourse.org/t/19157 pour plus de détails
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

## Toute commande personnalisée à exécuter après la construction
run:
  - exec: echo "Début des commandes personnalisées"
  ## Si vous souhaitez définir l'adresse e-mail « De » pour votre première inscription, décommentez et modifiez :
  ## Après avoir reçu le premier e-mail d'inscription, re-commentez la ligne. Elle ne doit être exécutée qu'une seule fois.
  #- 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 des commandes personnalisées"

Donc, lancer le test de messagerie à /admin/email n’envoie pas de message ? /sidekiq est-il en cours d’exécution ? Avez-vous effectué une installation standard ?

Discourse nécessite un nom de domaine pour fonctionner, il est donc possible que votre problème soit lié au fait qu’il soit lié uniquement à localhost.

Salut Jay, merci d’avoir répondu.

Lorsque j’exécute sudo docker exec -it app /bin/bash, je ne vois pas de répertoire /admin. Je ne vois pas non plus de répertoire /admin cloné depuis le dépôt git.

pgrep -afl sidekiq affiche bien un processus portant ce nom en cours d’exécution.

Je fais tourner Discourse derrière HAProxy, comme je l’ai décrit ici, d’où la liaison sur localhost : How to install Discourse behind Apache mod_proxy?

J’ai essayé de modifier l’exposition comme suit, mais aucun SYN n’est toujours envoyé vers le port 587 de mon serveur de messagerie. DISCOURSE_HOSTNAME est défini sur le bon domaine, sidekiq est en cours d’exécution, et je ne sais toujours pas où trouver /admin/email.

expose:
  - "1234:80"   # http

/admin/email est un chemin relatif
Vous devez y accéder via un navigateur web :
{Votre nom d'hôte Discourse}/admin/email