Aktivierungs-E-Mails: discourse-doctor funktioniert, discourse selbst nicht

Hallo zusammen,

Wie der Titel bereits sagt: discourse-doctor verbindet sich mit meinem Mailserver (der auf dem Host-System läuft) über dessen externe und internetzugängliche Schnittstelle (aber nicht über localhost), während Discourse selbst keine Verbindung herstellt.

Es werden keine Versuche von Discourse protokolliert, weder im Rails-Produktionslog noch in den Logs meines Mailservers. Ich habe sogar einen Paket-Sniffer auf der Docker-Schnittstelle ausgeführt und keinen Mailverkehr festgestellt.

discourse-doctor hingegen erzeugt erwartungsgemäß Log-Einträge auf meinem Mailserver, und ich kann die E-Mail in meinem E-Mail-Client lesen.

Ich habe den Docker-Container mehrfach mit folgender Konfiguration neu erstellt:

## Dies ist die All-in-One, Standalone-Discourse-Docker-Container-Vorlage
##
## Nach Änderungen an dieser Datei MUSS neu erstellt werden
## /var/discourse/launcher rebuild app
##
## SEI *SEHR* VORSICHTIG BEI DER BEARBEITUNG!
## YAML-DATEIEN SIND SUPER SUPER EMPFINDLICH GEGENÜBER FEHLERN IN LEERZEICHEN ODER AUSRICHTUNG!
## Besuchen Sie http://www.yamllint.com/, um diese Datei bei Bedarf zu validieren

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## Deaktivieren Sie diese beiden Zeilen, wenn Sie Lets Encrypt (https) hinzufügen möchten
###   - "templates/web.ssl.template.yml"
###   - "templates/web.letsencrypt.ssl.template.yml"

## Welche TCP/IP-Ports soll dieser Container freigeben?
## Wenn Sie Discourse einen Port mit einem anderen Webserver wie Apache oder nginx teilen möchten,
## siehe https://meta.discourse.org/t/17247 für Details
expose:
  - "127.0.0.1:1234:80"   # http
    ###   - "127.0.0.1:1235:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## Setzen Sie db_shared_buffers auf maximal 25 % des gesamten Speichers.
  ## Wird automatisch vom Bootstrap basierend auf dem erkannten RAM gesetzt, oder Sie können es überschreiben
  db_shared_buffers: "256MB"

  ## Kann die Sortierleistung verbessern, erhöht aber den Speicherverbrauch pro Verbindung
  #db_work_mem: "40MB"

  ## Welche Git-Revision soll dieser Container verwenden? (Standard: tests-passed)
  #version: tests-passed

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

  ## Wie viele gleichzeitige Webanfragen werden unterstützt? Hängt von Speicher und CPU-Kernen ab.
  ## Wird automatisch vom Bootstrap basierend auf den erkannten CPUs gesetzt, oder Sie können es überschreiben
  UNICORN_WORKERS: 4

  ## TODO: Der Domainname, auf den diese Discourse-Instanz antworten soll
  ## Erforderlich. Discourse funktioniert nicht mit einer reinen IP-Nummer.
  DISCOURSE_HOSTNAME: example.com

  ## Deaktivieren, wenn der Container mit demselben
  ## Hostnamen (-h-Option) wie oben angegeben gestartet werden soll (Standard: "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: Liste der durch Komma getrennten E-Mails, die bei der ersten Registrierung als Admin und Entwickler eingerichtet werden
  ## Beispiel 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'me@another.com'

  ## TODO: Der SMTP-Mailserver, der zur Validierung neuer Konten und zum Senden von Benachrichtigungen verwendet wird
  # SMTP-Adresse, Benutzername und Passwort sind erforderlich
  # WARNUNG: Das Zeichen '#' im SMTP-Passwort kann Probleme verursachen!
  DISCOURSE_SMTP_ADDRESS: submission.example.com # A-Record funktioniert, aber nicht CNAME
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: somedumbuser
  DISCOURSE_SMTP_PASSWORD: somedumbpass
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (optional, Standard: true)

  ## Wenn Sie die Lets Encrypt-Vorlage hinzugefügt haben, deaktivieren Sie unten, um ein kostenloses SSL-Zertifikat zu erhalten
  LETSENCRYPT_ACCOUNT_EMAIL: ssl@yetanother.com

  ## Die http- oder https-CDN-Adresse für diese Discourse-Instanz (konfiguriert zum Abrufen)
  ## siehe https://meta.discourse.org/t/14857 für Details
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com

## Der Docker-Container ist zustandslos; alle Daten werden in /shared gespeichert
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## Plugins gehen hier
## siehe https://meta.discourse.org/t/19157 für Details
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

## Beliebige benutzerdefinierte Befehle, die nach dem Erstellen ausgeführt werden sollen
run:
  - exec: echo "Beginn der benutzerdefinierten Befehle"
  ## Wenn Sie die 'Von'-E-Mail-Adresse für Ihre erste Registrierung festlegen möchten, deaktivieren und ändern:
  ## Nach Erhalt der ersten Anmelde-E-Mail diese Zeile erneut deaktivieren. Sie muss nur einmal ausgeführt werden.
  #- 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 "Ende der benutzerdefinierten Befehle"

Sendet der E-Mail-Test unter /admin/email also keine Nachricht? Läuft /sidekiq? Haben Sie eine Standardinstallation durchgeführt?

Discourse benötigt eine Domain, um zu funktionieren. Ihr Problem könnte daher daran liegen, dass es nur an localhost gebunden ist.

Hallo Jay, danke für die Rückmeldung.

Wenn ich sudo docker exec -it app /bin/bash ausführe, sehe ich kein Verzeichnis /admin. Auch kein aus dem Git-Repository geklontes Verzeichnis /admin.

pgrep -afl sidekiq zeigt jedoch einen Prozess mit diesem Namen an, der läuft.

Ich betreibe Discourse hinter HAProxy, wie ich hier beschrieben habe, daher die Bindung an localhost: How to install Discourse behind Apache mod_proxy?

Ich habe versucht, expose wie folgt zu ändern, und es wird immer noch nicht einmal ein SYN-Paket an Port 587 auf meinem Mailserver gesendet. DISCOURSE_HOSTNAME ist auf die korrekte Domain gesetzt, sidekiq läuft, und ich habe immer noch keine Ahnung, wo ich /admin/email finden kann.

expose:
  - "1234:80"   # http

/admin/email ist ein relativer Pfad
Sie müssen im Webbrowser darauf zugreifen:
{Ihr Discourse-Hostname}/admin/email