Configura BackBlaze S3 con BunnyCDN

Mi ci è voluto un’eternità per capire come fare tutto questo, quindi ho voluto creare questa guida per rendere le cose più semplici per gli altri. Servire le immagini in questo modo dovrebbe rendere il tuo sito più veloce nel caricamento. La mia configurazione Discourse combina un droplet DigitalOcean, BackBlaze B2 S3, BunnyCDN e la versione gratuita di Cloudflare.

Ho scelto questi servizi dopo aver fatto alcune ricerche su affidabilità, prezzi e benchmark. Sembravano le opzioni migliori per me. Cloudflare aiuta con la sicurezza, ma rallenterà leggermente il sito, almeno per quanto ne so, quindi dovresti valutarlo. Backblaze ha partnership sia con Cloudflare che con Bunny che consentono il trasferimento dati gratuito.

Anche se Cloudflare è definito una CDN, non funziona come le CDN tradizionali e probabilmente non funzionerà da solo per configurare S3 con Discourse. Potresti aver bisogno di un altro provider CDN; BunnyCDN funziona bene per me. Se qualcuno ci è riuscito solo con Cloudflare, fatemelo sapere :stuck_out_tongue:

Come impostare gli upload su S3:
Per prima cosa, devi registrarti su Backblaze, creare dei bucket e inserire i dettagli nelle impostazioni di Discourse:

Poi registrati su BunnyCDN e segui questa guida:

bunny.net - The Global Edge Platform that truly Hops (link di referral, ottengo un credito di 20$ sulla mia fattura)

Dopo aver creato la tua zona di pull su BunnyCDN, devi ottenere l’URL corretto da inserire nelle impostazioni di amministrazione di Discourse per “s3 cdn url”. Vai alla tua dashboard bunnycdn > pull zones > gestisci pull zones > clicca sulla tua zona > copia l’URL accanto a “host name”.

L’URL dovrebbe essere simile a questo: example.b-cdn.net, ma dovrai assicurarti di inserire https:// davanti, così: https://example.b-cdn.net

Salva le modifiche nell’area delle impostazioni di amministrazione di Discourse.

Premi Ctrl+F5 due volte nel tuo browser sul tuo sito Discourse.

Esegui un test caricando un’immagine nel compositore di testo di Discourse. Ispeziona l’elemento dell’immagine di test o visualizza l’origine dell’immagine per assicurarti che funzioni. L’URL dovrebbe essere diverso dal tuo dominio normale, qualcosa come example.b-cdn.net / nomefile.

Ora, ogni volta che qualcuno carica un’immagine, questa sarà nel tuo bucket Backblaze e non occuperà spazio sul tuo droplet DigitalOcean :stuck_out_tongue:

Backup degli upload su S3
Se vuoi configurare i backup di Discourse per essere salvati nel tuo bucket Backblaze, devi fare quanto segue:

Nella guida che ho pubblicato più in alto in questo thread, presta attenzione a come spiega che servono due bucket separati. Un bucket è pubblico, questo è il tuo bucket di upload per gli utenti che caricano immagini sul tuo forum. L’altro bucket è privato, questo è il tuo bucket per i backup. È importante eseguire backup automatizzati di Discourse nel caso in cui qualcosa si rompa, così potrai caricare il backup e risolverlo.

Sulla tua dashboard BunnyCDN, dovresti creare una seconda zona di pull. La tua prima zona di pull era per gli upload, questa nuova zona sarà per i backup.

dashboard bunnycdn > pull zones > aggiungi zona di pull

Segui la stessa guida a cui ho linkato prima, “Come accelerare la consegna dei file Backblaze B2 con BunnyCDN” di BunnyCDN, ma questa volta collegherai la nuova zona di pull al tuo bucket di backup invece che a quello degli upload.

Consiglio di utilizzare il “livello ad alto volume 5$/TB” nella pagina di creazione della zona di pull di BunnyCDN; penso che i backup non abbiano bisogno del livello più costoso/più veloce “livello standard 10$/TB” che ho usato per il mio bucket di upload.

Imposta le tue impostazioni di backup nell’area delle impostazioni di amministrazione di Discourse. “backup location” dovrebbe essere impostato su S3 e “s3 endpoint” dovrebbe puntare a quello che hai su Backblaze, qualcosa come questo:
s3.us-west-002.backblazeb2.com

CTRL+F5 due volte sul tuo sito per pulire la cache

Avvia un backup e attendi che termini. Poi aspetta 5 minuti e controlla la cartella dei backup su Backblaze; dovresti vedere il nuovo backup lì.

Migrazione delle immagini più vecchie:
Questo passaggio è opzionale ma consigliato, specialmente se hai poco spazio di archiviazione sul tuo server. Quindi hai tutto configurato per i nuovi caricamenti di immagini, ma anche le immagini più vecchie possono essere trasferite nei tuoi bucket. Per far funzionare questo processo, devi seguire quanto segue:

Configurazione della CDN Cloudflare
Questo passaggio è opzionale poiché Backblaze ha ottenuto una partnership che rende gratuito anche il trasferimento dati verso Bunny, ma per una sicurezza aggiuntiva e altre funzionalità, puoi far passare i dati prima attraverso Cloudflare e poi far sì che Bunny estragga i dati da dove Cloudflare li lascia cadere.

https://help.backblaze.com/hc/en-us/articles/217666928-Using-Backblaze-B2-with-the-Cloudflare-CDN

8 Mi Piace

Volevo solo dire che ho fatto quello che ha fatto Bill e confermo che funziona! L’unico problema è che funziona per i nuovi file e non per quelli vecchi. La cosa bella del metodo di Bill è che non ha nemmeno richiesto una ricompilazione. Tuttavia, spero che qualcuno riesca a capire come far funzionare anche i file vecchi con S3.

Tra l’altro, i backup non funzionano nemmeno, almeno non per me, e ho fatto esattamente la stessa cosa di Bill.

5 Mi Piace

Puoi migrare i vecchi file utilizzando il task rake.

1 Mi Piace

Se ti riferisci a questo comando, l’ho già provato e non ha caricato le vecchie risorse:

sudo -E -u discourse bundle exec rake s3:upload_assets

Ho anche rigenerato i miei post, ma senza successo.

Il compito è:

cd /var/discourse
./launcher enter app
rails c
rake uploads:migrate_to_s3
cd /var/discourse
./launcher enter app
rails c
rake uploads:migrate_from_s3

Funziona per te, @AntiMetaman?
Se sì, lo aggiungerò alla guida.

Proverò a capire come far funzionare correttamente i backup e aggiornerò anche la guida con queste informazioni. So con certezza che devo creare una seconda zona di pull.

I backup funzionano bene con Backblaze… Che problema stai riscontrando?

1 Mi Piace

Anche con questo metodo i miei backup funzionano correttamente. Devi aver impostato qualcosa in modo errato. Aggiorno subito la guida su come ho configurato i backup. @AntiMetaman

Mi dispiace, non ti seguo. Come può essere che io abbia qualcosa che funziona perfettamente se stai suggerendo che ho impostato qualcosa in modo errato?

Mi sta parlando @itsbhanusharma. I miei backup non funzionano. La mia configurazione è la stessa di quella di Bill. Non ho usato una zona di pull separata per il bucket di backup, quindi forse è per questo. Ho solo inserito il nome del bucket di backup nelle variabili d’ambiente.

Proverò più tardi il suggerimento di Bhanu per migrare le risorse S3.

Ho creato due zone di pull, una per ciascun bucket (upload e backup). Ho avviato un backup dal mio pannello di amministrazione, ma è fallito. L’unica cosa che Discourse conosce è il nome del bucket dei backup.

DISCOURSE_S3_CDN_URL: https://duelistsunite.b-cdn.net
DISCOURSE_S3_BUCKET: s3omega
DISCOURSE_S3_BACKUP_BUCKET: s3omegabackup
DISCOURSE_BACKUP_LOCATION: s3

Non sono sicuro di cosa mi stia sfuggendo. Esiste un S3_CDN_BACKUP_URL? Dato che l’URL è diverso per i backup.

@itsbhanusharma Inoltre, ho provato il tuo metodo, ma migrate_from_S3 è indefinito.

Inoltre, non ero sicuro se intendevi migrate_to_s3, quindi l’ho provato anch’esso, ma anche quello era indefinito.

Mi scuso per la confusione, intendevo rake uploads:migrate_to_s3

1 Mi Piace

Sembra che interrompa l’esecuzione di rake perché aggiunge amazonaws.com all’URL, il che è errato. Questo è il problema. Se utilizzi un servizio S3 che non è Amazon, rake non funzionerà poiché l’URL viene modificato in modo hardcoded.

1 Mi Piace

Puoi confermare o smentire se hai aggiunto le impostazioni alla sezione env di app.yml o se le hai aggiunte alla pagina Amministrazione > Impostazioni?

Anche i miei backup funzionano con S3. Quindi ho sia i vecchi che i nuovi caricamenti che operano con S3. Sto utilizzando Cloudflare per SSL e protezione DDoS, BunnyCDN per le zone di pull per i caricamenti e i backup, e BackBlaze per l’archiviazione S3. Ora sono a posto!

Nota che è meglio definire le variabili d’ambiente nel file app.yml come mostrato qui: Configure an S3 compatible object storage provider for uploads

Poi ricostruisci l’applicazione in modo che la configurazione S3 sia definita globalmente e non solo nel pannello di amministrazione. In questo modo, quando migri i vecchi file su S3, puoi farlo più facilmente con 3 comandi:

./launcher enter app
rake uploads:migrate_to_s3
rake posts:rebake

3 Mi Piace

Non sono sicuro di cosa mi stia sfuggendo. Esiste un S3_CDN_BACKUP_URL? Dato che l’URL è diverso per il backup.

Hai risolto questa domanda? Anche io non sono chiaro su dove inserire l’URL per la zona di pull che punta al bucket di backup.

Modifica: Ho ragione nel pensare che il CDN sia necessario solo per il bucket degli upload? La guida su questo argomento suggerisce di creare una seconda zona di pull CDN per il bucket di backup. Se è sbagliato, forse la guida dovrebbe essere aggiornata @Bill

A quanto pare, è necessario solo il nome del bucket di backup. Dal nome è possibile ottenere l’URL S3 di backup, poiché sarà identico a quello di caricamento, fatta eccezione per la differenza nel nome. Ecco perché non è necessario definire un URL S3 di backup separato. Questo, naturalmente, presuppone che entrambi i bucket si trovino nello stesso servizio S3.

Ma se il bucket di backup è privato, come fa la CDN ad accedervi? Sono nuovo alle CDN e potrei aver perso qualcosa, ma sospetto che Discourse non utilizzi affatto la CDN per i backup.

Sì, lo fanno. Sono andato nel mio bucket di backup e ho visto che il backup è stato caricato lì. È privato, ma Discourse può accedervi. Puoi configurare le autorizzazioni se l’URL è presente. Puoi anche impostare il bucket in modo che sia accessibile solo dal tuo sito o da qualsiasi fonte HTTPS.

Puoi verificare se il backup è passato attraverso la CDN, anziché direttamente dalla tua installazione di Discourse a BackBlaze B2?