Atualizei acidentalmente, agora algumas configurações foram perdidas/quebraram

Para ser totalmente transparente, não fiz nenhuma manutenção manual na nossa instalação do Discourse auto-hospedada há muito, muito tempo, e alguém configurou originalmente.

Precisei alterar minhas credenciais SMTP, pois o SendGrid está exigindo a migração da autenticação básica para chaves de API.

Encontrei este documento: Provedores de e-mail recomendados para o Discourse

Que diz:

Para alterar o serviço de e-mail atual, execute também o ./discourse-setup (isso deixará o fórum offline por alguns minutos enquanto ele é recriado).

Executei esse comando, respondi às perguntas conforme o esperado, e isso gerou cerca de 2.000 linhas de saída no stdout, terminando com:

Upgrade Complete
----------------
Optimizer statistics are not transferred by pg_upgrade so,
once you start the new server, consider running:
    ./analyze_new_cluster.sh

Running this script will delete the old cluster's data files:
    ./delete_old_cluster.sh
-------------------------------------------------------------------------------------
UPGRADE OF POSTGRES COMPLETE

Old 10 database is stored at /shared/postgres_data_old

To complete the upgrade, rebuild again using:

./launcher rebuild app
-------------------------------------------------------------------------------------

cfd4df26701b4b4cd4a4202f30a9c8165a1ba609c921bffc25f250f52fee6cbe

Agora, eu não esperava que isso “atualizasse” nada. Eu só queria alterar as credenciais SMTP. Mas o site não voltou automaticamente, então fiz o que o texto diz “para concluir a atualização” e executei:

./launcher rebuild app

Isso disparou outras ~8.000 linhas de saída no stdout. O site finalmente voltou, MAS não parece o mesmo:

  • Meu logotipo estava faltando, substituído pelo logotipo “Discourse”.
  • As imagens de avatar dos usuários estavam quebradas. Eventualmente, elas voltaram a funcionar.
  • Imagens nas postagens e logotipos de categorias estavam quebradas. Essas ainda não estão funcionando. Procurei por imagens com nomes de arquivo correspondentes no diretório ./discourse/share E no nosso bucket S3 (onde a URL espera encontrá-las), mas elas não existem.
  • Postagens da minha categoria “suporte”, que eu havia ocultado da página “mais recentes”, agora estão visíveis novamente nessa página.
  • Minha categoria “suporte” não está mais visível na página “categorias”.
  • A página “categorias” agora tem duas colunas, com categorias à esquerda e “mais recentes” à direita. Acredito que antes era apenas uma lista de categorias.
  • A cor do + no meu botão + Novo Tópico mudou de branco para cinza.

Neste ponto, suspeito que alguma configuração foi perdida, mas todas as minhas postagens estão intactas. Então, suspeito que o Discourse se atualizou (não sei de qual versão, provavelmente muitas versões), e algumas configurações padrão subjacentes, CSS, modelos, etc., mudaram, causando os problemas listados acima.

Ao visualizar o código-fonte, vejo que a versão agora é 2.6.0.beta6, que aparentemente foi lançada há apenas 7 dias.

Então, minhas perguntas são:

  • É normal ter que atualizar completamente o software assim para aplicar uma simples alteração de configuração, como credenciais SMTP?
  • Como posso alterar configurações ou aplicar atualizações de segurança sem atualizar todo o software?
  • Onde estão minhas imagens, ou por que sua URL mudou de alguma forma, tornando-as inacessíveis?
  • Existe alguma maneira de reverter, sem perder as novas postagens desde que tudo isso aconteceu? Eu nem sei em qual versão estávamos antes. Tenho backups do Discourse no S3 (apenas um dump SQL compactado em gzip).
  • Preciso apenas revisar todas as configurações e personalizações manualmente para corrigir coisas como a cor do + Novo Tópico e a categoria “suporte” oculta/visível?

Eu achava que estávamos mantendo snapshots EBS do nosso volume EC2 onde o Discourse está hospedado, mas isso não era verdade. Desde então, ativei os snapshots para que possamos reverter dessa forma no futuro, se necessário.

Obrigado.

Sim. Seria possível destruir e reiniciar o contêiner para aplicar as novas configurações do SMTP, mas você precisaria examinar cuidadosamente como fazer isso.

Não. As atualizações de segurança fazem parte do software completo. Você poderia usar a branch estável, mas parece que você estava várias versões atrasado, então a maioria dos seus problemas ainda teria ocorrido.

Isso não está claro. Elas geralmente não são perdidas em uma atualização.

Não. [quote=“mrmachine, post:1, topic:171465”]
Preciso apenas revisar todas as configurações e personalizações manualmente para corrigir coisas como a cor do botão + Novo Tópico e a categoria de “suporte” oculta/visível?
[/quote]

Sim. Parece que você estava executando uma versão com vários anos de atraso. Desde então, dezenas de programadores dedicaram milhares de horas. Eles fizeram alterações que quebraram algumas das suas personalizações.

Mas você ainda não poderá reverter sem perder as postagens feitas desde o último backup.

Você deve atualizar a cada versão beta ou mudar para a branch estável na próxima versão estável.

Apenas fazendo um acompanhamento sobre isso. Estávamos armazenando imagens carregadas no S3 e não escolhemos baixar imagens remotas para evitar links quebrados. Não tenho certeza se isso é relevante, mas o ponto é que as imagens deveriam ter sido armazenadas no S3 e referenciadas com URLs do S3 no Discourse.

Após a atualização, muitas e muitas imagens não estavam sendo exibidas. Logotipos de categorias e uploads de usuários em posts. Ao verificar no S3, os nomes de arquivo referenciados não existiam.

Felizmente, temos a versionamento do S3 ativado e pude ver no console do S3 que MUITAS imagens referenciadas haviam sido excluídas durante/depois da atualização.

Adaptei um script Python que encontrei (https://stackoverflow.com/a/54613767/2829685) para iterar sobre todas as versões de objetos no nosso bucket S3 e remover “marcadores de exclusão” da versão atual de qualquer arquivo com um timestamp last_modified igual ou posterior à data da atualização.

Isso levou a maior parte do dia para ser executado e recuperou cerca de 45 mil imagens. Parece que o Discourse cria muitas miniaturas para cada imagem.

Agora nossos logotipos de categoria e imagens carregadas por usuários em posts estão de volta. Mas não faço ideia de como todas essas imagens poderiam ter sido excluídas no S3 como parte do processo de atualização.

Parece que isso poderia ser um bug muito perigoso no processo de atualização do Discourse? Embora talvez já tenha sido corrigido, já que eu estava atualizando de uma versão tão antiga.