Olá, estou postando aqui depois de tentar de tudo e travei na minha atualização.
Eu estava atualizando o fórum depois de muitos meses. Executei um backup como de costume e o baixei.
Aparentemente, neste processo de atualização, há uma migração do PG 13 para o 15.
Tudo estava funcionando sem problemas até que a atualização falhou e fui interrompido por falta de espaço em disco.
Fui ao meu droplet Digitalocean, parei-o, expandi o disco e liguei-o novamente.
Executei alguns comandos regulares para liberar espaço em disco (removendo logs antigos, ./launcher cleanup, etc.)
Então, comecei a reconstrução e, então, encontrei a primeira barreira:
root@discourse-ubuntu-s-2vcpu-4gb-fra1-01:/var/discourse# ./launcher rebuild app
AVISO: A versão 20.10.1 do Docker está obsoleta, recomenda-se atualizar para a versão 24.0.7 ou mais recente.
arquitetura x86_64 detectada.
AVISO: o arquivo containers/app.yml é legível por todos
Atualização:
Eu ainda estou tentando coisas. Neste ponto, eu só quero voltar para uma build que suporte PG13 para que eu possa restaurar meu backup, mas ainda estou bloqueado tentando isso.
O hash do commit antes da atualização era v3.3.0.beta6 +294, estou tentando reconstruir esse via YML, mas ainda diz isso ao construir:
root@discourse-ubuntu-s-2vcpu-4gb-fra1-01:/var/discourse# ./launcher rebuild app
WARNING: Docker version 20.10.1 deprecated, recommend upgrade to 24.0.7 or newer.
x86_64 arch detected.
WARNING: We are about to start downloading the Discourse base image
This process may take anywhere between a few minutes to an hour, depending on your network speed
Please be patient
2.0.20250226-0128: Pulling from discourse/base
af302e5c37e9: Pull complete
ed49ab5c933d: Pull complete
4d13d450f300: Pull complete
a67afd5cca97: Pull complete
d22a5b6769a6: Pull complete
83c133b53b22: Pull complete
fec147508f0c: Pull complete
21850d8b3ba1: Pull complete
02e250b6bcc4: Pull complete
71ba5ea7da00: Pull complete
ddcfbf6d2647: Pull complete
9c3e54d34536: Pull complete
29ce98d2d62d: Pull complete
4c9694455fd5: Pull complete
58a8ebcc6563: Pull complete
9c8966f1f999: Pull complete
b3dde96c4217: Pull complete
f934de9e2e8d: Pull complete
834e25f513a1: Pull complete
85d3cf606a95: Pull complete
94331a6982ee: Pull complete
14936beb0e9f: Pull complete
3ef05b122d47: Pull complete
6c2dff13a1e7: Pull complete
7682543ad38b: Pull complete
f16f8d5c5a04: Pull complete
06d7037d56ef: Pull complete
bc6c17ae1969: Pull complete
d19f089ead0e: Pull complete
Digest: sha256:6f18aa2cd22bba0deb91d69194e577d4f96130ad555ae8ec646a8792cbfe37db
Status: Downloaded newer image for discourse/base:2.0.20250226-0128
docker.io/discourse/base:2.0.20250226-0128
WARNING: containers/app.yml file is world-readable. You can secure this file by running: chmod o-rwx containers/app.yml
Ensuring launcher is up to date
Fetching origin
Launcher is up-to-date
2.0.20250226-0128: Pulling from discourse/base
Digest: sha256:6f18aa2cd22bba0deb91d69194e577d4f96130ad555ae8ec646a8792cbfe37db
Status: Image is up to date for discourse/base:2.0.20250226-0128
docker.io/discourse/base:2.0.20250226-0128
/usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups.rb
/usr/local/bin/pups --stdin
I, [2025-06-11T09:54:52.350929 #1] INFO -- : Reading from stdin
I, [2025-06-11T09:54:52.357807 #1] INFO -- :
E: Problem executing scripts DPkg::Post-Invoke 'rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true'
E: Sub-process returned an error code
I, [2025-06-11T09:54:53.837808 #1] INFO -- : Lendo listas de pacotes...
Construindo árvore de dependências...
Lendo informação de estado...
Os seguintes pacotes foram instalados automaticamente e não são mais necessários:
libcommon-sense-perl libio-pty-perl libipc-run-perl libjson-perl
libjson-xs-perl libllvm19 libtypes-serialiser-perl libz3-4
postgresql-client-common postgresql-common postgresql-common-dev ssl-cert
Use 'apt autoremove' para removê-los.
Os seguintes pacotes serão REMOVIDOS:
postgresql-15* postgresql-15-pgvector* postgresql-client-15*
0 atualizados, 0 recém-instalados, 3 a serem removidos e 0 não atualizados.
Após esta operação, 60,9 MB de espaço em disco serão liberados.
(Lendo banco de dados ... 33951 arquivos e diretórios atualmente instalados.)
Removendo postgresql-15-pgvector (0.8.0-1.pgdg120+1) ...
Removendo postgresql-15 (15.12-1.pgdg120+1) ...
invoke-rc.d: não foi possível determinar o nível de execução atual
update-alternatives: aviso: forçando a reinstalação da alternativa /usr/share/postgresql/15/man/man1/psql.1.gz porque o grupo de links psql.1.gz está quebrado
Removendo postgresql-client-15 (15.12-1.pgdg120+1) ...
Processando gatilhos para postgresql-common (274.pgdg120+1) ...
Construindo dicionários PostgreSQL a partir de pacotes myspell/hunspell instalados...
Removendo arquivos de dicionário obsoletos:
(Lendo banco de dados ... 31913 arquivos e diretórios atualmente instalados.)
Purgando arquivos de configuração para postgresql-15 (15.12-1.pgdg120+1) ...
Deixando cair o cluster principal...
FALHOU
--------------------
Pups::ExecError: DEBIAN_FRONTEND=noninteractive apt-get purge -y postgresql-15 postgresql-client-15 postgresql-contrib-15 postgresql-15-pgvector failed with return #
```ocess::Status: pid 7 exit 100>
Localização da falha: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
exec falhou com os parâmetros "DEBIAN_FRONTEND=noninteractive apt-get purge -y postgresql-15 postgresql-client-15 postgresql-contrib-15 postgresql-15-pgvector"
bootstrap falhou com o código de saída 100
** FALHA AO INICIALIZAR ** 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.
a609309cf458b146e5650d21103bf084e9bf66843e46e627827f50b6f8c03376
Se você fez um backup como disse que fez, a coisa mais fácil é iniciar um novo droplet, seguir Mover um site Discourse para outro VPS com rsync (mas não copie os arquivos do banco de dados) e, em seguida, restaurar seu backup.
Oi Jay! muito obrigado por responder. Acabei de começar a fazer isso, o droplet está sendo configurado agora.
Pergunta rápida: Baixei meu arquivo de backup antes de iniciar a atualização, este é o arquivo: forumname-2025-06-11-060249-v20240807024301.tar.gz (4,6GB compactado)A versão do fórum era v3.3.0.beta6 +294 com PG13.
Eu estava planejando inicializar o novo droplet forçando esta versão no app.yml, como:
## este é o template de contêiner Docker Discourse autônomo e tudo-em-um
##
## Após fazer alterações neste arquivo, você DEVE reconstruir
## /var/discourse/launcher rebuild app
##
## TENHA MUITO CUIDADO AO EDITAR!
## ARQUIVOS YAML SÃO SUPER SUPER SENSÍVEIS A ERROS DE ESPAÇAMENTO OU ALINHAMENTO!
## visite http://www.yamllint.com/ para validar este arquivo conforme necessário
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
## Descomente estas duas linhas se desejar adicionar Lets Encrypt (https)
- "templates/web.ssl.template.yml"
- "templates/web.letsencrypt.ssl.template.yml"
## quais portas TCP/IP este contêiner deve expor?
## Se você quiser que o Discourse compartilhe uma porta com outro servidor web como Apache ou nginx,
## veja https://meta.discourse.org/t/17247 para detalhes
expose:
- "80:80" # http
- "443:443" # https
params:
db_default_text_search_config: "pg_catalog.english"
## Defina db_shared_buffers para um máximo de 25% da memória total.
## será definido automaticamente pelo bootstrap com base na RAM detectada, ou você pode substituir
db_shared_buffers: "1024MB"
## pode melhorar o desempenho da ordenação, mas adiciona uso de memória por conexão
#db_work_mem: "40MB"
## Qual revisão Git este contêiner deve usar? (padrão: tests-passed)
version: v3.3.0.beta6
E então, com o novo fórum funcionando, importar o backup de lá.
Isso faz sentido? ou estou perdendo algum parâmetro ou etapa importante?
Obrigado novamente, Jay, por responder. Eu realmente aprecio seu tempo me ajudando através deste pesadelo.
Estou tentando fazer isso dessa maneira (forçando a versão no YML), mas aparentemente o discourse_docker não está feliz (ainda) com essa mudança:
FAILED
--------------------
Pups::ExecError: grep -q 'outlets/before-server' /etc/nginx/conf.d/discourse.conf || ( >&2 echo 'The "before-server" Nginx outlet is missing. This version of discourse_docker is not compatible with the chosen Discourse version.' ; exit 1 ) failed with return #<Process::Status: pid 2788 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in spawn'
exec failed with the params {"cmd"=>["cp $home/config/nginx.sample.conf /etc/nginx/conf.d/discourse.conf", "rm /etc/nginx/sites-enabled/default", "mkdir -p /var/nginx/cache", "grep -q 'outlets/before-server' /etc/nginx/conf.d/discourse.conf || ( >&2 echo 'The \\\"before-server\\\" Nginx outlet is missing. This version of discourse_docker is not compatible with the chosen Discourse version.' ; exit 1 )", "grep -q 'outlets/server' /etc/nginx/conf.d/discourse.conf || ( >&2 echo 'The \\\"server\\\" Nginx outlet is missing. This version of discourse_docker is not compatible with the chosen Discourse version.' ; exit 1 )", "grep -q 'outlets/discourse' /etc/nginx/conf.d/discourse.conf || ( >&2 echo 'The \\\"discourse\\\" Nginx outlet is missing. This version of discourse_docker is not compatible with the chosen Discourse version.' ; exit 1 )", "mkdir -p /etc/nginx/conf.d/outlets/before-server", "touch /etc/nginx/conf.d/outlets/before-server/20-redirect-http-to-https.conf", "touch /etc/nginx/conf.d/outlets/before-server/30-ratelimited.conf", "mkdir -p /etc/nginx/conf.d/outlets/server", "touch /etc/nginx/conf.d/outlets/server/10-http.conf", "touch /etc/nginx/conf.d/outlets/server/20-https.conf", "touch /etc/nginx/conf.d/outlets/server/30-offline-page.conf", "mkdir -p /etc/nginx/conf.d/outlets/discourse", "touch /etc/nginx/conf.d/outlets/discourse/20-https.conf", "touch /etc/nginx/conf.d/outlets/discourse/30-ratelimited.conf"]}
bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.
d511b0ec31ac912c99c682611c35bbb446dde1488e1762aa07ccd24690c63164
2/2
Antes de atualizar, tirei um print da versão atual, caso precisasse, existe alguma maneira de forçar o discourse_docker para uma versão mais antiga e compatível?
Estou pesquisando no Google e aqui no meta, mas ainda nada sobre como fazer isso.
No entanto, uma pergunta rápida: se o backup for de uma versão antiga do Discourse que usava PG13, terei problemas para importar o backup para a versão mais recente do Discourse com PG15?
Desculpe, @pfaffman, escrevi uma mensagem anterior pensando que o problema tinha sumido, mas então uma reviravolta aconteceu.
Depois de um longo tempo importando, vi como o fórum estava online novamente listando todas as postagens e assim por diante.
No terminal, o log foi:
[...]
-- execute("DELETE FROM site_settings WHERE name='warn_reviving_old_topic_age'")
- deuses usadas, a mensagem é `De repente, o fórum que foi "restaurado" online, todas as postagens desapareceram, deixando apenas alguns tópicos ativos.
Como o log diz "76198 postagens foram sinalizadas para um rebake (refazer)", pensei que era apenas isso, agora elas têm que ser refeitas, então fui para o Sidekiq, mas não há nada pendente para processar :(


Entrei no console do rails e, aparentemente, há apenas 10 posts, não todos os que deveriam ser importados
/var/www/discourse# rails c
Carregando ambiente de produção (Rails 7.2.2.1)
discourse(prod)> Post.count
=> 10
discourse(prod)> Post.where(“baked_version IS NULL”).count
=> 0
Suspiro. Você está usando o mesmo nome de host? (Talvez sim?)
Esse é o seu problema agora.
Você configurou o S3 no banco de dados ou no arquivo yml? Eu acho que é o primeiro. A coisa mais fácil seria restaurar apenas o banco de dados, mas é difícil de explicar (extrair o arquivo sql e depois nomeá-lo com as mesmas coisas do arquivo tar.gz)
Você pode tentar isso
discourse restore --pause <backup_filename>
Isso fará uma pausa antes de tentar restaurar as coisas do S3. Então, se você soubesse o que fazer, poderia corrigir o problema com os uploads errados.
Outra coisa seria definir DISCOURSE_USE_S3 como false em seu app.yml. Talvez você precise definir as outras coisas do S3 também, como as que dizem para usar uploads S3 e/ou os buckets S3.
Eu configurei o S3 na época por um tempo, mas depois removi, então essas postagens com imagens do S3 são bem antigas.
Existe uma maneira de identificá-las e ignorá-las/removê-las, para que a importação possa funcionar sem problemas?
Outra coisa seria definir DISCOURSE_USE_S3 como false em seu app.yml. Talvez você precise definir as outras coisas do S3 também, como as que dizem para usar uploads do S3 e/ou os buckets do S3.
Vou tentar isso também, porque no final, não nos importamos com esses arquivos ou postagens do S3, é apenas que ainda não sei como lidar com isso para ignorá-los.
A propósito, se você ainda estiver preso e desesperado e tiver um orçamento, pode entrar em contato comigo por e-mail ou PM ou perguntar em Marketplace.
Você deveria ter me dito desde o início! Eu teria pago de bom grado em primeiro lugar! hehe
Está funcionando agora.
Depois de tentar muitas coisas, acabei fazendo algo contraintuitivo, mas que está funcionando agora:
Configurei o S3 na nova instância corretamente (via painel de administração)
Executei a importação com o –pause thing, mas na segunda etapa, apenas parei o processo. Eu esperava que o fórum não funcionasse ou tivesse problemas com as imagens, mas ele está funcionando e as imagens antigas estão carregando sem problemas.
Ainda estou testando coisas, talvez encontre algo quebrado mais tarde, mas por enquanto, depois de 12 horas de solução de problemas, vou chamar de vitória por enquanto.