Falha na Atualização do Postgres - Já tentei de tudo

Olá, o site está repentinamente preso em ‘Welcome to nginx!’, então estou depurando e encontrando esses erros.

Sucesso. Agora você pode iniciar o servidor de banco de dados usando:

    pg_ctlcluster 10 main start

Aviso: O diretório stats_temp_directory selecionado /var/run/postgresql/10-main.pg_stat_tmp
não é gravável para o proprietário do cluster. Esta configuração não será adicionada em
postgresql.conf.
Ver Cluster Porta Status Owner    Diretório de dados              Arquivo de log
10  main    5433 desligado   postgres /var/lib/postgresql/10/main /var/log/postgresql/postgresql-10-main.log
update-alternatives: aviso: forçando a reinstalação da alternativa /usr/share/postgresql/12/man/man1/postmaster.1.gz porque o grupo de links postmaster.1.gz está quebrado
invoke-rc.d: não foi possível determinar o nível de execução atual
invoke-rc.d: policy-rc.d negou a execução de start.
Processando gatilhos para postgresql-common (215.pgdg100+1) ...
Construindo dicionários PostgreSQL a partir dos pacotes myspell/hunspell instalados...
Removendo arquivos de dicionário obsoletos:
Parando servidor de banco de dados PostgreSQL 10: main.
Parando servidor de banco de dados PostgreSQL 12: main.
Executando verificações de consistência
-----------------------------
Verificando versões do cluster                                   ok

O cluster de origem não foi desligado corretamente.
Falha, saindo
-------------------------------------------------------------------------------------
ATUALIZAÇÃO DO POSTGRES FALHOU

Por favor, visite https://meta.discourse.org/t/postgresql-12-update/151236 para obter suporte

Você pode executar ./launcher start app para reiniciar seu aplicativo no meio disso




