Pare de usar Amazon S3 para uploads

O backup possui muitos diretórios e subdiretórios. Acredito que seja necessário copiar os arquivos contidos nos diretórios de ambos os buckets, de forma recursiva, para o local correspondente no servidor local. Por exemplo, todo o conteúdo dos diretórios 1X e 2X de ambos os buckets deve ser copiado para os diretórios 1X e 2X no servidor local. Não tenho certeza quanto a isso, mas é o que acredito.

Pode confirmar se todos os arquivos foram copiados corretamente?

2 curtidas

Sim, entendi perfeitamente e garanti que seus caminhos relativos permaneçam exatamente os mesmos.

Por exemplo, se um arquivo existia anteriormente em:
//bucket1/uploads/original/2x/f/filename.jpg
e o outro em:
//bucket2/uploads/original/1x/a/filename.png

Agora, ambos também existem em:
/var/discourse/shared/web_only/uploads/default/original/2x/filename.jpg e ../original/1x/a/filename.png

Problemas
Antes de copiar o conteúdo do bucket para o servidor local, percebi que algumas das minhas imagens apareciam apenas como ícones, e a imagem completa só podia ser visualizada pelo visitante do site ao clicar nesse ícone.

E depois que copiei (não movi) todo o conteúdo do bucket para o local mencionado acima no meu servidor local (mantendo os caminhos relativos intactos) e executei o comando
discourse remap:oldurl-or-path new-url-or-path,

Nada mudou visivelmente no site. Mas, em seguida, executei o comando
rake posts:rebake,

E até mesmo os ícones das minhas imagens desapareceram, e nenhum URL/caminho aparecia quando passava o ponteiro do mouse sobre o espaço vazio do marcador de posição da imagem.

Espero ter fornecido detalhes suficientes.

1 curtida

Nesse caso, acho que o comando abaixo resolverá seu problema.

    ./launcher enter app
    discourse remap //bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/ /uploads/default/
    discourse remap //bhdisco.s3.dualstack.ap-south-1.amazonaws.com/uploads/ /uploads/default/
    rake posts:rebake
1 curtida

Obrigado, ji.

Mas, como já expliquei, após executar as operações de ‘remap’ e ‘rebake’, até mesmo os ícones das imagens desaparecem (ou seja, a situação fica pior).

1 curtida

Você precisa fornecer o caminho correto ao fazer o remapeamento, caso contrário, pode quebrar. Eu remapeei manualmente um link do S3 a partir da saída de exemplo que você forneceu anteriormente e funcionou.

Uma imagem hospedada no bucket:

https://bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/9/9d8f29892278f164e8ce27a6b58cc8af0760802c.png

A mesma imagem hospedada no seu servidor local:

https://bathindahelper.com/uploads/default/original/2X/9/9d8f29892278f164e8ce27a6b58cc8af0760802c.png

Você pode abrir a imagem em uma nova aba para ver os links de ambas as imagens acima. Portanto, presumo que isso funcionará.

 ./launcher enter app
  discourse remap //bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/ /uploads/default/
  discourse remap //bhdisco.s3.dualstack.ap-south-1.amazonaws.com/uploads/ /uploads/default/
  rake posts:rebake

1 curtida

Obrigado novamente.

Cliquei com o botão direito na (primeira) imagem e o caminho exibido na barra de URL não era do meu bucket:

O mesmo ocorreu com a segunda imagem.

Você pode verificar uma postagem de exemplo do meu site aqui (a postagem está em hindi, mas você pode encontrar facilmente o pequeno ícone da imagem no meio da postagem). A imagem completa só aparece se clicar no pequeno ícone.

No entanto, se eu remapear e depois recompilar, esse ícone também desaparece completamente. E não há mais nenhuma maneira para o visitante ver a imagem.

2 curtidas

Parece que você já usou o CloudFront para cache anteriormente. Limpe o cache do seu navegador e tente novamente.
Se você fez alguma configuração no CloudFront, acho melhor desfazer todas essas configurações.

2 curtidas

Nenhum Cloudflare {edit: CloudFront} (ou qualquer outra CDN) envolvido do meu lado, para o meu site, nos últimos cerca de 2 anos.

As imagens no meta ESTÃO armazenadas no Cloudflare, talvez.

1 curtida

Não é o Cloudflare. É o CloudFront. Você limpou o cache do navegador?

2 curtidas

Sim, é o CloudFront (desculpe).

Sim, fiz. Além disso, abri este tópico no modo anônimo do Firefox.

1 curtida

Agora, estou recebendo os mesmos links do CloudFront. Parece que você ativou o AWS CloudFront para seu site. O CloudFront está armazenando em cache as imagens no seu bucket. Acredito que você precise remover a distribuição do CloudFront. Você precisa fazer login na sua conta AWS para verificar se a distribuição do CloudFront está ativa?

2 curtidas

Ei, nós entendemos mal o CloudFront aqui. Na verdade, é o meta discourse que está armazenando a imagem em cache. Minha culpa.

1 curtida

Eu nunca usei o CloudFront (ou qualquer outra CDN) na AWS ou no front-end. Embora, há cerca de 2 anos, tenha usado o CloudFlare por um mês ou mais, mas depois o removi definitivamente.
Também não escolhi o CloudFront na AWS. Então, essa questão nem se aplica.

Além disso, no meu PC, quando abro as imagens, elas mostram os endereços do bucket da AWS, e não de nenhuma outra CDN.

1 curtida

Eu entendi mal o CloudFront aqui. Na verdade, o meta discourse armazenou a imagem em cache. Editei minha postagem anterior. Dê uma olhada.

2 curtidas

Você está apenas sugerindo que eu remapeie os caminhos das imagens (da URL do bucket S3 para o caminho do servidor local) e, em seguida, refaça o bake.

Mas, como mencionei acima, já fiz isso e descobri que isso agrava o problema. (além disso, após o rebake, a opção ‘Restaurar’ também não funciona e é difícil reverter).

Alguma outra ideia útil, por favor?

1 curtida

Ao fazer o remapeamento, você tem certeza de que os caminhos eram os mesmos abaixo?

discourse remap //bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/ /uploads/default/
discourse remap //bhdisco.s3.dualstack.ap-south-1.amazonaws.com/uploads/ /uploads/default/

Qual caminho você especificou ao fazer o remapeamento?

Já forneci um exemplo em uma postagem anterior. Funcionou. Não conheço nenhum outro método.

2 curtidas

Vou tentar novamente, com o máximo de cuidado possível.
Mas eu estava procurando algum método que me permitisse entender o que está acontecendo nos bastidores. Pelo menos com uma amostra de post, eu queria ver quais posts estão mapeados para quais buckets e em que confusão estou.

De qualquer forma, vou tentar novamente e avisar aqui. Obrigado mais uma vez.

1 curtida

O caminho que você especificou no seu mapeamento anterior será refletido na saída do comando abaixo. Como ambos os buckets ainda estão presentes, acredito que seu mapeamento anterior pode ter falhado. De qualquer forma, agora a decisão é sua. Espero que você encontre sua solução em breve. Boa sorte.

./launcher enter app
rails c
Upload.all.sample(2000).pluck(:url)

Obrigado

2 curtidas

Não sou mais esperto que você, mas acabei de passar por isso — e consegui sair com a ajuda do @Pravi.

Os passos que você precisa seguir para voltar do upload S3 ao estado padrão

Não é super fácil — tenha muito cuidado com o texto e os links, pois se algo der errado, será uma bagunça difícil de arrumar. Mas é totalmente viável.

Passo 1 - Copie os arquivos do seu bucket S3 para a pasta public/uploads/default

Primeiro, instale o AWS CLI dentro do container do aplicativo:

cd /var/discourse
./launcher enter app
sudo apt install awscli

Configure o AWS com seu ID e senha do S3 (geralmente é simples):

aws configure

Em seguida, use o aws para copiar todo o conteúdo do bucket para public/uploads/default/:

aws s3 sync s3://my-bucket-name/ public/uploads/default/

Passo 2 - Remapeie a URL do S3

Isso é mais fácil encontrando uma imagem no seu fórum e inspecionando a URL. Você quer cada parte até o nome do arquivo real (incluindo o último /):

discourse remap //a-longa-url-em-suas-imagens-ate-o-nome-do-arquivo /uploads/default/

Passo 3 - Reassove os posts e reconstrua o aplicativo:

rake posts:rebake
exit
./launcher rebuild app

Passo 4 - Desative o S3

  1. Desative os uploads S3 nas configurações (ou no seu app.yml, se configurou dessa forma). Se você estiver usando um CDN, remova também o link dele da configuração (caso contrário, ele não será realmente desativado).
  2. Desative seu container. Fiz isso movendo o conteúdo para um novo container como backup como etapa inicial.

Ufa! Feito. Até agora, não encontrei nenhum problema. Vá e teste!

10 curtidas

Bom trabalho! Acredito que foram esses os passos que, no final, me ajudaram a ter sucesso, mas eu fiz muitos remaps diferentes que não funcionaram tão bem! É ótimo ter instruções formalizadas.

4 curtidas