Configuração do Discourse em servidor local: problemas com PostgreSQL e script de configuração

Olá Comunidade Discourse,
Sou novato em docker e em tarefas de sysadmin Linux em geral. Estou tentando convencer minha empresa a usar o Discourse e eles me pediram uma demonstração primeiro. Então, aqui estou eu, tentando colocá-lo em funcionamento em nossos servidores.
Tenho tentado configurar o Discourse em um servidor local e encontrei alguns problemas com os quais espero obter ajuda. Abaixo está um resumo da minha configuração e as etapas que tomei até agora:

Configuração do Sistema:

  • Sistema Operacional: Ubuntu 20.04.6 LTS
  • Versão do Docker: 24.0.5, build 24.0.5-0ubuntu1~20.04.1
  • Versão do Discourse: 3.2

Problema:
Segui o guia oficial para instalar o Discourse em um servidor em nuvem (discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub), mas estou encontrando erros com o script discourse-setup relacionados ao PostgreSQL.

Etapas Realizadas:

  1. Confirmei que o PostgreSQL está em execução verificando a lista de processos.
  2. Verifiquei se o PostgreSQL está escutando na porta correta (5432) e se o arquivo de socket Unix existe.
  3. Encontrei erros indicando que o banco de dados e o usuário “discourse” já existem, mas quando verifiquei usando o comando psql, nem o banco de dados nem o usuário estavam listados.

Aqui estão os comandos que usei:

  • Verifiquei os processos do PostgreSQL: ps aux | grep postgres
  • Verifiquei a porta de escuta do PostgreSQL: sudo netstat -plunt | grep postgres
  • Verifiquei o arquivo de socket Unix: ls -l /var/run/postgresql/.s.PGSQL.5432
  • Tentei remover o banco de dados e o usuário “discourse”: su postgres -c 'psql -c \"DROP DATABASE IF EXISTS discourse;\"' e su postgres -c 'psql -c \"DROP USER IF EXISTS discourse;\"'
  • Liste os bancos de dados e usuários: psql -c \"\\l\" e psql -c \"\\du\"

Erros Encontrados:

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

Apesar desses erros, o banco de dados e o usuário “discourse” não parecem existir quando verificados diretamente no PostgreSQL.
Existem outros erros no log, mas acredito que estes sejam os mais relevantes, pelo menos por enquanto.

Agradeceria muito qualquer orientação ou sugestão sobre como resolver esses problemas. Alguém mais já encontrou problemas semelhantes, ou alguém tem alguma ideia do que pode estar dando errado?

Obrigado antecipadamente pela ajuda,
Andrea

Você não precisa instalar o postgres. Em uma instalação padrão, o Discourse tem seu próprio postgres no contêiner. Recomendo que você desinstale ou remova o postgres. Você tem algum motivo para usar um postgres pré-existente? Algo mais está rodando nesta máquina?

Eu não acho que sejam erros, mas apenas mensagens de depuração.

O que foi dito no final do script?

Olá @pfaffman,
obrigado pela resposta.

Não, esta máquina é dedicada ao Discord, instalei o PostgreSQL depois de notar esses erros.

Gostaria de poder anexar o log, mas ainda não consigo.

Aqui está a parte final:

FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && sudo -H -E -u discourse bash -c '\n  set -o errexit\n  if [ $(git rev-parse --is-shallow-repository) == "true" ]; then\n      git remote set-branches --add origin main\n      git remote set-branches origin tests-passed\n      git fetch --depth 1 origin tests-passed\n  else\n      git fetch --tags --prune-tags --prune --force origin\n  fi\n' falhou com retorno #<Process::Status: pid 146 exit 128>
Localização da falha: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
exec falhou com os parâmetros {"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 falhou com código de saída 128
** FALHA AO INICIAR ** por favor, role para cima e procure por mensagens de erro anteriores, pode haver mais de uma.

Tentarei desinstalar o PostgreSQL agora.

Obrigado,
Andrea

Você está sem memória. Você precisa adicionar swap e/ou mais RAM.

O que o

free -h

retorna?

1 curtida

Tenho aproximadamente 7 GB disponíveis

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

O guia sugere ~2 GB.

O padrão de 1 GB de RAM funciona bem para pequenas comunidades Discourse. Recomendamos 2 GB de RAM para comunidades maiores.

Estou perdendo alguma coisa?

Hmm. Isso é estranho. Têm surgido alguns problemas estranhos com os requisitos de RAM relatados ultimamente. Você pode tentar novamente algumas vezes. Alguns relatos dizem que está falhando intermitentemente.

Editar: desculpe. 127 é RAM. 128 é desconhecido.

Você está fazendo uma instalação padrão do zero executando discourse-setup? (você diz isso no OP)

Você está atrás de algum tipo de firewall que possa impedir o servidor de acessar o github e outros repositórios?

Sim, correto, estou seguindo o guia do GitHub.
Se o problema não for o postgre, mas sim a última mensagem, aqui está o ponto no log onde falha

  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

Parece que não consigo me conectar ao GitHub corretamente, embora eu consiga clonar o repositório dessa máquina.

É um problema de rede do Docker. Como você instalou o Docker? Considere desinstalar e tentar outra forma.

Você tem um firewall no sistema operacional ou na sua rede? Também pode ser um problema de DNS. É sempre o DNS, como dizem.

Sei que não temos um firewall no sistema operacional no momento, mas para detalhes de instalação do Docker preciso falar com o TI.
Você tem alguma ideia de qual problema de DNS podemos estar encontrando? Alguma seção do log ou mensagens de depuração que possam ajudar (ainda não consigo anexar arquivos)?

@pfaffman descobri que também tinha os detalhes no meu histórico do 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

Não acho que você possa instalar docker-ce e docker.io ao mesmo tempo. Talvez remova ambos e instale apenas um deles.

Eu geralmente uso https://get.docker.com/. O que eu faria seria pegar uma nova VM e usar apenas isso.