Configuration de Discourse sur un serveur local : problèmes avec PostgreSQL et le script de configuration

Bonjour Communauté Discourse,
Je suis nouveau dans Docker et les tâches d’administration système Linux en général. J’essaie de convaincre mon entreprise d’utiliser Discourse et ils m’ont demandé une démo d’abord. Je suis donc là pour essayer de le mettre en place sur nos serveurs.
J’ai tenté de configurer Discourse sur un serveur local et j’ai rencontré quelques problèmes pour lesquels j’espère obtenir de l’aide. Ci-dessous un résumé de ma configuration et des étapes que j’ai suivies jusqu’à présent :

Configuration du système :

  • Système d’exploitation : Ubuntu 20.04.6 LTS
  • Version de Docker : 24.0.5, build 24.0.5-0ubuntu1~20.04.1
  • Version de Discourse : 3.2

Problème :
J’ai suivi le guide officiel pour installer Discourse sur un serveur cloud (discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub), mais je rencontre des erreurs avec le script discourse-setup liées à PostgreSQL.

Étapes suivies :

  1. J’ai confirmé que PostgreSQL était en cours d’exécution en vérifiant la liste des processus.
  2. J’ai vérifié que PostgreSQL écoutait sur le bon port (5432) et que le fichier de socket Unix existait.
  3. J’ai rencontré des erreurs indiquant que la base de données et l’utilisateur "discourse" existaient déjà, mais lorsque j’ai vérifié avec la commande psql, ni la base de données ni l’utilisateur n’étaient répertoriés.

Voici les commandes que j’ai utilisées :

  • Vérification des processus PostgreSQL : ps aux | grep postgres
  • Vérification du port d’écoute PostgreSQL : sudo netstat -plunt | grep postgres
  • Vérification du fichier de socket Unix : ls -l /var/run/postgresql/.s.PGSQL.5432
  • Tentative de suppression de la base de données et de l’utilisateur "discourse" : su postgres -c 'psql -c \"DROP DATABASE IF EXISTS discourse;\"' et su postgres -c 'psql -c \"DROP USER IF EXISTS discourse;\"'
  • Liste des bases de données et des utilisateurs : psql -c \"\\l\" et psql -c \"\\du\"

Erreurs rencontrées :

  • ERROR: database "discourse" already exists
  • ERROR: role "discourse" already exists
  • psql: error: FATAL: role "root" does not exist

Malgré ces erreurs, la base de données et l’utilisateur "discourse" ne semblent pas exister lorsqu’ils sont vérifiés directement dans PostgreSQL.
Il y a d’autres erreurs dans le journal, mais je pense que ce sont les plus pertinentes pour le moment.

J’apprécierais grandement toute aide ou suggestion pour résoudre ces problèmes. Quelqu’un d’autre a-t-il rencontré des problèmes similaires, ou quelqu’un a-t-il des éclaircissements sur ce qui pourrait mal se passer ?

Merci d’avance pour votre aide,
Andrea

Vous n’avez pas besoin d’installer postgres. Dans une installation standard, Discourse a son propre postgres dans le conteneur. Je vous recommande de désinstaller ou de supprimer postgres. Avez-vous une raison d’utiliser un postgres préexistant ? Y a-t-il autre chose qui tourne sur cette machine ?

Je ne pense pas que ce soient des erreurs, mais juste des messages de débogage.

Qu’est-ce qui était indiqué à la fin du script ?

Salut @pfaffman,
merci pour ta réponse.

Non, cette machine est dédiée à Discord, j’ai installé PostgreSQL après avoir remarqué ces erreurs.

J’aimerais pouvoir joindre le journal, mais je ne peux toujours pas.

Voici la dernière partie :

FAILED
--------------------
Pups::ExecError: cd /var/www/discourse & sudo -H -E -u discourse bash -c '
  set -o errexit
  if [ $(git rev-parse --is-shallow-repository) == "true" ]; then
      git remote set-branches --add origin main
      git remote set-branches origin tests-passed
      git fetch --depth 1 origin tests-passed
  else
      git fetch --tags --prune-tags --prune --force origin
  fi
