Smetti di usare Amazon S3 per gli upload

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 Mi Piace

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

1 Mi Piace

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 Mi Piace

Il task rake uploads:migrate_from_s3 non appare quando entro nell’app ed eseguo rake -AT.

Esiste un nuovo metodo per migrare i file da S3 di nuovo a locale?

2 Mi Piace

Che risultato ottieni quando esegui rake task uploads:migrate_from_s3??

rake interrotto!

Non si sa come eseguire il task 'uploads:migrate_from_s3' (vedi l'elenco dei task disponibili con `rake --tasks`)

Intendevi? uploads:migrate_to_s3

È stato rimosso in una Pull Request della community. Puoi leggere la motivazione qui:

4 Mi Piace

Grazie per questo. Non riesco a trovare istruzioni o indicazioni su come questo dovrebbe essere realizzato manualmente.

1 Mi Piace

Puoi utilizzare awscli per migrare manualmente tutti i file da S3 al tuo server,

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

Configura aws con il tuo ID e la password di S3, poi

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

Questo comando scaricherà tutti i file da S3 in public/uploads/default/. Quindi,

rake posts:rebake
exit
./launcher rebuild app
4 Mi Piace

Ho provato inizialmente a risolvere il problema della migrazione da S3, e dopo aver completato l’uso della mia migrazione come banco di prova per il codice che stavo scrivendo, mi è stato detto che avevo adottato un approccio completamente errato. Questa affermazione è stata supportata da una corruzione dei dati nella mia istanza (di grandi dimensioni) che ho migrato da S3 a file locali. Relativamente di recente, ho dovuto correggere manualmente i dati danneggiati nel database, e non mi aspetto di aver terminato la pulizia dopo il mio tentativo.

Se dovessi iniziare oggi una migrazione da S3 al mio storage personale, avvierei un contenitore MinIO accanto a Discourse, utilizzerei minio-client per copiare i dati da S3 al mio contenitore MinIO, riconfigurerei Discourse per il nuovo percorso “S3” del mio MinIO locale e poi eseguirei posts:remap o rifarei tutti i post per servire i file “S3” dal mio contenitore MinIO.

Ecco un esempio di come dovrebbe funzionare posts:remap in questo caso. Ho il presentimento che esista un esempio migliore da qualche parte qui, ma questo dovrebbe essere sufficiente per iniziare.

6 Mi Piace

Quindi ho seguito queste istruzioni e sono riuscito a copiare i miei caricamenti, ma ci sono ancora collegamenti al server S3 in tutta l’istanza, anche con i caricamenti su S3 disattivati. Ho provato un remap di Discourse, ma non è stato efficace; ho provato anche un rake posts:remap, senza successo, e anche posts:rebake non ha funzionato.

È stato davvero facile impostare i caricamenti su S3, ma non lo è stato tornare indietro.

4 Mi Piace

La migrazione da s3 è rotta da molto tempo e non è ancora stata risolta. Segui il post precedente di mcdanlj.

Qual è l’output che ottieni con il seguente comando?

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

Ho ricollegato i caricamenti uno per uno, dato che il sito non è ancora esteso.
rake posts:missing_uploads è stato utile per verificare di averli tutti individuati.

2 Mi Piace

Sei sicuro che tutti gli URL siano rimappati correttamente? Non solo per le immagini, ma devi anche rimappare gli URL per avatar, icone, backup, ecc. Prova il comando sopra e verifica se nell’output è presente l’URL di S3.

3 Mi Piace

Gli URL sono tutti tornati relativi. Purtroppo, per chi in futuro leggerà questo post, non sono sicuro di quale combinazione di task rake e ricostruzioni dell’app sia stata la chiave del mio successo. Qualcuno più esperto di me su Discourse dovrebbe mettere insieme una guida infallibile su come realizzare questo.

L’uso di awscli come descritto da Pravi sopra è stato efficace per copiare i file da S3.

6 Mi Piace

Anch’io sono molto confuso.
In precedenza avevo due bucket S3 in momenti diversi. E rake posts:missing_uploads ha mostrato che circa 500 post mancavano di upload o erano stati interessati.

Poi ho deciso di copiare gli asset di entrambi i bucket su un server Ubuntu locale (su un’istanza GCP). Ora gli upload mancanti sono nell’ordine di 1000.

Se eseguo Upload.all.sample(1000).pluck(:url) ottengo percorsi diversi per gli upload: alcuni sul server locale, alcuni su bucket1 e pochi su bucket2.

Cosa dovrei fare ora? (attualmente ho configurato gli upload sul server locale).

Il mio è un piccolo sito web, con solo circa 1000 post in due anni.

1 Mi Piace

Devi rimappare l’URL S3. Puoi pubblicare l’output di Upload.all.sample(1000).pluck(:url)?

1 Mi Piace

Grazie, Ji.

Posso provare a farlo, se ci sono buone probabilità di successo.

Modifica: L’ho fatto, ma le immagini nei miei post sono scomparse completamente. Passando il mouse sul segnaposto dell’immagine non veniva mostrato alcun link URL. In precedenza, oltre a mostrare una piccola icona immagine, veniva visualizzato anche l’URL dell’immagine.

Sto fornendo circa 45 righe di output. Non so se vuoi che incollino qui tutte le 1000 righe di output?

=> ["//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 Mi Piace

Vedo diversi avatar rotti sul tuo sito. Immagino sia perché hai eliminato il bucket S3 o non hai rigenerato i file dopo averli copiati da S3. Perché ci sono due bucket nell’output?

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

Hai configurato il tuo sito con un bucket e successivamente cambiato in un altro?

3 Mi Piace

Scusa, in qualche modo ho perso la notifica della tua risposta. Grazie comunque.

Non ho eliminato il bucket S3, ma effettivamente ho cambiato bucket in precedenza (in quel momento non ero a conoscenza delle complicazioni). Quindi tutti i miei asset erano distribuiti su due bucket S3, ma ora li ho copiati manualmente anche sul server locale (/var/discourse/shared/web_only/uploads/default).

Come dovrei procedere per risolvere questo caos?

Nota: conosco i comandi di base del container, della console Rails e di AWS S3.

1 Mi Piace