Configure automatic backups for Discourse

Backup Automatici su Backblaze B2

Ecco come l’ho configurato per un sito ipotetico ospitato su example.com

  1. Crea un account su Backblaze (al momento, non è necessario inserire dati di pagamento per i <10 GB gratuiti)
  2. Crea un bucket (Backblaze > Archiviazione Cloud B2)
    • nome: $sitename-discourse-$random esteso 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
    • bucket privato
    • abilita la crittografia (SSE-B2)
    • abilita il blocco degli oggetti
  3. 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
  4. Configura le impostazioni B2 di Discourse (Discourse > Admin > Settings)
    • backup_location: s3
    • s3_backup_bucket: example-discourse-g87he56ht8vg
    • s3_endpoint: questo viene mostrato nella pagina del bucket – assicurati di anteporre https://
    • 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
  1. 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 :sunglasses:
      • 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 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 :slight_smile:


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.

6 Mi Piace