' failed with return #<Process::Status: pid 146 exit 128>
Location of failure: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
exec failed with the params {"cd"=>"$home", "hook"=>"code", "cmd"=>["sudo -H -E -u discourse git reset --hard", "sudo -H -E -u discourse git clean -f", "sudo -H -E -u discourse bash -c '\n  set -o errexit\n  if [ $(git rev-parse --is-shallow-repository) == \"true\" \n]; then\n      git remote set-branches --add origin main\n      git remote set-branches origin $version\n      git fetch --depth 1 origin $version\n  else\n      git fetch --tags --prune-tags --prune --force origin\n  fi\n'", "sudo -H -E -u discourse bash -c '\n  set -o errexit\n  if [[ $(git symbolic-ref --short HEAD) == $version ]] ; then\n      git pull\n  else\n      git -c advice.detachedHead=false checkout $version\n  fi\n'", "sudo -H -E -u discourse git config user.discourse-version $version", "mkdir -p tmp", "chown discourse:www-data tmp", "mkdir -p tmp/pids", "mkdir -p tmp/sockets", "touch tmp/.gitkeep", "mkdir -p                    /shared/log/rails", "bash -c \"touch -a           /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log\"", "bash -c \"ln    -s           /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log $home/log\"", "bash -c \"mkdir -p           /shared/{uploads,backups}\"", "bash -c \"ln    -s           /shared/{uploads,backups} $home/public\"", "bash -c \"mkdir -p           /shared/tmp/{backups,restores}\"", "bash -c \"ln    -s           /shared/tmp/{backups,restores} $home/tmp\"", "chown -R discourse:www-data /shared/log/rails /shared/uploads /shared/backups /shared/tmp", "[ ! -d public/plugins ] || find public/plugins/ -maxdepth 1 -xtype l -delete]"}
bootstrap failed with exit code 128
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.

Je vais maintenant essayer de désinstaller PostgreSQL.

Merci,
Andrea

Vous manquez de mémoire. Vous devez ajouter du swap et/ou plus de RAM.

Que donne

free -h

?

1 « J'aime »

J’ai environ 7 Go de disponibles

              total        used        free      shared  buff/cache   available
Mem:          7.8Gi       319Mi       599Mi        13Mi       6.9Gi       7.1Gi
Swap:         975Mi       2.0Mi       973Mi

Le guide suggère ~2 Go.

La valeur par défaut de 1 Go de RAM fonctionne bien pour les petites communautés Discourse. Nous recommandons 2 Go de RAM pour les communautés plus importantes.

Est-ce que je manque quelque chose ?

Hmm. C’est étrange. Il y a eu des problèmes étranges avec les exigences de RAM signalés récemment. Vous pourriez réessayer plusieurs fois. Certains rapports indiquent que cela échoue par intermittence.

Mise à jour : désolé. 127 est la RAM. 128 est inconnu.

Vous effectuez une installation standard à partir de zéro en exécutant discourse-setup ? (vous le dites dans le message d’origine)

Êtes-vous derrière un type de pare-feu qui pourrait empêcher le serveur d’accéder à GitHub et à d’autres dépôts ?

Oui, c’est correct, je suis le guide GitHub.
Si le problème ne vient pas de Postgre mais du dernier message, voici le point du log où ça échoue

  set -o errexit
  if [ $(git rev-parse --is-shallow-repository) == "true" ]; then
      git remote set-branches --add origin main
      git remote set-branches origin tests-passed
      git fetch --depth 1 origin tests-passed
  else
      git fetch --tags --prune-tags --prune --force origin
  fi
'
fatal: unable to access 'https://github.com/discourse/discourse.git/': server certificate verification failed. CAfile: none CRLfile: 
none

On dirait que je n’arrive pas à me connecter correctement à GitHub, même si je suis capable de cloner le dépôt depuis cette machine.

C’est un problème de réseau Docker. Comment avez-vous installé Docker ? Envisagez de le désinstaller et d’essayer une autre méthode.

Avez-vous un pare-feu sur le système d’exploitation ou sur votre réseau ? Il pourrait également s’agir d’un problème de DNS. C’est toujours le DNS, comme on dit.

Je sais que nous n’avons pas de pare-feu sur le système d’exploitation pour le moment, mais pour les détails d’installation de Docker, je dois parler à l’informatique.
Avez-vous une idée des problèmes de DNS que nous pourrions rencontrer ? Des sections du journal ou des messages de débogage qui pourraient aider (je ne peux toujours pas joindre de fichiers) ?

@pfaffman J’ai découvert que j’avais aussi les détails dans mon historique shell.

   63  sudo apt install docker.io
   64  sudo apt remove containerd runc
   65  sudo apt remove containerd
   66  curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
   67  echo \"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable\" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
   68  sudo apt update
   69  sudo apt install docker-ce
   70  sudo apt upgrade
   71  sudo apt install docker.io

Je ne pense pas que vous puissiez installer à la fois docker-ce et docker.io. Peut-être supprimez les deux, puis installez-en un seul.

J’utilise généralement https://get.docker.com/. Ce que je ferais, c’est obtenir une nouvelle VM et utiliser uniquement celle-ci.