Smetti di usare Amazon S3 per gli upload

Il backup contiene molte directory e sottodirectory. Penso che dobbiate copiare i file presenti nelle directory, da entrambi i bucket in modo ricorsivo, nelle rispettive posizioni sul server locale. Ad esempio, tutto il contenuto delle directory 1X e 2X di entrambi i bucket deve essere copiato nelle directory 1X e 2X sul server locale. Non ne sono certo, ma credo di sì.

Potete confermare di aver copiato correttamente tutti i file?

Sì, ho compreso appieno e ho assicurato che i loro percorsi relativi rimangano esattamente gli stessi.

Ad esempio, se un file esisteva precedentemente in:
//bucket1/uploads/original/2x/f/filename.jpg
e l’altro in:
//bucket2/uploads/original/1x/a/filename.png

Ora entrambi esistono anche in:
/var/discourse/shared/web_only/uploads/default/original/2x/filename.jpg e ../original/1x/a/filename.png

Problemi
Prima di copiare i contenuti del bucket sul server locale, ho notato che alcune delle mie immagini venivano visualizzate solo come icone, e l’immagine completa poteva essere vista dai visitatori del sito solo cliccando sull’icona.

Dopo aver copiato (non spostato) tutti i contenuti del bucket nella posizione sopra indicata del mio server locale (mantenendo i percorsi relativi intatti) ed eseguito il comando
discourse remap:oldurl-or-path new-url-or-path,

non è cambiato nulla di visibile sul sito. Ma poi ho eseguito
rake posts:rebake,

e persino le icone delle immagini sono scomparse e non appare alcun URL/percorso quando passi il mouse sopra lo spazio vuoto del segnaposto dell’immagine.

Spero di aver fornito sufficienti dettagli.

In tal caso, penso che quanto riportato di seguito risolverà il tuo 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

Grazie, ji.

Ma come ho già spiegato, dopo aver eseguito le operazioni di ‘remap’ e ‘rebake’, persino le icone delle immagini scompaiono (cioè la situazione peggiora).

Devi fornire il percorso corretto durante la rimappatura, altrimenti potrebbe causare errori. Ho rimappato manualmente un link S3 dall’output di esempio che hai fornito in precedenza e funziona.

Un’immagine ospitata nel bucket:

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

La stessa immagine ospitata sul tuo server locale:

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

Puoi aprire l’immagine in una nuova scheda per vedere i collegamenti di entrambe le immagini sopra. Quindi suppongo che questo funzionerà.

 ./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

Grazie ancora.

Ho fatto clic con il tasto destro sulla (prima) immagine e il percorso mostrato nella barra degli URL non era quello del mio bucket:

Lo stesso vale per la seconda immagine.

Puoi controllare un esempio di post del mio sito qui (il post è in hindi, ma puoi facilmente trovare la piccola icona dell’immagine all’interno del post). L’immagine completa viene visualizzata solo se si fa clic sulla piccola icona.

Tuttavia, se eseguo il rimappaggio e poi la ricottura, anche questa icona scompare completamente. Non rimane alcun modo per il visitatore di vedere l’immagine.

Sembra che tu abbia utilizzato in precedenza CloudFront per la memorizzazione nella cache. Cancella la cache del browser e riprova.
Se hai apportato configurazioni a CloudFront, credo sia meglio annullare tutte quelle impostazioni.

Nessun Cloudflare {edit: CloudFront} (o qualsiasi altra CDN) coinvolto dalla mia parte, per il mio sito web, negli ultimi circa 2 anni.

Le immagini su meta potrebbero essere archiviate su Cloudflare.

Non è Cloudflare. È CloudFront. Hai svuotato la cache del browser?

Sì, CloudFront (scusa).

Sì, l’ho fatto. Inoltre, ho aperto questo argomento in modalità incognito di Firefox.

Ora sto ricevendo gli stessi link di CloudFront. Sembra che tu abbia abilitato AWS CloudFront per il tuo sito. CloudFront sta memorizzando nella cache le immagini nel tuo bucket. Penso che tu debba rimuovere la distribuzione da CloudFront. Devi accedere al tuo account AWS per verificare se la distribuzione CloudFront è attiva?

Ehi, abbiamo frainteso CloudFront qui. In realtà, è meta-discourse che sta memorizzando l’immagine nella cache. È colpa mia.

Non ho mai utilizzato CloudFront (o qualsiasi altra CDN) su AWS o nel frontend. Anche se circa due anni fa ho usato CloudFlare per un mese circa, l’ho poi rimosso definitivamente.
Non ho nemmeno scelto CloudFront su AWS. Quindi non sorge alcuna domanda nemmeno in quel caso.

Inoltre, sul mio PC, quando apro le immagini, vengono mostrati gli indirizzi del bucket AWS, non di alcuna altra CDN.

Ho frainteso CloudFront. In realtà, è meta Discourse che ha memorizzato in cache l’immagine. Ho modificato il mio post precedente. Dai un’occhiata.

Stai solo suggerendo di rimappare i percorsi delle immagini (dall’URL del bucket S3 al percorso del server locale) e poi di rifare il baking.

Ma come ho già detto, l’ho già fatto e ho scoperto che ciò aggrava il problema. (inoltre, dopo il rebaking, anche la funzione ‘Ripristina’ non funziona ed è difficile tornare indietro).

Avete qualche altra idea utile?

Quando hai eseguito il reindirizzamento, sei sicuro che i percorsi fossero gli stessi indicati di seguito,

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/

Quale percorso hai specificato durante il reindirizzamento?

Ti ho già fornito un esempio in un post precedente. Ha funzionato. Non conosco nessun altro metodo.

Proverò di nuovo, con la massima cura possibile.
Ma stavo cercando un metodo per capire cosa succede dietro le quinte. Almeno con un singolo post di esempio, volevo vedere quali post hanno quale bucket mappato e in che guaio mi trovo.

Comunque, proverò di nuovo e farò sapere qui. Grazie ancora.

Il percorso che hai specificato nel tuo precedente remap verrà riflesso nell’output del comando sottostante. Poiché entrambi i bucket sono ancora presenti, penso che il tuo precedente remap possa essere fallito. Comunque, ora la decisione è tua. Spero che tu riesca presto a trovare una soluzione. In bocca al lupo.

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

Grazie

Non sono più esperto di te, ma l’ho appena fatto io - e ce l’ho fatta con l’aiuto di @Pravi.

Passaggi necessari per tornare dallo stato di caricamento su S3 allo stato vanilla

Non è semplicissimo: fai molta attenzione al testo e ai link, perché se qualcosa va storto sarà un vero disastro da sistemare. Ma è assolutamente fattibile.

Passo 1 - Copia i file dal tuo bucket S3 alla cartella public/uploads/default

Per prima cosa, installa AWS CLI all’interno del contenitore dell’app

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

Configura aws con il tuo ID e password S3 (di solito è semplice)

aws configure

Poi usa aws per copiare tutto il contenuto del bucket in public/uploads/default/

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

Passo 2 - Rimappa l’URL di S3

Il modo più semplice è trovare un’immagine sul tuo forum e ispezionare l’URL. Ti serve ogni parte fino al nome effettivo del file (incluso l’ultimo /):

discourse remap //il-lungo-url-nei-tuoi-immagini-fino-al-nome-file /uploads/default/

Passo 3 - Rigenera i post e ricostruisci l’app:

rake posts:rebake
exit
./launcher rebuild app

Passo 4 - Disattiva S3

  1. Disattiva i caricamenti su S3 nelle impostazioni (o nel tuo app.yml se li hai configurati così). Se hai usato una CDN, rimuovi anche il link ad essa dall’impostazione (altrimenti non viene davvero disattivata).
  2. Spegni il tuo contenitore. Io l’ho fatto spostando il contenuto in un nuovo contenitore come backup come primo passo.

Finito! Finora non ho riscontrato problemi. Vai a provarlo!

Ottimo lavoro! Credo che questi siano i passaggi che alla fine mi hanno aiutato a avere successo, ma ho provato molti altri rimappaggi diversi che non hanno funzionato altrettanto bene! È fantastico avere istruzioni formalizzate.