Arrêtez d'utiliser Amazon S3 pour les téléchargements

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 « J'aime »

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

1 « J'aime »

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 « J'aime »

La tâche Rake uploads:migrate_from_s3 n’apparaît pas lorsque j’exécute la commande rake -AT dans l’application.

Existe-t-il une nouvelle méthode pour migrer les fichiers uploadés de S3 vers le stockage local ?

2 « J'aime »

Quel résultat obtenez-vous lorsque vous exécutez rake task uploads:migrate_from_s3 ??

rake a échoué !

Impossible de trouver la tâche 'uploads:migrate_from_s3' (Consultez la liste des tâches disponibles avec `rake --tasks`)

Voulez-vous dire ? uploads:migrate_to_s3

Elle a été supprimée suite à une demande d’extraction (Pull Request) de la communauté. Vous pouvez consulter les raisons à l’adresse suivante :

4 « J'aime »

Merci pour cela. Je n’arrive pas à trouver d’instructions ou de conseils sur la manière de procéder manuellement.

1 « J'aime »

Vous pouvez utiliser awscli pour migrer manuellement tous vos fichiers de S3 vers votre serveur,

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

Configurez aws avec votre ID et mot de passe S3, puis

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

Cette commande téléchargera tous les fichiers de S3 vers public/uploads/default/. Ensuite,

rake posts:rebake
exit
./launcher rebuild app
4 « J'aime »

J’ai d’abord essayé de corriger la migration depuis S3, et on m’a indiqué, après avoir utilisé ma propre migration comme terrain d’essai pour le code que j’écrivais, que j’avais complètement pris la mauvaise approche. Cette affirmation était étayée par une corruption de données dans mon instance (importante) que j’avais migrée depuis S3 vers des fichiers locaux. Plus récemment, j’ai fini par corriger manuellement des données corrompues dans la base de données, et je ne m’attends pas à avoir terminé le nettoyage suite à ma tentative.

Si je devais lancer aujourd’hui une migration depuis S3 vers mon propre stockage, je lancerais un conteneur Minio à côté de Discourse, j’utiliserais minio-client pour copier depuis S3 vers mon conteneur Minio, je reconfigurerais Discourse pour le nouvel emplacement « S3 » de mon Minio local, puis j’exécuterais posts:remap ou je referais le moulage de tous les messages pour servir le « S3 » depuis mon conteneur Minio.

Voici un exemple de la manière dont posts:remap devrait fonctionner ici. J’ai l’impression qu’il existe un meilleur exemple quelque part ici, mais cela devrait suffire pour démarrer.

6 « J'aime »

J’ai donc suivi ces instructions et j’ai pu copier mes fichiers téléchargés, mais il reste encore des liens vers le serveur S3 dans toute l’instance, même avec les téléchargements S3 désactivés. J’ai essayé un remappage Discourse, mais cela n’a pas été efficace. J’ai aussi essayé la commande rake posts:remap, sans succès, et posts:rebake n’a pas non plus fonctionné.

C’était vraiment facile de configurer les téléchargements sur S3, mais ce n’est pas aussi simple de revenir en arrière.

4 « J'aime »

La migration depuis S3 est cassée depuis longtemps et n’est toujours pas corrigée. Lisez le message ci-dessus de mcdanlj.

Quel est le résultat de la commande suivante ?

./launcher enter app
rails c
Upload.all.sample(20).pluck(:url)
3 « J'aime »

J’ai renvoyé les uploads individuellement car le site n’est pas encore très étendu à ce stade. rake posts:missing_uploads m’a été utile pour déterminer si je les avais tous rattrapés.

2 « J'aime »

Êtes-vous certain que toutes les URL soient correctement remappées ? Pas seulement pour les images, mais aussi pour les avatars, les icônes, les sauvegardes, etc. Essayez la commande ci-dessus et vérifiez si l’URL S3 apparaît dans la sortie.

3 « J'aime »

Les URLs sont toutes revenues en relatives. Malheureusement pour les futures personnes qui liront ce post, je ne suis pas sûr de savoir quelle combinaison de tâches rake et de reconstructions d’application a été le secret de mon succès. Quelqu’un de plus compétent que moi sur Discourse devrait élaborer un tutoriel infaillible expliquant comment cela doit être réalisé.

L’utilisation d’awscli, comme décrit par Pravi ci-dessus, s’est avérée efficace pour copier des fichiers depuis S3.

6 « J'aime »

Je suis moi aussi très confus.
Auparavant, j’avais deux buckets S3 à des moments différents. Et rake posts:missing_uploads a indiqué qu’environ 500 publications manquaient de fichiers joints ou étaient affectées.

Mais ensuite, j’ai décidé de copier les assets des deux buckets vers un serveur Ubuntu local (sur une instance GCP). Et maintenant, les fichiers joints manquants s’élèvent à environ 1000.

Si j’exécute la commande Upload.all.sample(1000).pluck(:url), j’obtiens différents chemins d’accès aux fichiers joints : certains sur le serveur local, certains sur le bucket1 et très peu sur le bucket2.

Que dois-je faire maintenant ? (actuellement, j’ai configuré mes fichiers joints sur le serveur local).

Mon site web est petit, avec seulement environ 1000 publications en 2 ans.

1 « J'aime »

Vous devez remapper l’URL S3. Pouvez-vous afficher le résultat de Upload.all.sample(1000).pluck(:url) ?

1 « J'aime »

Merci, Ji.

Je peux essayer de le faire, si cela a de bonnes chances de réussir.

Édité : Je l’ai fait, mais les images de mes messages ont complètement disparu. En survolant l’emplacement réservé pour l’image, aucun lien URL n’était affiché. Auparavant, non seulement une petite icône d’image était visible, mais aussi l’URL de l’image.

Je donne environ 45 lignes de sortie. Je ne sais pas si tu veux que je colle ici les 1000 lignes de sortie complètes ?

=> ["//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 « J'aime »

Je vois plusieurs avatars brisés sur votre site. Je suppose que c’est parce que vous avez soit supprimé le bucket S3, soit que vous n’avez pas relancé le processus de rebake une fois tous les fichiers copiés depuis S3. Pourquoi y a-t-il deux buckets dans la sortie ?

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

Avez-vous configuré votre site avec un bucket puis changé pour un autre ?

3 « J'aime »

Désolé, j’ai manqué par erreur la notification de votre réponse. Merci beaucoup.

Je n’ai pas supprimé le bucket S3, mais j’ai effectivement changé de bucket plus tôt (à ce moment-là, je ne connaissais pas les complications que cela implique). Ainsi, tous mes actifs se trouvaient dans deux buckets S3, mais maintenant je les ai copiés manuellement sur le serveur local également (/var/discourse/shared/web_only/uploads/default).

Comment dois-je procéder pour résoudre ce désordre ?

Note : Je suis familier avec les commandes de base du conteneur, la console Rails et AWS S3.

1 « J'aime »