Discourse-Setup auf lokalem Server: PostgreSQL und Probleme mit dem Setup-Skript

Hallo Discourse Community,

ich bin neu in Docker und generell bei Linux-Systemadministrationsaufgaben. Ich versuche, meine Firma von Discourse zu überzeugen, und sie haben mich um eine Demo gebeten. Also versuche ich hier, es auf unseren Servern zum Laufen zu bringen.

Ich habe versucht, Discourse auf einem lokalen Server einzurichten und bin auf einige Probleme gestoßen, bei denen ich hoffe, Hilfe zu bekommen. Unten ist eine Zusammenfassung meines Setups und der bisher unternommenen Schritte:

System-Setup:

  • Betriebssystem: Ubuntu 20.04.6 LTS
  • Docker-Version: 24.0.5, Build 24.0.5-0ubuntu1~20.04.1
  • Discourse-Version: 3.2

Problem:
Ich habe die offizielle Anleitung zur Installation von Discourse auf einem Cloud-Server befolgt (discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub), stoße aber auf Fehler mit dem discourse-setup-Skript im Zusammenhang mit PostgreSQL.

Unternommene Schritte:

  1. Ich habe bestätigt, dass PostgreSQL läuft, indem ich die Prozessliste überprüft habe.
  2. Ich habe überprüft, ob PostgreSQL auf dem richtigen Port (5432) lauscht und ob die Unix-Socket-Datei existiert.
  3. Ich bin auf Fehler gestoßen, die darauf hindeuten, dass die Datenbank und der Benutzer „discourse“ bereits existieren, aber als ich dies mit dem psql-Befehl überprüft habe, wurden weder die Datenbank noch der Benutzer aufgeführt.

Hier sind die Befehle, die ich verwendet habe:

  • PostgreSQL-Prozesse überprüft: ps aux | grep postgres
  • PostgreSQL-lauschenden Port überprüft: sudo netstat -plunt | grep postgres
  • Unix-Socket-Datei überprüft: ls -l /var/run/postgresql/.s.PGSQL.5432
  • Versuch, die Datenbank und den Benutzer „discourse“ zu löschen: su postgres -c 'psql -c \"DROP DATABASE IF EXISTS discourse;\"' und su postgres -c 'psql -c \"DROP USER IF EXISTS discourse;\"'
  • Datenbanken und Benutzer aufgelistet: psql -c \"\\l\" und psql -c \"\\du\"

Aufgetretene Fehler:

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

Trotz dieser Fehler scheinen die Datenbank und der Benutzer „discourse“ bei direkter Überprüfung in PostgreSQL nicht zu existieren.
Es gibt weitere Fehler im Protokoll, aber ich glaube, dies sind zumindest vorerst die relevanten.

Ich wäre sehr dankbar für jegliche Anleitung oder Vorschläge zur Behebung dieser Probleme. Sind anderen ähnliche Probleme begegnet oder hat jemand Einblicke, was schiefgehen könnte?

Vielen Dank im Voraus für Ihre Hilfe,
Andrea

Sie müssen PostgreSQL nicht installieren. Bei einer Standardinstallation hat Discourse sein eigenes PostgreSQL im Container. Ich empfehle Ihnen, PostgreSQL zu deinstallieren oder zu entfernen. Haben Sie einen Grund, ein bereits vorhandenes PostgreSQL zu verwenden? Läuft sonst noch etwas auf diesem Computer?

Ich glaube nicht, dass das Fehler sind, sondern nur Debugging-Meldungen.

Was stand am Ende des Skripts?

Hallo @pfaffman,
danke für die Antwort.

Nein, diese Maschine ist Discord gewidmet. Ich habe PostgreSQL installiert, nachdem ich diese Fehler bemerkt hatte.

Ich wünschte, ich könnte das Protokoll anhängen, aber das geht immer noch nicht.

Hier ist der letzte Teil:

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.

Ich werde jetzt versuchen, PostgreSQL zu deinstallieren.

Danke,
Andrea

Du hast nicht mehr genügend Arbeitsspeicher. Du musst Swap und/oder mehr RAM hinzufügen.

Was gibt dir

free -h

aus?

1 „Gefällt mir“

Ich habe ungefähr 7 GB frei

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

Der Leitfaden schlägt ~2 GB vor.

Die Standardeinstellung von 1 GB RAM funktioniert gut für kleine Discourse-Communities. Wir empfehlen 2 GB RAM für größere Communities.

Fehlt mir etwas?

Hmm. Das ist seltsam. In letzter Zeit gab es einige seltsame Probleme mit den RAM-Anforderungen. Sie könnten es einfach ein paar Mal erneut versuchen. Einige Berichte besagen, dass es intermittierend fehlschlägt.

Bearbeiten: Entschuldigung. 127 ist RAM. 128 ist unbekannt.

Führen Sie eine Standardinstallation von Grund auf mit discourse-setup durch? (Sie sagen das im OP)

Befinden Sie sich hinter einer Firewall, die den Server möglicherweise am Zugriff auf GitHub und andere Repositories hindert?

Ja, korrekt, ich folge der GitHub-Anleitung.
Wenn das Problem nicht Postgre ist, sondern die letzte Nachricht, hier ist der Punkt im Log, an dem es fehlschlägt

  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

Es sieht so aus, als könnte ich keine Verbindung zu GitHub herstellen, obwohl ich das Repository von dieser Maschine aus klonen kann.

Es ist ein Docker-Netzwerkproblem. Wie haben Sie Docker installiert? Erwägen Sie eine Deinstallation und versuchen Sie es auf eine andere Weise.

Haben Sie eine Firewall im Betriebssystem oder in Ihrem Netzwerk? Es könnte auch ein DNS-Problem sein. Es ist immer DNS, wie man so schön sagt.

Ich weiß, dass wir im Moment keine Firewall auf dem Betriebssystem haben, aber für die Docker-Installationsdetails muss ich mit der IT sprechen.
Haben Sie eine Ahnung, welche DNS-Probleme wir haben könnten? Gibt es Protokollabschnitte oder Debug-Meldungen, die helfen können (ich kann immer noch keine Dateien anhängen)?

@pfaffman hat herausgefunden, dass ich die Details auch in meiner Shell-Historie hatte.

   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

Ich glaube nicht, dass Sie sowohl docker-ce als auch docker.io installieren können. Entfernen Sie vielleicht beide und installieren Sie dann nur eines davon.

Ich benutze normalerweise https://get.docker.com/. Was ich tun würde, wäre, eine neue VM zu bekommen und nur diese zu verwenden.