Não é possível reconstruir devido à falha na atualização do PostgreSQL 12

Qual guia?
A porta 2045 me lembra algo que não consigo identificar exatamente :thinking:

Após algumas falhas na instalação há alguns meses, mudei para 2045, mas isso não é relevante, pois está comentado com #. O problema não está nessa porta.

Siga este guia: discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub

Bem… ele foi alterado, mãos escorregadias acontecem :sweat_smile:

Entendo, mas para chegar a 2045 em algum momento, você deve ter seguido algo que o levou até aqui e agora.
Acho que segui o mesmo post porque eu também tenho um proxy 2045 na minha configuração do nginx, por algum motivo que não consigo lembrar…

:crazy_face:

@Benjamin_D não há nenhuma porta 2045 no meu arquivo nginx; você pode dar uma olhada rolando para cima. A linha no app.yml está comentada com #, então não entendo por que vocês estão apontando o dedo para ela. O problema certamente não vem de lá; caso contrário, a mensagem de erro indicaria isso.

Posso remover essa linha do arquivo app.yml se quiser; o resultado seria o mesmo de antes.

Acredito que, na primeira vez que instalei, o container informou que as portas 80 ou 443 estavam sendo usadas, então talvez eu tenha lido em algum lugar para apenas adicionar uma porta aleatória. Mas, novamente, essa linha está comentada com #, o que significa que não deve ser levada em consideração.

De forma alguma, estamos apenas tentando refazer seus passos e comparar nossa configuração com a sua.

Esse erro está definitivamente relacionado a uma falha na atualização do PostgreSQL.

Confira o tópico meta para resolver o problema.

Vou verificar o tópico sobre a atualização do PostgreSQL. Retornarei se encontrar qualquer outro erro.

Então, depois de atualizar o PostgreSQL da versão 10 para a 12, ainda tenho problemas ao executar o comando: ./launcher rebuild app

