Erro fatal ao tentar iniciar o Docker (Oracle VM)

Olá a todos – sou novo no Discourse (parece incrível!) e, embora tenha algumas habilidades técnicas gerais, acredito que me classificaria como um iniciante no mundo de Docker/Linux VM.

Tenho uma VM Oracle gratuita rodando Oracle Linux. Concluí as etapas aqui (https://blogs.oracle.com/developers/install-run-discourse-for-free-in-the-oracle-cloud) e estou executando o passo ./discourse-setup.

Estou recebendo consistentemente a mensagem de erro abaixo… tentei executar o discourse doctor, mas sem sucesso. Espero que alguém possa me apontar na direção correta sobre o que pode estar acontecendo aqui. Muito obrigado antecipadamente! -Tim

[2021-06-11T04:09:29.733935 #1]  INFO -- : > HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main
I, [2021-06-11T04:09:29.735773 #1]  INFO -- : > sleep 5
2021-06-11 04:09:30.320 GMT [54] LOG:  0 8kB está fora do intervalo válido para o parâmetro "shared_buffers" (16 .. 1073741823)
2021-06-11 04:09:30.322 UTC [54] FATAL:  o arquivo de configuração "/etc/postgresql/13/main/postgresql.conf" contém erros
I, [2021-06-11T04:09:34.739847 #1]  INFO -- : 
I, [2021-06-11T04:09:34.740097 #1]  INFO -- : > su postgres -c 'createdb discourse' || true
createdb: erro: não foi possível conectar ao banco de dados template1: não foi possível conectar ao servidor: Nenhum arquivo ou diretório
	Está o servidor rodando localmente e aceitando
	conexões no socket de domínio Unix "/var/run/postgresql/.s.PGSQL.5432"?
I, [2021-06-11T04:09:34.860266 #1]  INFO -- : 
I, [2021-06-11T04:09:34.860745 #1]  INFO -- : > su postgres -c 'psql discourse -c "create user discourse;"' || true
psql: erro: não foi possível conectar ao servidor: Nenhum arquivo ou diretório
	Está o servidor rodando localmente e aceitando
	conexões no socket de domínio Unix "/var/run/postgresql/.s.PGSQL.5432"?
I, [2021-06-11T04:09:35.023426 #1]  INFO -- : 
I, [2021-06-11T04:09:35.023810 #1]  INFO -- : > su postgres -c 'psql discourse -c "grant all privileges on database discourse to discourse;"' || true
psql: erro: não foi possível conectar ao servidor: Nenhum arquivo ou diretório
	Está o servidor rodando localmente e aceitando
	conexões no socket de domínio Unix "/var/run/postgresql/.s.PGSQL.5432"?
I, [2021-06-11T04:09:35.137806 #1]  INFO -- : 
I, [2021-06-11T04:09:35.138325 #1]  INFO -- : > su postgres -c 'psql discourse -c "alter schema public owner to discourse;"'
psql: erro: não foi possível conectar ao servidor: Nenhum arquivo ou diretório
	Está o servidor rodando localmente e aceitando
	conexões no socket de domínio Unix "/var/run/postgresql/.s.PGSQL.5432"?
I, [2021-06-11T04:09:35.257190 #1]  INFO -- : 
I, [2021-06-11T04:09:35.257476 #1]  INFO -- : Terminando processos assíncronos


FALHA
--------------------
Pups::ExecError: su postgres -c 'psql discourse -c "alter schema public owner to discourse;"' falhou com retorno #<Process::Status: pid 80 exit 2>
Local da falha: /pups/lib/pups/exec_command.rb:112:in `spawn'
exec falhou com os parâmetros "su postgres -c 'psql $db_name -c \\\"alter schema public owner to $db_user;\\\"'"
14ef6216494c846091ea6ce48143e2f25018b9d2579b6d4d0021d605f7f5e145
** FALHA NO BOOTSTRAP ** por favor, role para cima e procure por mensagens de erro anteriores, pode haver mais de uma.

Oi @Meathead40
Estou enfrentando possivelmente o mesmo problema.

Consegui configurar o Discourse no Oracle Free em junho. Agora, executei novamente o script de configuração para alterar alguns parâmetros relacionados às configurações de e-mail.
O primeiro erro que consegui rastrear no log é FATAL: configuration file "/etc/postgresql/13/main/postgresql.conf" contains errors, mas, no meu caso, esse arquivo não existe. Além disso, o serviço do PostgreSQL não está em execução (na verdade, nem sequer está disponível como serviço).

Você conseguiu resolver esse problema? Alguém mais enfrentou o mesmo?

Abraços,
Stef

Você pode compartilhar a saída de free -m --si?

Você olhou dentro do contêiner? Você também teve a entrada de log sobre shared_buffers estar muito pequeno?

No meu caso:

# /var/discourse/launcher enter app
# egrep shared_buffers /etc/postgresql/13/main/postgresql.conf
shared_buffers = 128MB
exit

Olá @Falco, esta é a saída do comando:
total used free shared buff/cache available
Mem: 703 359 86 7 257 207
Swap: 8388 246 8142

Olá @Ed_S, recebo a seguinte mensagem:

/var/discourse/launcher enter app
Não foi possível conectar ao daemon do Docker - verifique se ele está em execução e se você tem acesso.

Você deve ver o mesmo arquivo aqui:
/var/discourse/shared/standalone/postgres_data/postgresql.conf

Idealmente, logo antes da entrada de log que indica um erro na configuração, você verá uma linha descrevendo qual é o erro.

Talvez você encontre o log em:
/var/discourse/shared/standalone/log/var-log/postgres/current

Obrigado pelas sugestões. Consegui reunir mais informações.

Isso é do log, por volta do momento do erro (as mensagens anteriores são de dias antes):

2021-08-02 13:33:16.980 UTC [2419] LOG:  received smart shutdown request
2021-08-02 13:33:28.273 UTC [2419] LOG:  background worker "logical replication launcher" (PID 2442) exited with exit code 1
2021-08-02 13:33:28.344 UTC [2437] LOG:  shutting down
2021-08-02 13:33:28.552 UTC [2419] LOG:  database system is shut down

Também obtive a configuração de buffers compartilhados:

shared_buffers = 128MB     # min 128kB
#wal_buffers = -1            # min 32kB, -1 sets based on shared_buffers

Hmm, podemos voltar um pouco: onde quer que você veja esse erro FATAL, quais são as poucas linhas que o antecedem?

Claro, e obrigado novamente pelo apoio.

Estou executando a configuração em uma instalação existente com o objetivo de alterar alguns parâmetros de configuração. A primeira parte do script detecta o seguinte:

sudo ./discourse-setup 
which: no docker.io in (/sbin:/bin:/usr/sbin:/usr/bin)
which: no docker.io in (/sbin:/bin:/usr/sbin:/usr/bin)
The configuration file containers/app.yml already exists!

. . . reconfiguring . . .


Saving old file as app.yml.2021-08-03-102829.bak
Stopping existing container in 5 seconds or Control-C to cancel.
+ /bin/docker stop -t 30 app
app

Found 0GB of memory and 1 physical CPU cores
setting db_shared_buffers = 0MB
setting UNICORN_WORKERS = 0
containers/app.yml memory parameters updated.

Continuando, passando todos os parâmetros de configuração e, finalmente, construindo… isso deve ser a pista que você está procurando:

2021-08-03 10:30:37.709 GMT [55] LOG:  0 8kB is outside the valid range for parameter "shared_buffers" (16 .. 1073741823)
2021-08-03 10:30:37.713 UTC [55] FATAL:  configuration file "/etc/postgresql/13/main/postgresql.conf" contains errors

Isso não é um bom sinal! Esse número deve vir diretamente da saída de

free -g --si | awk ' /Mem:/  {print $2} '

Isso está relatando 703 MB, o que é (oficialmente) muito pequeno para o Discourse funcionar bem. Se você quiser se arriscar (e ficar sem suporte!), pode editar o número mágico 990 em

Acho que você precisa de uma instância maior com mais RAM.

Sim. Até agora, a instância estava funcionando corretamente e foi instalada com a verificação de memória já desativada. De alguma forma, isso está relacionado a esta postagem: Discourse won't install because I have 960MB of ram and not 1GB - Discourse System Administration - Unix Linux Community

O arquivo de configuração ainda tem a verificação desativada, mas acho que ela está sendo sobrescrita? Vou tentar modificar o valor conforme você indicou e relatar o que acontece.

Hmm, depende muito do que você fez lá.

Consegui completar a configuração e a reconstrução. Os passos foram:

  • Comentar a verificação de memória (#check_disk_and_memory) em /var/discourse/discourse-setup (não tenho certeza se isso é necessário)
  • Executar o comando sudo ./discourse-setup na pasta /var/discourse (isso gerará o arquivo /var/discourse/containers/app.yml e tentará prosseguir com a construção, que falhará conforme descrito acima)
  • Editar o app.yml para definir explicitamente db_shared_buffers: “128MB” e UNICORN_WORKERS: 1
  • Iniciar uma reconstrução com sudo ./launcher rebuild app (da pasta /var/discourse)

Sei que isso está no limite dos requisitos, mas vou acompanhar de perto como a instância se comportará.

Obrigado pelo suporte.

Fico feliz que você tenha resolvido. No tópico vinculado e no tópico aqui ao qual ele se refere, sinto que é muito mais preferível alterar o número de “permissão mágica” de 990 para o número que representa o seu próprio sistema. “Desativar a verificação de memória” está, na verdade, causando problemas.

Está claro para mim que a equipe do Discourse precisa estabelecer um limite inferior de algum valor, para traçar uma linha entre configurações suportadas e não suportadas, e eles definiram formalmente esse limite em 1G, com uma flexibilização para 990. Mas 960 me parece bastante próximo de 990 e surge por razões semelhantes. Por outro lado, 703 parece bem diferente!

Oi Ed,
Concordo, vou mudar o número. Fiquei bastante surpreso com essa quantidade tão baixa de memória. As especificações da instância Oracle (Free tier) indicam 1 GB de memória, mas a versão gratuita oferece algo em torno de 60-70% disso. Estou um pouco confuso e não sei o motivo disso.

Já foi mencionado antes — acho que a Oracle está agindo de má-fé, oferecendo muito menos de 1 GB do que arredondam ao descrever:

Edição: veja o blog vinculado:

Talvez a instrução mais importante que falta seja não use a imagem padrão do servidor. O Discourse requer 1 GB de RAM (ou algo próximo aqui), e a imagem do Oracle Linux, por algum motivo, não deixa memória suficiente. Não sei se o CentOS funcionará, mas a imagem do Ubuntu está boa. Apenas certifique-se de escolher a instalação completa2 em vez da instalação “Mínima”.

Suspeito que o Oracle Linux padrão inclua várias coisas que não são necessárias para instalar o Discourse. Presumivelmente, seu principal caso de uso é hospedar servidores de banco de dados Oracle. :wink: Felizmente, a imagem do Ubuntu funciona bem. Meu site de testes/hospedeiro de comentários ainda está em execução. (Embora não haja muita atividade.)