Ultima versione di Discourse rompe il rebuild, Redis Port già in uso

SO: Ubuntu 20.04
Server: vServer 4 Core, 16 GB
Disco: SSD 160GB

Ho recentemente aggiornato alla versione più recente di Discourse. Ora incontro il problema per cui Discourse segnala che la porta 6379 è in uso e quindi il container non può essere costruito:

Quando controllo tutte le porte in uso, quella porta risulta libera:

Qualcosa nel controllo di Discourse non riesce a riconoscere che la porta è libera.
In Docker posso vedere che solo il container Discourse è stato avviato, mentre tutto il resto fallisce:

Questo problema si è davvero trasformato in un paradosso.
Discourse avvia il processo redis-server in Docker e poi si blocca, perché ha già avviato il processo:

Ho un’installazione principale di Redis in esecuzione sull’host, ma quella è sulla porta 6800, quindi non dovrebbe interferire.

Sembra chiaramente che il controllo fallisca su se stesso, perché Redis si avvia correttamente e poi segnala un errore: indirizzo già in uso:

Puoi condividere il tuo file app.yml?

Certo, grazie per averlo controllato :smiley:. Ecco il mio app.yml:

## questo è il template del container Docker Discourse all-in-one, autonomo
##
## Dopo aver apportato modifiche a questo file, DEVI eseguire il rebuild
## /var/discourse/launcher rebuild app
##
## FAI *MOLTA* ATTENZIONE DURANTE LA MODIFICA!
## I FILE YAML SONO SUPER SUPER SENSIBILI A ERRORI NEGLI SPAZI 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"
## Rimuovi il commento da queste due righe se desideri aggiungere Lets Encrypt (https)
  #- "templates/web.ssl.template.yml"
  #- "templates/web.letsencrypt.ssl.template.yml"

## quali porte TCP/IP dovrebbe esporre questo container?
## 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:
  - "12080:80"   # http
  - "12443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## Imposta db_shared_buffers al massimo al 25% della memoria totale.
  ## verrà impostato automaticamente da bootstrap in base alla RAM rilevata, oppure puoi sovrascriverlo
  db_shared_buffers: "4096MB"

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

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

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

  ## Quante 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 sovrascriverlo
  UNICORN_WORKERS: 8

  ## TODO: Il nome di dominio a cui risponderà questa istanza di Discourse
  DISCOURSE_HOSTNAME: discourse.forum

  ## Rimuovi il commento se desideri che il container venga avviato con lo stesso
  ## nome di host (-h option) specificato sopra (predefinito "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: Elenco di email separate da virgola che diventeranno amministratori e sviluppatori
  ## alla prima registrazione, ad esempio 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'developer@email'

  ## TODO: Il server SMTP utilizzato per validare i nuovi account e inviare notifiche
  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           # (opzionale, predefinito true)

  ## Se hai aggiunto il template Lets Encrypt, rimuovi il commento qui sotto per ottenere un certificato SSL gratuito
  #LETSENCRYPT_ACCOUNT_EMAIL: me@example.com

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

## Il container 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
          - 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

## Qualsiasi comando personalizzato da eseguire dopo la compilazione
run:
  - exec: echo "Inizio dei comandi personalizzati"
  ## Se desideri impostare l'indirizzo email 'From' per la tua prima registrazione, rimuovi il commento e modifica:
  ## Dopo aver ricevuto la prima email di registrazione, rimetti il commento alla riga. Deve essere eseguito solo una volta.
  ##- exec: rails r "SiteSetting.notification_email='email@email"
  - exec: echo "Fine dei comandi personalizzati"

Puoi pubblicare anche l’output completo della ricostruzione?

Sono quasi certo che le righe che vedi si presentino in ogni ricostruzione da sempre e non blocchino in alcun modo il processo, dato che stiamo semplicemente assicurandoci che Redis sia in esecuzione in due hook diversi. Il tuo problema è altrove.

Certo. Se hai bisogno di altri log, posso fornirli :slight_smile: Li ho pubblicati su Pastebin perché superano le 3226 righe e il limite di caratteri dei post del forum: Discourse Rebuild Log - Pastebin.com

Quell’output mostra una ricostruzione riuscita…

Il tuo sito non funziona sulla porta 12080?

Sì, il sito è stato ricostruito con successo.
Ho scoperto la causa del problema, il motivo per cui il sito non si caricava correttamente sul mio dispositivo.
Il problema era un certificato SSL inverso che non si è rinnovato automaticamente, impedendo al sito di caricare le immagini, il che mi ha portato a ipotizzare che la cache Redis non funzionasse :man_facepalming:

La build mostra l’avviso, ma il server Redis funziona correttamente.
Dopo aver rinnovato il certificato SSL, il sito è tornato a funzionare.

Grazie per il vostro supporto e scusate la mia stupidità :sweat_smile: