Pare de usar Amazon S3 para uploads

I want to stop using Amazon s3 for uploads.
I’ve not done a rake task like this so want to check things before I run on the live environment.
My plan is to use a clone of my live server to test the rake task uploads:migrate_from_s3.

Will this move the files from s3?
Or copy them to the local storage and leave the s3 files there until I manually delete them?

If it deletes them from s3 that will break the live forum and that would be bad!
thanks

2 curtidas

I believe @vinothkannans can point you in the right direction here.

1 curtida

Yes, it will remove the file from S3.

You should clone your S3 bucket too. And change the bucket name to newly cloned one in the site settings before testing the migration process.

Also I will recommend you to take a backup of S3 bucket before running the migration in live environment.

4 curtidas

A tarefa do rake uploads:migrate_from_s3 não aparece quando eu entro no app e executo o rake -AT.

Existe um novo método para migrar uploads do s3 de volta para o local?

2 curtidas

Qual saída você obtém ao executar rake task uploads:migrate_from_s3??

rake abortou!

Não foi possível encontrar a tarefa 'uploads:migrate_from_s3' (veja a lista de tarefas disponíveis com `rake --tasks`)

Você quis dizer? uploads:migrate_to_s3

Ela foi removida em um Pull Request da comunidade. Você pode ler a justificativa em

4 curtidas

Obrigado por isso. Não consigo encontrar instruções ou orientações sobre como isso deve ser feito manualmente.

1 curtida

Você pode usar o awscli para migrar manualmente todos os seus arquivos do S3 para seu servidor,

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

Configure o aws com seu ID e senha do S3. Em seguida,

cd public/uploads/default/
aws s3 sync s3://mybucketname/

Este comando fará o download de todos os arquivos do S3 para public/uploads/default/. Depois,

rake posts:rebake
exit
./launcher rebuild app
4 curtidas

Tentei primeiro corrigir a migração fora do S3 e fui informado, após concluir o uso da minha própria migração como ambiente de teste para o código que estava escrevendo, que havia adotado uma abordagem completamente equivocada. Essa afirmação foi corroborada por corrupção de dados na minha instância (grande) que migrei do S3 para arquivos locais. Recentemente, acabei corrigindo manualmente dados corrompidos no banco de dados e não tenho a expectativa de que terminei a limpeza após minha tentativa.

Se fosse iniciar hoje uma migração do S3 para meu próprio armazenamento, levantaria um container MinIO ao lado do Discourse, usaria o minio-client para copiar do S3 para meu container MinIO, reconfiguraria o Discourse para o novo local “S3” do meu MinIO local e, em seguida, executaria posts:remap ou rebake em todas as postagens para servir “S3” a partir do meu container MinIO.

Aqui está um exemplo de como posts:remap deve funcionar aqui. Tenho a sensação de que há um exemplo melhor em algum lugar aqui, mas isso deve ser suficiente para começar.

6 curtidas

Então, segui essas instruções e consegui copiar meus uploads, mas ainda há links para o servidor S3 em toda a instância, mesmo com os uploads no S3 desativados. Tentei um remap do Discourse, mas não foi eficaz; tentei um rake posts:remap, também sem sucesso; e posts:rebake não funcionou.

Foi realmente fácil configurar os uploads no S3, mas não foi fácil voltar atrás.

4 curtidas

A migração do s3 está quebrada há muito tempo e ainda não foi corrigida. Leia a postagem acima de mcdanlj.

Qual é a saída que você obtém com o comando abaixo?

./launcher enter app
rails c
Upload.all.sample(20).pluck(:url)
3 curtidas

Eu re-link os uploads individualmente, já que o site ainda não é extenso neste momento.
rake posts:missing_uploads foi útil para determinar se eu havia capturado todos eles.

2 curtidas

Tem certeza de que todas as URLs foram mapeadas corretamente? Não apenas para imagens, mas você precisa mapear URLs para avatares, ícones, backups etc. Tente o comando acima e veja se a URL do S3 aparece na saída.

3 curtidas

As URLs estão todas relativas novamente. Infelizmente, para quem ler este post no futuro, não tenho certeza de qual combinação de tarefas rake e reconstruções do aplicativo foi o segredo do meu sucesso. Alguém mais inteligente que eu sobre o Discourse deveria criar um tutorial à prova de falhas sobre como isso deve ser feito.

Usar o awscli, conforme descrito por Pravi acima, foi eficaz para copiar arquivos do S3.

6 curtidas

Eu também estou muito confuso.
Antes, eu tinha dois buckets S3 em momentos diferentes. E o rake posts:missing_uploads mostrou que cerca de 500 posts tinham uploads ausentes ou foram afetados.

Mas então decidi copiar os ativos de ambos os buckets para um servidor Ubuntu local (em uma instância do GCP). Agora, os uploads ausentes estão na faixa de 1000.

Se eu executar o comando Upload.all.sample(1000).pluck(:url), obtenho caminhos diferentes para os uploads: alguns no local, alguns no bucket1 e muito poucos no bucket2.

O que devo fazer agora? (Atualmente, configurei meus uploads no servidor local).

Meu é um pequeno site, com apenas cerca de 1000 posts em 2 anos.

1 curtida

Você precisa remapear a URL do S3. Pode postar a saída de Upload.all.sample(1000).pluck(:url)?

1 curtida

