La dernière version de Discourse casse la reconstruction, le port Redis déjà utilisé

OS : Ubuntu 20.04
Serveur : vServer 4 cœurs, 16 Go
Disque : SSD 160 Go

J’ai récemment mis à niveau vers la dernière version de Discourse. Maintenant, je rencontre un problème : Discourse signale que le port 6379 est utilisé, et le conteneur ne peut donc pas être construit :

Lorsque je vérifie tous les ports utilisés, ce port est libre :

Quelque chose dans la vérification de Discourse échoue à reconnaître que le port est libre.
Dans Docker, je vois que seul le conteneur Discourse a démarré et que tout le reste échoue :

Ce problème est vraiment devenu un paradoxe.
Discourse lance le processus pid du serveur Redis dans Docker, puis plante, car il a déjà lancé le processus :

J’ai une installation principale de Redis sur l’hôte en cours d’exécution, mais elle utilise le port 6800, donc elle ne devrait pas interférer.

Il semble clairement que la vérification échoue sur elle-même, car Redis démarre correctement puis signale un échec avec l’erreur « adresse déjà utilisée » :

Pourriez-vous partager votre fichier app.yml, s’il vous plaît ?

Oui, bien sûr, merci de l’avoir examiné :smiley:. Voici mon app.yml :

## 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 ÉDITANT !
## LES FICHIERS YAML SONT EXTRÊMEMENT SENSIBLES AUX ERREURS D'ESPACE OU D'ALIGNEMENT !
## visitez http://www.yamllint.com/ pour valider ce fichier au besoin

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:
  - "12080:80"   # http
  - "12443: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: "4096MB"

  ## Peut améliorer les performances de tri, mais ajoute 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: 8

  ## TODO : Le nom de domaine auquel cette instance Discourse répondra
  DISCOURSE_HOSTNAME: discourse.forum

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

  ## TODO : Liste d'emails séparés par des virgules qui seront administrateurs et développeurs
  ## lors de l'inscription initiale, par exemple 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'developer@email'

  ## TODO : Le serveur de messagerie SMTP utilisé pour valider les nouveaux comptes et envoyer des notifications
  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           # (optionnel, 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: me@example.com

  ## L'adresse CDN 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: //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
          - 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

## Toutes les commandes personnalisées à exécuter après la construction
run:
  - exec: echo "Début des commandes personnalisées"
  ## Si vous souhaitez définir l'adresse email 'From' pour votre première inscription, décommentez et modifiez :
  ## Après avoir reçu le premier email d'inscription, re-commentez la ligne. Elle ne doit être exécutée qu'une seule fois.
  ##- exec: rails r "SiteSetting.notification_email='email@email"
  - exec: echo "Fin des commandes personnalisées"

Peux-tu également poster la sortie complète de la reconstruction ?

Je suis presque certain que les lignes que tu vois apparaissent à chaque reconstruction depuis toujours et ne bloquent en rien la reconstruction, car nous nous contentons de nous assurer que Redis est en cours d’exécution dans deux hooks différents. Ton problème se situe ailleurs.

Bien sûr. Si vous avez besoin d’autres journaux, je peux les fournir :slight_smile:
Je les ai publiés sur Pastebin, car ils dépassent 3226 lignes et excèdent la limite des publications du forum : Discourse Rebuild Log - Pastebin.com

Cette sortie indique une reconstruction réussie…

Votre site ne fonctionne-t-il pas sur le port 12080 ?

Oui, le site est en cours de reconstruction avec succès.
J’ai découvert la cause du problème qui empêchait le site de se charger correctement chez moi.
La faute venait d’un certificat SSL inversé qui n’a pas été renouvelé automatiquement, ce qui a empêché le site de charger les images, m’amenant à supposer que le cache Redis ne fonctionnait pas :man_facepalming:

Le build affiche un avertissement, mais le serveur Redis fonctionne correctement.
Après avoir renouvelé le certificat SSL, le site a de nouveau fonctionné.

Merci pour votre soutien et désolé pour ma bêtise :sweat_smile: