Email di attivazione: discourse-doctor funziona, ma Discourse no

Ciao a tutti,

Come dice il titolo, discourse-doctor si connette al mio server di posta (in esecuzione sulla macchina host) tramite la sua interfaccia esterna e accessibile da Internet (ma non localhost), mentre Discourse stesso non lo fa.

Non viene registrato alcun tentativo da parte di Discourse, né nel log di produzione di Rails né nei log del mio server di posta. Ho persino eseguito un packet sniffer sull’interfaccia Docker e non vedo alcun traffico di posta.

discourse-doctor, invece, genera voci di log sul mio server di posta, come previsto, e riesco a leggere l’email nel mio client di posta.

Ho ricreato più volte il contenitore Docker con la seguente configurazione:

## questo è il template del contenitore Docker Discourse all-in-one, standalone
##
## Dopo aver apportato modifiche a questo file, DEVI ricostruire
## /var/discourse/launcher rebuild app
##
## FAI MOLTA MOLTA ATTENZIONE DURANTE LA MODIFICA!
## I FILE YAML SONO MOLTO, MOLTO SENSIBILI A ERRORI NELLO SPAZIAMENTO O NELL'ALLINEAMENTO!
## visita http://www.yamllint.com/ per convalidare questo file quando necessario

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## Scommenta queste due righe se desideri aggiungere Lets Encrypt (https)
###   - "templates/web.ssl.template.yml"
###   - "templates/web.letsencrypt.ssl.template.yml"

## quali porte TCP/IP deve esporre questo contenitore?
## Se desideri che Discourse condivida una porta con un altro server web come Apache o nginx,
## consulta https://meta.discourse.org/t/17247 per i dettagli
expose:
  - "127.0.0.1:1234:80"   # http
    ###   - "127.0.0.1:1235:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## Imposta db_shared_buffers a un massimo del 25% della memoria totale.
  ## verrà impostato automaticamente da bootstrap in base alla RAM rilevata, oppure puoi sovrascrivere
  db_shared_buffers: "256MB"

  ## può migliorare le prestazioni di ordinamento, ma aumenta l'uso di memoria per connessione
  #db_work_mem: "40MB"

  ## Quale revisione Git dovrebbe utilizzare questo contenitore? (predefinito: tests-passed)
  #version: tests-passed

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

  ## Quanti richieste web simultanee sono supportate? Dipende dalla memoria e dai core della CPU.
  ## verrà impostato automaticamente da bootstrap in base alle CPU rilevate, oppure puoi sovrascrivere
  UNICORN_WORKERS: 4

  ## TODO: Il nome di dominio a cui risponderà questa istanza di Discourse
  ## Obbligatorio. Discourse non funzionerà con un semplice numero IP.
  DISCOURSE_HOSTNAME: example.com

  ## Scommenta se vuoi che il contenitore venga avviato con lo stesso
  ## nome host (opzione -h) specificato sopra (predefinito "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: Elenco di email separate da virgola che diventeranno amministratori e sviluppatori
  ## all'iscrizione iniziale, ad esempio 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'me@another.com'

  ## TODO: Il server SMTP utilizzato per validare nuovi account e inviare notifiche
  # INDIRIZZO SMTP, nome utente e password sono obbligatori
  # ATTENZIONE: il carattere '#' nella password SMTP può causare problemi!
  DISCOURSE_SMTP_ADDRESS: submission.example.com # Un record A funziona ma non un CNAME
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: somedumbuser
  DISCOURSE_SMTP_PASSWORD: somedumbpass
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (opzionale, predefinito true)

  ## Se hai aggiunto il template Lets Encrypt, scommenta qui sotto per ottenere un certificato SSL gratuito
  LETSENCRYPT_ACCOUNT_EMAIL: ssl@yetanother.com

  ## L'indirizzo CDN http o https per questa istanza di Discourse (configurato per il recupero)
  ## consulta https://meta.discourse.org/t/14857 per i dettagli
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com

## Il contenitore Docker è senza stato; tutti i dati sono archiviati in /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## I plugin vanno qui
## consulta https://meta.discourse.org/t/19157 per i dettagli
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

## Qualsiasi comando personalizzato da eseguire dopo la costruzione
run:
  - exec: echo "Inizio dei comandi personalizzati"
  ## Se desideri impostare l'indirizzo email 'From' per la tua prima registrazione, scommenta e modifica:
  ## Dopo aver ricevuto la prima email di iscrizione, ricommenta la riga. Deve essere eseguita solo una volta.
  #- 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 "Fine dei comandi personalizzati"

Quindi, eseguendo il test della posta in /admin/email, non viene inviata alcuna email? È in esecuzione /sidekiq? Hai effettuato un’installazione standard?

Discourse ha bisogno di un nome di dominio per funzionare, quindi il tuo problema potrebbe essere legato al fatto che è configurato solo per localhost.

Ciao Jay, grazie per la risposta.

Quando eseguo sudo docker exec -it app /bin/bash, non vedo una directory /admin. Nemmeno vedo una directory /admin clonata dal repository git.

pgrep -afl sidekiq mostra invece un processo con quel nome in esecuzione.

Sto eseguendo Discourse dietro HAProxy, come descritto qui, da cui il binding a localhost: How to install Discourse behind Apache mod_proxy?

Ho provato a modificare l’esposizione come segue, ma non viene inviato nemmeno un SYN alla porta 587 del mio server di posta. DISCOURSE_HOSTNAME è impostato sul dominio corretto, sidekiq è in esecuzione e non ho ancora idea di dove trovare /admin/email.

expose:
  - "1234:80"   # http

/admin/email è un percorso relativo
Devi accedervi tramite un browser web:
{Your Discourse Hostname}/admin/email