FALHOU
--------------------
Pups::ExecError: /root/upgrade_postgres falhou com retorno #<Process::Status: pid 45 exit 1>
Local da falha: /pups/lib/pups/exec_command.rb:112:in `spawn'
exec falhou com os parâmetros "/root/upgrade_postgres"
bfe8265213ad992fa3245d252d192977f05d902d7213b361f53d3bc2b0d16b3a
** FALHA NA INICIALIZAÇÃO ** 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.
root@bitkcor:/var/discourse# df -h
Sistema de arquivos      Tamanho  Usado Disponível Uso% Montado em
udev            1.9G     0  1.9G   0% /dev
tmpfs           395M  648K  394M   1% /run
/dev/vda1        78G   23G   55G  30% /
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/vda15      105M  3.4M  101M   4% /boot/efi
tmpfs           395M     0  395M   0% /run/user/0
root@bitkcor:/var/discourse# ls
bin   containers        discourse-setup  launcher  README.md  scripts  templates
cids  discourse-doctor  image            LICENSE   samples    shared
root@bitkcor:/var/discourse# cd shared
root@bitkcor:/var/discourse/shared# chown -R postgres postgres_data
chown: usuário inválido: 'postgres'
root@bitkcor:/var/discourse/shared# ./launcher start app
-bash: ./launcher: Arquivo ou diretório não encontrado
root@bitkcor:/var/discourse/shared# cd ..
root@bitkcor:/var/discourse# ./launcher start app

iniciando o contêiner existente
+ /usr/bin/docker start app
Resposta de erro do daemon: o driver falhou ao programar a conectividade externa no endpoint app (10f3d3b7938496e743c73affc9ddb2d821e04419985bf8e3ebde2ec9ec704a0b): Erro ao iniciar proxy de espaço de usuário: listen tcp 0.0.0.0:80: bind: endereço já em uso
Erro: falha ao iniciar contêineres: app
root@bitkcor:/var/discourse# cd containers
root@bitkcor:/var/discourse/containers# ls
app.yml  app.yml.2018-08-29-034711.bak
root@bitkcor:/var/discourse/containers# cd ..
root@bitkcor:/var/discourse# ./launcher stop app
+ /usr/bin/docker stop -t 10 app
app
root@bitkcor:/var/discourse# ./launcher stop app
+ /usr/bin/docker stop -t 10 app
app
root@bitkcor:/var/discourse# git pull
Já está atualizado.
root@bitkcor:/var/discourse# ./launcher start app

iniciando o contêiner existente
+ /usr/bin/docker start app
Resposta de erro do daemon: o driver falhou ao programar a conectividade externa no endpoint app (f149fe57c125ae0c276c339a1367c83262f866227ab9317ff06bf026e8776f65): Erro ao iniciar proxy de espaço de usuário: listen tcp 0.0.0.0:80: bind: endereço já em uso
Erro: falha ao iniciar contêineres: app

Visitei https://meta.discourse.org/t/postgresql-12-update/151236 para obter suporte e tentei as sugestões de @Falco aqui… e quaisquer outras sugestões no meta. Não consigo fazer nada funcionar.

Pelo que pude perceber, tenho espaço suficiente para isso.

Alguém pode me dizer o que estou esquecendo?

Há uma entrada de FAQ apenas para isso na atualização do PostgreSQL 12.

Obrigado pela resposta rápida! Sim, eu tentei isso também.

root@bitkcor:/var/discourse# ./launcher start app

starting up existing container
+ /usr/bin/docker start app
Error response from daemon: driver failed programming external connectivity on endpoint app (49f1fdf896618efc824e50f782c1fba91bf81320e49ccadb5e5e80b342552e3e): Error starting userland proxy: listen tcp 0.0.0.0:80: bind: address already in use
Error: failed to start containers: app
root@bitkcor:/var/discourse# ./launcher stop app
+ /usr/bin/docker stop -t 10 app
app
root@bitkcor:/var/discourse# tail -f shared/data/log/var-log/postgres/current
tail: cannot open 'shared/data/log/var-log/postgres/current' for reading: No such file or directory
tail: no files remaining

De alguma forma, alguém instalou o nginx no seu host. Você deve remover qualquer servidor web extra do seu VPS e, em seguida, seguir as instruções.

O nginx está instalado, pois este é um fórum funcional há alguns anos. Fiquei atrasado com a Digital Ocean e o Droplet foi desligado. Após ligá-lo novamente, estou recebendo um erro 521 ao acessar o endereço. Quando acesso o endereço IP, volto à tela de boas-vindas.

A configuração do Cloudflare não mudou.

E os nameservers estão corretos na NameCheap.

Não alterei nada há vários meses, então não sei por onde começar a procurar.

Então você tinha o nginx instalado, mas não em execução. Desligar e religar o Droplet reiniciou o serviço, e agora ele está bloqueando a porta web.

Você realmente deveria desinstalá-lo para que isso não aconteça toda vez que o servidor for reiniciado…

Algo mudou? Quando eu construí isso, a tela de boas-vindas do nginx fazia parte do processo de instalação. Eu tinha a impressão de que o nginx era necessário para executar o Discourse. Como faço para desinstalá-lo?

Por favor, altere o caminho para
tail -f shared/standalone/log/var-log/postgres/current

O caminho mencionado no guia refere-se à instalação com dois contêineres (contêiner de dados), enquanto parece que sua instalação é a de contêiner único.

Feito. Isso me dá o seguinte.

root@bitkcor:/var/discourse# tail -f shared/standalone/log/var-log/postgres/current
2020-07-19 03:33:56.864 UTC [19933] discourse@discourse LOG:  duration: 279.207 ms  statement: COPY public.scheduler_stats (id, name, hostname, pid, duration_ms, live_slots_start, live_slots_finish, started_at, success, error) TO stdout;
2020-07-19 03:34:09.436 UTC [19933] discourse@discourse LOG:  duration: 12555.420 ms  statement: COPY public.stylesheet_cache (id, target, digest, content, created_at, updated_at, theme_id, source_map) TO stdout;
2020-07-19 03:34:10.211 UTC [19933] discourse@discourse LOG:  duration: 727.297 ms  statement: COPY public.unsubscribe_keys (key, user_id, created_at, updated_at, unsubscribe_key_type, topic_id, post_id) TO stdout;
2020-07-21 01:56:22.105 UTC [6388] discourse@discourse LOG:  duration: 167.853 ms  execute <unnamed>: INSERT INTO "unsubscribe_keys" ("key", "user_id", "created_at", "updated_at", "unsubscribe_key_type") VALUES ('352fc5679876a1a700dfe7b45f8fa67612592421a3659e08ec5c2ccbf8f0e2d2', 2, '2020-07-21 01:56:21.932109', '2020-07-21 01:56:21.932109', 'digest') RETURNING "key"
2020-07-26 03:34:50.570 UTC [27570] discourse@discourse LOG:  duration: 147.456 ms  statement: COPY public.post_revisions (id, user_id, post_id, modifications, number, created_at, updated_at, hidden) TO stdout;
2020-07-26 03:34:50.925 UTC [27570] discourse@discourse LOG:  duration: 349.648 ms  statement: COPY public.post_search_data (post_id, search_data, raw_data, locale, version) TO stdout;
2020-07-26 03:34:51.236 UTC [27570] discourse@discourse LOG:  duration: 292.799 ms  statement: COPY public.posts (id, user_id, topic_id, post_number, raw, cooked, created_at, updated_at, reply_to_post_number, reply_count, quote_count, deleted_at, off_topic_count, like_count, incoming_link_count, bookmark_count, avg_time, score, reads, post_type, sort_order, last_editor_id, hidden, hidden_reason_id, notify_moderators_count, spam_count, illegal_count, inappropriate_count, last_version_at, user_deleted, reply_to_user_id, percent_rank, notify_user_count, like_score, deleted_by_id, edit_reason, word_count, version, cook_method, wiki, baked_at, baked_version, hidden_at, self_edits, reply_quoted, via_email, raw_email, public_version, action_code, image_url, locked_by_id) TO stdout;
2020-07-26 03:34:51.547 UTC [27570] discourse@discourse LOG:  duration: 296.400 ms  statement: COPY public.scheduler_stats (id, name, hostname, pid, duration_ms, live_slots_start, live_slots_finish, started_at, success, error) TO stdout;
2020-07-26 03:35:04.123 UTC [27570] discourse@discourse LOG:  duration: 12549.364 ms  statement: COPY public.stylesheet_cache (id, target, digest, content, created_at, updated_at, theme_id, source_map) TO stdout;
2020-07-26 03:35:04.760 UTC [27570] discourse@discourse LOG:  duration: 588.788 ms  statement: COPY public.unsubscribe_keys (key, user_id, created_at, updated_at, unsubscribe_key_type, topic_id, post_id) TO stdout;

Parece que o PostgreSQL está em execução. Você desligou o contêiner do Discourse antes de verificar os logs?

./launcher stop app

Parece que não consigo pará-lo.

root@bitkcor:/var/discourse# ./launcher stop app
+ /usr/bin/docker stop -t 10 app
app
root@bitkcor:/var/discourse# tail -f shared/standalone/log/var-log/postgres/current
2020-07-19 03:33:56.864 UTC [19933] discourse@discourse LOG:  duration: 279.207 ms  statement: COPY public.scheduler_stats (id, name, hostname, pid, duration_ms, live_slots_start, live_slots_finish, started_at, success, error) TO stdout;
2020-07-19 03:34:09.436 UTC [19933] discourse@discourse LOG:  duration: 12555.420 ms  statement: COPY public.stylesheet_cache (id, target, digest, content, created_at, updated_at, theme_id, source_map) TO stdout;
2020-07-19 03:34:10.211 UTC [19933] discourse@discourse LOG:  duration: 727.297 ms  statement: COPY public.unsubscribe_keys (key, user_id, created_at, updated_at, unsubscribe_key_type, topic_id, post_id) TO stdout;
2020-07-21 01:56:22.105 UTC [6388] discourse@discourse LOG:  duration: 167.853 ms  execute <unnamed>: INSERT INTO "unsubscribe_keys" ("key", "user_id", "created_at", "updated_at", "unsubscribe_key_type") VALUES ('352fc5679876a1a700dfe7b45f8fa67612592421a3659e08ec5c2ccbf8f0e2d2', 2, '2020-07-21 01:56:21.932109', '2020-07-21 01:56:21.932109', 'digest') RETURNING "key"
2020-07-26 03:34:50.570 UTC [27570] discourse@discourse LOG:  duration: 147.456 ms  statement: COPY public.post_revisions (id, user_id, post_id, modifications, number, created_at, updated_at, hidden) TO stdout;
2020-07-26 03:34:50.925 UTC [27570] discourse@discourse LOG:  duration: 349.648 ms  statement: COPY public.post_search_data (post_id, search_data, raw_data, locale, version) TO stdout;
2020-07-26 03:34:51.236 UTC [27570] discourse@discourse LOG:  duration: 292.799 ms  statement: COPY public.posts (id, user_id, topic_id, post_number, raw, cooked, created_at, updated_at, reply_to_post_number, reply_count, quote_count, deleted_at, off_topic_count, like_count, incoming_link_count, bookmark_count, avg_time, score, reads, post_type, sort_order, last_editor_id, hidden, hidden_reason_id, notify_moderators_count, spam_count, illegal_count, inappropriate_count, last_version_at, user_deleted, reply_to_user_id, percent_rank, notify_user_count, like_score, deleted_by_id, edit_reason, word_count, version, cook_method, wiki, baked_at, baked_version, hidden_at, self_edits, reply_quoted, via_email, raw_email, public_version, action_code, image_url, locked_by_id) TO stdout;
2020-07-26 03:34:51.547 UTC [27570] discourse@discourse LOG:  duration: 296.400 ms  statement: COPY public.scheduler_stats (id, name, hostname, pid, duration_ms, live_slots_start, live_slots_finish, started_at, success, error) TO stdout;
2020-07-26 03:35:04.123 UTC [27570] discourse@discourse LOG:  duration: 12549.364 ms  statement: COPY public.stylesheet_cache (id, target, digest, content, created_at, updated_at, theme_id, source_map) TO stdout;
2020-07-26 03:35:04.760 UTC [27570] discourse@discourse LOG:  duration: 588.788 ms  statement: COPY public.unsubscribe_keys (key, user_id, created_at, updated_at, unsubscribe_key_type, topic_id, post_id) TO stdout;c

A tela de boas-vindas do nginx nunca fez parte do processo. Você está se lembrando de forma equivocada.

O nginx também está instalado dentro do contêiner Docker; nunca foi necessário fora dele.

Você tem duas instâncias do nginx escutando na mesma porta. Se a única coisa neste servidor for o Discourse, o nginx duplicado fora do contêiner pode ser removido com total segurança.

Ok, desculpe por isso.

Você sabe onde pode estar localizado?

Supondo que o servidor seja Ubuntu, execute o seguinte fora do contêiner:

sudo apt-get remove nginx nginx-common

Nossa. Agora o site não pode ser acessado. Restaurando um backup e torcendo para o melhor.

Isso é realmente uma boa notícia, significa que a instância do nginx fora do container não está mais ocupando a porta.

Depois de desinstalá-la, você deve reiniciar o servidor para que tudo possa iniciar corretamente.