Configurazione di Discourse su server locale: problemi con PostgreSQL e script di configurazione

Ciao Community di Discourse,
Sono un principiante quando si tratta di docker e di attività di sysadmin Linux in generale. Sto cercando di convincere la mia azienda a utilizzare Discourse e mi hanno chiesto una demo prima. Quindi eccomi qui a cercare di metterlo in funzione sui nostri server.
Ho tentato di configurare Discourse su un server locale e ho riscontrato alcuni problemi per i quali spero di ricevere assistenza. Di seguito è riportato un riepilogo della mia configurazione e dei passaggi che ho intrapreso finora:

Configurazione del sistema:

  • Sistema operativo: Ubuntu 20.04.6 LTS
  • Versione Docker: 24.0.5, build 24.0.5-0ubuntu1~20.04.1
  • Versione Discourse: 3.2

Problema:
Ho seguito la guida ufficiale per l’installazione di Discourse su un server cloud (discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub), ma sto riscontrando errori con lo script discourse-setup relativi a PostgreSQL.

Passaggi intrapresi:

  1. Ho confermato che PostgreSQL è in esecuzione controllando l’elenco dei processi.
  2. Ho verificato che PostgreSQL sia in ascolto sulla porta corretta (5432) e che il file del socket Unix esista.
  3. Ho riscontrato errori che indicavano che il database e l’utente “discourse” esistono già, ma quando ho controllato usando il comando psql, né il database né l’utente erano elencati.

Ecco i comandi che ho utilizzato:

  • Controllo dei processi PostgreSQL: ps aux | grep postgres
  • Controllo della porta di ascolto di PostgreSQL: sudo netstat -plunt | grep postgres
  • Controllo del file del socket Unix: ls -l /var/run/postgresql/.s.PGSQL.5432
  • Tentativo di eliminare il database e l’utente “discourse”: su postgres -c 'psql -c \"DROP DATABASE IF EXISTS discourse;\"' e su postgres -c 'psql -c \"DROP USER IF EXISTS discourse;\"'
  • Elenco di database e utenti: psql -c \"\\l\" e psql -c \"\\du\"

Errori riscontrati:

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

Nonostante questi errori, il database e l’utente “discourse” non sembrano esistere quando controllati direttamente in PostgreSQL.
Ci sono altri errori nel log, ma credo che questi siano quelli pertinenti almeno per ora.

Apprezzerei molto qualsiasi guida o suggerimento su come risolvere questi problemi. Qualcun altro ha riscontrato problemi simili o qualcuno ha qualche idea su cosa potrebbe andare storto?

Grazie in anticipo per il vostro aiuto,
Andrea

Non è necessario installare postgres. In un’installazione standard, Discourse ha il suo postgres nel container. Ti consiglio di disinstallare o rimuovere postgres. Hai qualche motivo per utilizzare un postgres preesistente? C’è qualcos’altro in esecuzione su questa macchina?

Non credo che questi siano errori, ma solo messaggi di debug.

Cosa diceva alla fine dello script?

Ciao @pfaffman,
grazie per la risposta.

No, questa macchina è dedicata a Discord, ho installato postgre dopo aver notato quegli errori.

Vorrei poter allegare il log ma non ci riesco ancora.

Ecco la parte finale:

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
' è fallito con ritorno #<Process::Status: pid 146 exit 128>
Posizione del fallimento: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
exec è fallito con i parametri {"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 fallito con codice di uscita 128
** IMPOSSIBILE EFFETTUARE IL BOOTSTRAP ** si prega di scorrere verso l'alto e cercare messaggi di errore precedenti, potrebbero essercene più di uno.

Ora proverò a disinstallare postgre.

Grazie,
Andrea

Hai esaurito la memoria. Devi aggiungere swap e/o più RAM.

Cosa restituisce

free -h?

1 Mi Piace

Ho circa 7 GB disponibili

              totale        utilizzato      libero      condiviso  buff/cache   disponibile
Mem:          7.8Gi       319Mi       599Mi        13Mi       6.9Gi       7.1Gi
Swap:         975Mi       2.0Mi       973Mi

La guida suggerisce circa 2 GB.

L'impostazione predefinita di 1 GB di RAM funziona bene per le piccole community di Discourse. Si consigliano 2 GB di RAM per le community più grandi.

Mi sfugge qualcosa?

Hmm. È strano. Ci sono stati alcuni strani problemi con i requisiti di RAM segnalati di recente. Potresti semplicemente riprovare alcune volte. Alcuni rapporti dicono che fallisce in modo intermittente.

Modifica: scusa. 127 è la RAM. 128 è sconosciuto.

Stai eseguendo un’installazione standard da zero con discourse-setup? (lo dici nell’OP)

Sei dietro qualche tipo di firewall che potrebbe impedire al server di accedere a GitHub e ad altri repository?

Sì, corretto, sto seguendo la guida di GitHub.
Se il problema non è postgre ma l’ultimo messaggio, ecco il punto nel log in cui fallisce

  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

Sembra che non riesca a connettermi correttamente a GitHub, anche se riesco a clonare il repository da quella macchina.

È un problema di rete Docker. Come hai installato Docker? Considera la disinstallazione e prova un altro metodo.

Hai un firewall sul sistema operativo o sulla tua rete? Potrebbe anche essere un problema DNS. È sempre DNS, come si dice.

So che non abbiamo un firewall sull’OS al momento, ma per i dettagli sull’installazione di Docker devo parlare con l’IT.
Hai qualche idea su quali problemi DNS potremmo incontrare? Ci sono sezioni del log o messaggi di debug che possono aiutare (non posso ancora allegare file)?

@pfaffman ho capito che avevo anche i dettagli nella cronologia della 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

Non credo che tu possa installare sia docker-ce che docker.io. Forse rimuovili entrambi e poi installane solo uno.

Di solito uso https://get.docker.com/. Quello che farei è ottenere una nuova VM e usare solo quella.