Obrigado, Ji.

Posso tentar fazer isso, se houver boas chances de sucesso.

Edição: Fiz isso, mas as imagens dos meus posts desapareceram completamente. Ao passar o mouse sobre o espaço reservado da imagem, nenhum link de URL era exibido. Antes, não apenas mostrava um pequeno ícone de imagem, mas também a URL da imagem.

Estou fornecendo cerca de 45 linhas de saída. Não sei se você quer que eu cole todas as 1000 linhas de saída aqui?

=> ["//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/1X/7277b38e1d614b3d700f6266fa5b841a15e7c6ba.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/1X/0c1f27b110ff476c636265b46d63f83c5bf575e9.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/a/a18dd8e63379c70e2a4014b0f6d85cf89ab12ed7.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/5/51798c75050206a784d9ae186cffb5c4558b1625.jpeg",
 "/uploads/default/original/2X/1/159ca83317895ddaefec42ee75c8748201f34d1f.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/1/1593a5f91ac7642180c9651544806d89342a4e24.jpeg",
 "/uploads/default/original/2X/f/fa7c701e58c198984707161364c81e9c59b27572.jpeg",
 "/uploads/default/original/2X/b/b6b12c4df19b234f6d1551c26d92a14969f19f12.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/f/fcd4201295e6e63a7496e70e8b067225774834f3.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/f/f42150c03cce15a1bdc34c6af746fe51b63db36c.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/1X/e66cfb3a0bdc558a02fd999d1bf5a185521456cf.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/1X/1885bc0fe4cf6ee25ab8d6e250807c9836168cdc.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/c/c1f240c94d45e0be0cfcd7a3cc714e389bb49f23.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/2/293518b6119a17d64222cf5d691aee271fa572cf.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/1X/617f0bb525f05934ae455582deacb96e7fd097e9.jpeg",
 "//bhdisco.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/3/331a610d2237294bdb126eecf1f087173c5087df.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/d/d0b3efa53ceab849e17e781e63f2b969f94dbde0.jpeg",
 "/images/default-favicon.ico",
 "/uploads/default/original/2X/b/b399c60eb0b83232531ef2ead5a060fbd9c2a64e.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/9/987178dc86175225b999151e112deb3bf26b13af.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/c/c99c8a9dd3e59cecc6fb5010f362b1dc3f49ca66.jpeg",
 "//bhdisco.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/5/5c145297f26cd91f6f157d507324724ba15cb618.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/e/ef5c223cd604e3574c300671da61693dc5399e62.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/1X/9c99b85e976c42bc3c692f75b8828abbbc2bc4ea.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/6/6f88f27ee155e69bb5b701b86eba9dc3e369bc09.png",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/3/3b454434e58b05db14f51c3fcdfbd36d0d96d4eb.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/1X/b7e92457674b8c28f6ecfbc9340816fc3583d20e.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/7/731c0ee200660fb1888cd058c79282bf7f6dab95.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/1X/a42f92c28be8bd5ac86bb55f36fc9ca0bec37c72.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/1X/ac7dc4c531d428b152de3eebceb44bfe779c349d.jpeg",
 "//bhdisco.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/f/f361a9ad5194ef13c2c6b24e2db98455e7cc48d9.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/1X/43ec21eafc00f8cd05976e0fbec41ef686e0e3b3.png",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/1X/8b41f21b02df80a9e5c4ea14a5dffa5776811f3d.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/6/6eee5c5a5a2b274e7d8ccc911cd4f594cc4930de.png",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/1X/c1736a8c2923f0bd341f7112db74cd62392f7e14.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/c/c3e2fbb84c55dbf2f1fdccf835964eb4319e2371.png",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/0/0b41e87ab7728dbead217e237c4ad8940bdfe776.png",
 "//bhdisco.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/a/a3ac121566d741d5b396ba49625f3206ff0c498f.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/b/bbbb6973cb0900389675691c5c129c907cf4611f.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/2/28f5d5bf46b30a33bde8e67c184cb099cc71511a.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/f/ff34c3fc207781d5881d4583cceb26aa54619c0e.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/f/f85db75b4721b8d24abf78ee3d25f2ffbef26da9.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/1X/35c6402fbf4a8fca05f30924800fa0c90cf891e7.png",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/9/9d8f29892278f164e8ce27a6b58cc8af0760802c.png",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/1/1a533eb9f4ec5186427a541a7ebbf06817627f97.png",
1 curtida

Vejo vários avatares quebrados no seu site. Acredito que seja porque você excluiu o bucket S3 ou não reprocessou as imagens após copiar todos os arquivos de volta do S3. Por que há dois buckets na saída?

bhdisco.s3.dualstack.ap-south-1.amazonaws.com
bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com

Você configurou seu site com um bucket e depois mudou para outro?

3 curtidas

Desculpe, de alguma forma perdi a notificação de que você respondeu. Muito obrigado mesmo.

Não excluí o bucket S3, mas realmente mudei de bucket anteriormente (naquela época eu não estava ciente das complicações). Então, todos os meus ativos estavam em dois buckets S3, mas agora os copiei manualmente para o servidor local também (/var/discourse/shared/web_only/uploads/default).

Como devo proceder para resolver essa bagunça?

Nota: Estou familiarizado com comandos básicos do container, do console do Rails e do AWS S3.

1 curtida