sudo ./launcher rebuild app
fatal: não é um repositório git (ou nenhum dos diretórios pai): .git
Parando o container antigo
+ /usr/bin/docker stop -t 60 app
app
cd /pups && git pull && /pups/bin/pups --stdin
Já está atualizado.
I, [2020-07-13T13:34:21.635079 #1]  INFO -- : Carregando --stdin
I, [2020-07-13T13:34:21.643465 #1]  INFO -- : > locale-gen $LANG && update-locale
I, [2020-07-13T13:34:21.713536 #1]  INFO -- : Gerando localizações (isso pode levar um tempo)...
Geração concluída.

I, [2020-07-13T13:34:21.713917 #1]  INFO -- : > mkdir -p /shared/postgres_run
I, [2020-07-13T13:34:21.720693 #1]  INFO -- :
I, [2020-07-13T13:34:21.721042 #1]  INFO -- : > chown postgres:postgres /shared/postgres_run
I, [2020-07-13T13:34:21.724919 #1]  INFO -- :
I, [2020-07-13T13:34:21.725387 #1]  INFO -- : > chmod 775 /shared/postgres_run
I, [2020-07-13T13:34:21.728768 #1]  INFO -- :
I, [2020-07-13T13:34:21.729117 #1]  INFO -- : > rm -fr /var/run/postgresql
I, [2020-07-13T13:34:21.732712 #1]  INFO -- :
I, [2020-07-13T13:34:21.733008 #1]  INFO -- : > ln -s /shared/postgres_run /var/run/postgresql
I, [2020-07-13T13:34:21.735981 #1]  INFO -- :
I, [2020-07-13T13:34:21.736200 #1]  INFO -- : > socat /dev/null UNIX-CONNECT:/shared/postgres_run/.s.PGSQL.5432 || exit 0 && echo postgres já está em execução, pare o container ; exit 1
2020/07/13 13:34:21 socat[27] E connect(6, AF=1 "/shared/postgres_run/.s.PGSQL.5432", 36): Arquivo ou diretório não encontrado
I, [2020-07-13T13:34:21.751266 #1]  INFO -- :
I, [2020-07-13T13:34:21.752242 #1]  INFO -- : > rm -fr /shared/postgres_run/.s*
I, [2020-07-13T13:34:21.757300 #1]  INFO -- :
I, [2020-07-13T13:34:21.757817 #1]  INFO -- : > rm -fr /shared/postgres_run/*.pid
I, [2020-07-13T13:34:21.761287 #1]  INFO -- :
I, [2020-07-13T13:34:21.761706 #1]  INFO -- : > mkdir -p /shared/postgres_run/10-main.pg_stat_tmp
I, [2020-07-13T13:34:21.765114 #1]  INFO -- :
I, [2020-07-13T13:34:21.765725 #1]  INFO -- : > chown postgres:postgres /shared/postgres_run/10-main.pg_stat_tmp
I, [2020-07-13T13:34:21.770573 #1]  INFO -- :
I, [2020-07-13T13:34:21.781057 #1]  INFO -- : Arquivo > /etc/service/postgres/run  chmod: +x  chown:
I, [2020-07-13T13:34:21.791681 #1]  INFO -- : Arquivo > /etc/service/postgres/log/run  chmod: +x  chown:
I, [2020-07-13T13:34:21.800244 #1]  INFO -- : Arquivo > /etc/runit/3.d/99-postgres  chmod: +x  chown:
I, [2020-07-13T13:34:21.808363 #1]  INFO -- : Arquivo > /root/upgrade_postgres  chmod: +x  chown:
I, [2020-07-13T13:34:21.809170 #1]  INFO -- : > chown -R root /var/lib/postgresql/10/main
chown: não foi possível acessar '/var/lib/postgresql/10/main': Arquivo ou diretório não encontrado
I, [2020-07-13T13:34:21.817357 #1]  INFO -- :


FALHA
--------------------
Pups::ExecError: chown -R root /var/lib/postgresql/10/main falhou com retorno #<Process::Status: pid 42 exit 1>
Local da falha: /pups/lib/pups/exec_command.rb:112:in `spawn'
exec falhou com os parâmetros {"cmd"=>["chown -R root /var/lib/postgresql/10/main", "[ ! -e /shared/postgres_data ] && install -d -m 0755 -o postgres -g postgres /shared/postgres_data && sudo -E -u postgres /usr/lib/postgresql/10/bin/initdb -D /shared/postgres_data || exit 0", "chown -R postgres:postgres /shared/postgres_data", "chown -R postgres:postgres /var/run/postgresql"]}
3e7af3d49be0616ae52ee03d6ee0867d25e5db96de40d92c7ec7abeded5d3262
** FALHA NO BOOTSTRAP ** por favor, role para cima e procure por mensagens de erro anteriores, pode haver mais de uma.
./discourse-doctor pode ajudar a diagnosticar o problema.

Não entendi, desisto… ;/

O que significa “fatal: não é um repositório git (ou nenhum dos diretórios pai): .git”??

Além disso, recebo o seguinte:

sudo ./discourse-setup
O arquivo de configuração containers/app.yml já existe!

. . . reconfigurando . . .


Salvando o arquivo antigo como app.yml.2020-07-13-153931.bak
Parando o container existente em 5 segundos ou Control-C para cancelar.
+ /usr/bin/docker stop -t 10 app
app

Encontrados 4GB de memória e 2 núcleos de CPU físicos
definindo db_shared_buffers = 1024MB
definindo UNICORN_WORKERS = 4
parâmetros de memória de containers/app.yml atualizados.

Nome de host para seu Discourse? [cp2077.eu]:

Verificando seu nome de domínio . . .
AVISO: A porta 443 do computador não parece estar acessível usando o nome de host:    cp2077.eu.
AVISO: A conexão com http://cp2077.eu (porta 80) também falha.

Isso sugere que cp2077.eu resolve para algum endereço IP que não alcança esta
máquina onde você está instalando o Discourse.

A primeira coisa a fazer é confirmar que cp2077.eu resolve para o endereço IP deste servidor.
Geralmente, você faz isso no mesmo local onde adquiriu o domínio.

Se você tem certeza de que o endereço IP resolve corretamente, pode ser um problema de firewall.
Uma busca na web por "abrir portas SEU SERVIÇO DE NUVEM" pode ajudar.

Esta ferramenta foi projetada apenas para as instalações mais padrão. Se você não conseguir resolver
o problema acima, precisará editar containers/app.yml manualmente e depois digitar

./launcher rebuild app

O site está no ar e seguro usando a porta 443 (SSL), não entendo por que ele diz que não consegue acessar o site. Não sei mais o que fazer. Por favor, ajude

Você tem um proxy reverso, então não pode usar o discourse-setup. Além disso, provavelmente precisará remover o modelo do Let’s Encrypt do seu arquivo de configuração.

Não sei qual pode ser o seu problema com o PostgreSQL.

Você quer dizer aquelas linhas sobre proxy no meu arquivo nginx?

Você não está tentando reinstalar o Discourse “por cima” de uma instalação anterior (a de fevereiro), usando o arquivo app.yml existente da captura de tela do primeiro post, e precisando atualizar o PostgreSQL da versão 10 para a 12 (o que, pelo erro exibido, não acredito que você tenha feito — talvez tenha feito no seu host, mas não no contêiner de dados, que pode nem existir mais; não sei o estado da sua instalação anterior)?

Você tem algum backup? Quer uma instalação limpa?

Acho que @pfaffman está dizendo que, como você está usando um proxy reverso (nginx), o script discourse-setup pode não funcionar (eu nunca executei o Discourse com um proxy reverso, então não sei se esse é o caso). Se você definir o app.yml corretamente, também deve funcionar bem, sem precisar executar o discourse-setup.

Parece que ele está tentando executar esse código em um container que não possui o PostgreSQL 10 (você provavelmente está usando a versão 12). Se for isso que você deseja e seu template é templates/postgres.template.yml, conforme definido em sua primeira mensagem, talvez o repositório discourse_docker na sua máquina (em /var/discourse) esteja desatualizado.

Sua instalação do Discourse é recente ou antiga? Atualizar o repositório pode resolver esse problema:

cd /var/discourse
git pull

E então execute a etapa de reconstrução.

Além disso, certifique-se de que o container do Discourse foi destruído e recriado (e não apenas parado e iniciado), para evitar o uso de um container antigo (acho que o rebuild do Discourse já faz isso, mas só para garantir…).

Se não funcionar e você tiver um backup, é recomendável tentar instalar em uma nova instância limpa, como @Benjamin_D disse.

@Benjamin_D,

Estou tentando instalar o Discourse para outro domínio “em cima” da minha instalação anterior. Para ser preciso, 2 domínios no mesmo servidor. Por favor, perdoe minha ignorância: em qual parte do app.yml posso encontrar o PostgreSQL? Pois olhei meu app.yml e não vejo nada relacionado a isso.

Tenho backups dos arquivos antigos que eu tinha. Copiei algumas informações da minha instalação anterior para o novo app.yml do novo servidor.

@lucasbasquerotto

Aqui também, por favor, perdoe minha ignorância: vocês estão se referindo a esta linha quando dizem “proxy” do nginx?

location / {
        proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock;
        proxy_set_header Host $http_host;
        proxy_http_version 1.1;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Real-IP $remote_addr;

Antes eu usava PostgreSQL 10, mas ontem fiz a atualização para a versão 12.

Gostaria muito de iniciar uma nova instância neste caso. Como posso remover as antigas para garantir que tudo será instalado do zero? Muito obrigado.

Duas instâncias do Discourse no mesmo servidor seria a configuração multisite, uma história completamente diferente :smile:
Por enquanto, acho que o melhor é ter certeza de que você fez um backup do primeiro site, tê-lo ativo e em execução com o pg12 atualizado, e só então tentar a aventura multisite, para a qual não sou absolutamente qualificado :sweat_smile:

Obrigado, Benjamin,

Eu começaria do zero. Tenho o backup do primeiro site, mas ele era apenas um teste e não é mais necessário. Gostaria de começar limpo novamente.

Como faço para remover o contêiner antigo e tudo mais, para que eu possa começar com uma folha em branco?

Você já tentou atualizar o repositório discourse_docker localmente (em /var/discourse) primeiro? Não funcionou?

Sobre o proxy reverso, isso ocorre porque o nginx fica no meio das requisições e roteia para os serviços corretos (em vez de expor diretamente o serviço, neste caso o Discourse, à internet). Assim, o nginx atua como um proxy reverso e as portas (80 e 443) expostas à internet pertencem ao serviço nginx.

Estranhamente, a configuração do Discourse funcionou em fevereiro em um dos meus domínios, como você notou, Benjamin, lembra? Pois também publiquei algo relacionado a isso há algum tempo. Então, me surpreende que as pessoas nunca tenham usado o Discourse com o nginx. Para ser honesto, funcionou perfeitamente até ontem, quando tentei instalar o Discourse em outro domínio usando o mesmo servidor.

O que exatamente devo procurar no discourse_docker? Aqui está o conteúdo dessa pasta:

discourse_docker$ ls
bin   containers        discourse-setup  launcher  README.md  scripts  templates
cids  discourse-doctor  image            LICENSE   samples    shared

Basta executar git pull para atualizar o repositório (o próprio diretório /var/discourse é o repositório local), como mencionei em uma das postagens acima:

e, em seguida, execute o comando de rebuild.

Existem outras pessoas que usam o nginx na frente, mas devem ser casos muito menos frequentes do que a instalação padrão em uma máquina dedicada apenas ao Discourse. Também não sei se isso quebra o discourse-setup; estou apenas supondo com base nos seus resultados e considerando que o erro ocorreu ao verificar DNS e portas abertas (lembrando que não é o seu container do Discourse que usa as portas 80 e 443 no host).

Ok, então fui para a pasta discourse_docker como você mencionou, Lucas, e copiei meu arquivo app.yml para os containers dessa pasta e executei o comando ./launcher rebuild app

Algo aconteceu sem nenhum erro e acho que está funcionando

Não quero dar azar ainda, vou tentar configurar a nova conta agora :smiley: