Backup Automatici su Backblaze B2
Ecco come l’ho configurato per un sito ipotetico ospitato su example.com
- Crea un account su Backblaze (al momento, non è necessario inserire dati di pagamento per i <10 GB gratuiti)
- Crea un bucket (Backblaze > Archiviazione Cloud B2)
- nome:
$sitename-discourse-$randomesteso a 30 caratteri- in questo esempio:
example-discourse-g87he56ht8vg - Discourse richiede che il nome del bucket contenga solo lettere minuscole, numeri e trattini
- Suggerisco di mantenerlo entro i 30 caratteri in modo che venga visualizzato bene nell’interfaccia web di Backblaze senza andare a capo
- in questo esempio:
- bucket privato
- abilita la crittografia (SSE-B2)
- abilita il blocco degli oggetti
- nome:
- Crea una chiave applicativa (Backblaze > Account > Chiavi App)
- keyName:
example-discourse - bucketName (Consenti accesso ai Bucket):
example-discourse-g87he56ht8vg - capabilities: read and write (lettura e scrittura)
- lascia vuoti namePrefix e validDurationSeconds
- keyName:
- Configura le impostazioni B2 di Discourse (Discourse > Admin > Settings)
backup_location:s3s3_backup_bucket:example-discourse-g87he56ht8vgs3_endpoint: questo viene mostrato nella pagina del bucket – assicurati di anteporrehttps://s3_access_key_id: (dal passaggio precedente)s3_secret_access_key: (dal passaggio precedente)- Backblaze ti mostra la chiave solo una volta (al momento della creazione)!
- tra l’altro, puoi anche impostare queste variabili d’ambiente nel tuo file yml del container. questo ti permetterebbe di ripristinare con solo quel file e nient’altro:
env:
## Backup Backblaze B2
# DISCOURSE_BACKUP_LOCATION: 's3' # decommenta per recuperare da cli
DISCOURSE_S3_ENDPOINT: 'https://....backblazeb2.com'
DISCOURSE_S3_BACKUP_BUCKET: 'example-discourse-g87he56ht8vg'
DISCOURSE_S3_ACCESS_KEY_ID: '...'
DISCOURSE_S3_SECRET_ACCESS_KEY: '...'
# DISCOURSE_DISABLE_EMAILS: 'non-staff' # decommenta per disabilitare le email durante un ripristino di prova
## puoi ripristinare senza dati oltre a questo file yml del container.
## decommenta DISCOURSE_BACKUP_LOCATION sopra, compila il container (./launcher rebuild ...),
## ed esegui questo all'interno del container (ripristinerà dal bucket B2):
## discourse enable_restore
## discourse restore <example-com-...tar.gz> # scegli il nome del file di ripristino sfogliando l'interfaccia web di B2
## ricorda di disabilitare il ripristino in seguito
- Configura la conservazione dei backup
- Discourse:
backup_frequency: 1 (backup giornalieri in questo esempio, ma potresti farli settimanali)maximum_backups: ignora questa impostazione – lascia che sia Backblaze a gestirla
s3_disable_cleanup: true (Impedisce la rimozione dei vecchi backup da S3 quando ci sono più backup del massimo consentito)
- Backblaze (vai alle impostazioni del tuo bucket):
- Object Lock (Retention Policy predefinita): 7 giorni
- Impostazioni Ciclo di Vita (personalizzate):
fileNamePrefix:default/example-com(opzionale)daysFromUploadingToHiding: 8 giorni- questo dovrebbe essere object lock + 1
daysFromHidingToDeleting: 1 giorno
per riassumere la conservazione in questo esempio:
- Discourse:
- Discourse crea backup ogni 1 giorno
- ogni file di backup è immutabile per 7 giorni dopo il caricamento su B2 (object lock). questo ti protegge da incidenti, ransomware, ecc.
- 8 giorni dopo il caricamento, l’object lock sul backup scade. poiché è di nuovo modificabile, una regola del ciclo di vita può nascondere il file di backup
- la parte successiva della regola del ciclo di vita elimina qualsiasi file 1 giorno dopo essere stato nascosto
quindi ottieni backup giornalieri. il tempo di conservazione è una settimana durante la quale i backup non possono essere eliminati a prescindere da tutto. poi i backup vengono eliminati 2 giorni dopo. quindi in realtà un backup vive per circa 9 giorni.
spero che questo aiuti qualcuno ![]()
ripensandoci, forse è meglio lasciare che sia Discourse a gestire la conservazione (maximum_backups). in questo modo, i tuoi backup non inizieranno a scadere automaticamente se Discourse è offline. non vorresti che un orologio ticchetti su di essi mentre cerchi di recuperare. se scegliessi quella strada, potresti impostare maximum_backups=8 e s3_disable_cleanup=false in questo esempio e non usare una policy del ciclo di vita in B2. useresti comunque la policy dell’object lock (7 giorni), però.
edit: in realtà, penso che tu abbia ancora bisogno di una policy del ciclo di vita B2 perché penso che i file vengano solo “nascosti” e non eliminati quando un client S2 li elimina. sto usando la policy " Keep only the last version of the file ", che è equivalente a daysFromHidingToDeleting=1, daysFromUploadingToHiding=null.
immagino che dovresti pensarci su e decidere quale approccio è giusto per te.
tra l’altro, mi rendo conto che c’è un po’ di avanti e indietro in questo post. penso che sia informativo così com’è, ma se qualcuno vuole, potrei fare un altro post leggermente più semplice con le mie raccomandazioni effettive.