Backup di Discourse dalla riga di comando

:bookmark: This guide covers how to back up and restore your Discourse site using command line tools, specifically designed for self-hosted environments.

:person_raising_hand: Required user level: Administrator

:information_source: You can use the below placeholders to automatically fill out the command line prompts in this guide:

Backing up

To create a backup of your Discourse site, follow these steps:

  1. Enter the container:
./launcher enter app
  1. Run the backup:
discourse backup
exit

This will print out the final filename of your backup. Download the backup and container configuration (if needed) to your local machine:

scp =USER=@=HOST=:/var/discourse/shared/standalone/backups/default/=FILENAME= .
scp =USER=@=HOST=:/var/discourse/containers/app.yml .

Restoring

To restore a Discourse backup, follow these steps:

  1. Install a Discourse site on the server you are restoring to.

If you’re testing this procedure multiple times, you can wipe the data on your test server.

Wipe Discourse data (optional)
./launcher stop app
./launcher destroy app
rm -r /var/discourse/shared/standalone/
mkdir -p /var/discourse/shared/standalone/backups/default/

  1. Upload the backup file:
scp =FILENAME= =USER=@=HOST=:/var/discourse/shared/standalone/backups/default/
  1. Enter the container and start the restore:
./launcher enter app
discourse enable_restore
discourse restore =FILENAME=

If you happen to forget what the filename was, run the “discourse restore” command by itself to get a list of available backup files.

:information_source: For a two-container setup, use ./launcher enter web_only and replace standalone with web-only in the path to backups.

For additional information about restoring Discourse backups, see Restore a backup from the command line.

Last edited by @SaraDev 2024-08-23T20:50:17Z

Check documentPerform check on document:
40 Mi Piace

dove dovrei eseguire questo comando? sul terminale del mio server cloud o sulla mia macchina locale?
anche se entrambi mi danno un errore di permesso negato

Sulla tua macchina locale.

Stai usando una chiave SSH per connetterti? L’errore è correlato.

Il comando dovrebbe quindi essere:

scp -i /path_to_your_key/your_key.pem root@147.43.15.199:/var/discourse/shared/standalone/backups/default/discourse-2024-12-25-033740-v20241211222608.tar.gz .

Ho uno scenario in cui voglio migrare l’installazione di Discourse su un server completamente nuovo.
Il mio piano era:

  1. creare una nuova installazione vuota di Discourse
  2. eseguire il backup del vecchio Discourse, scp il backup sul nuovo server e ripristinare
  3. Copiare tutto da S3 (immagini, ecc.) al nuovo S3 su un account diverso

Il processo di ripristino procede bene finché non inizia a cercare S3 e poi fallisce per mancanza di accesso. Penso che stia cercando di accedere allo stesso nome del bucket S3 sul vecchio Discourse, ma quello non esiste sul nuovo e non posso crearlo.

C’è una soluzione consigliata?

Ho pensato di provare a cambiare il nome del bucket S3 sul vecchio Discourse (prima di eseguire il backup) e poi, quando ripristino, si aspetterebbe di avere il nuovo bucket S3. Ma ho paura di cosa succederĂ  al vecchio Discourse se lo cambio semplicemente in un bucket inesistente.

C’è un’impostazione nascosta che scaricherà i file s3 e li inserirà nel backup.

Devi configurare s3 nel file yml come in Configurare un provider di archiviazione oggetti compatibile con S3 per i caricamenti

Quindi, quando ripristinerai il backup, inserirĂ  i caricamenti nel nuovo bucket.

1 Mi Piace

Sei mai riuscito a risolvere questo problema?

Devi configurare s3 nelle variabili d’ambiente come descritto in Configurare un provider di archiviazione di oggetti compatibile con S3 per i caricamenti

Ciò è particolarmente vero se le impostazioni s3 sono diverse sul nuovo server. Inserire i valori s3 nel database può causare molti problemi.

Ma c’è un interruttore per il comando di ripristino che lo fa mettere in pausa tra le varie parti. Può aiutare.

Posso verificare che il file che ottieni qui sia lo stesso che ottieni facendo un backup dal sito del forum?

Io ricreo sempre tutto da riga di comando, ma prima faccio il backup tramite il sito. Questa volta ho dimenticato di fare il backup! Penso che usare la riga di comando per entrambe le operazioni potrebbe aiutarmi :slight_smile: Incrociamo le dita.

Lo script di backup ha indicato:

Completato!
[SUCCESS]
Backup eseguito.
Il file di output si trova in: /var/www/discourse/public/backups/default/FILENAME.tar.gz

Inizialmente ho provato a scaricare quel percorso, che era errato. Ho trovato il file altrove e solo allora ho notato che i comandi in questo argomento sono corretti…

Ciao! Voglio solo segnalare che per eseguire un backup senza upload, utilizza il seguente comando:

discourse backup --sql-only

1 Mi Piace

Ottimo punto – dovremmo aggiungerlo (insieme ad alcuni altri dettagli) al primo post.

2 Mi Piace

Ciao @supermathie ! Piacere di “rivederti”. Non so se ti ricordi di me? Ci siamo intervistati un po’ di tempo fa.

Inoltre, sarebbe bello se il parametro --help funzionasse dopo aver eseguito discourse backup. Invece, il backup alla fine viene chiamato “–helpXXX”. :lolsob:

A presto!

Con l’aiuto di un po’ di IA, ecco un elenco completo dei sottocomandi per il comando discourse.

La CLI discourse (implementata tramite script/discourse utilizzando il gem Thor) fornisce 13 sottocomandi principali, categorizzati in Backup e Ripristino, Gestione del Sito e ModalitĂ , UtilitĂ  Database e Migrazione Dati (Importazione/Esportazione).


Riferimento Rapido dei Comandi

Categoria Sottocomando Funzione Primaria
Backup e Ripristino backup Genera un archivio di backup completo o solo del database.
restore Ripristina un file di backup .tar.gz nell’istanza.
enable_restore Concede il permesso di eseguire comandi di ripristino.
disable_restore Revoca il permesso di eseguire ripristini.
rollback Annulla lo stato del database dopo un ripristino fallito.
ModalitĂ  Sito enable_readonly Attiva la modalitĂ  di sola lettura temporanea su tutto il sito.
disable_readonly Rimuove la modalitĂ  di sola lettura per ripristinare le scritture normali sul sito.
request_refresh Attiva una richiesta di aggiornamento del browser a tutti i client connessi attivi.
Operazioni Database remap Esegue una ricerca e sostituzione globale di testo nelle tabelle del database.
Migrazione Dati export_category Esporta una singola categoria, i suoi argomenti e gli utenti associati.
import_category Importa un archivio di categoria nel forum corrente.
export_topics Esporta argomenti specifici per ID e i relativi account di autore/rispondente.
import_topics Importa un archivio di argomenti nel forum corrente.

Documentazione Dettagliata dei Sottocomandi

1. Comandi di Backup e Ripristino

discourse backup [NOME_FILE]

  • Descrizione: Crea un backup completo del database del forum e delle risorse (assets).

  • Flag:

  • --sql-only: (Booleano, Predefinito: false) Esporta solo il database PostgreSQL, saltando i file caricati localmente.

  • --s3-uploads: (Booleano, Predefinito: false) Forza l’inclusione delle risorse archiviate su S3 nell’archivio di backup (ignorato quando è impostato --sql-only).

  • Esempio:

discourse backup
discourse backup --sql-only

discourse restore [NOME_FILE]

  • Descrizione: Ripristina un backup del forum da un archivio locale .tar.gz situato in /var/www/discourse/public/backups/default.
  • Prerequisito: Richiede l’esecuzione preliminare di discourse enable_restore.
  • Esempio:
discourse restore discourse-2026-07-22-120000-v2026xxxx.tar.gz

discourse enable_restore e discourse disable_restore

  • Descrizione: Attiva o disattiva il flag dell’applicazione che consente o limita le operazioni di ripristino da console/web.
  • Sequenza di Utilizzo:
discourse enable_restore
discourse restore <nome_file>
discourse disable_restore

discourse rollback

  • Descrizione: Annulla lo schema e lo stato del database al punto precedente all’esecuzione di un ripristino fallito.

2. Stato del Sito e Controlli Client

discourse enable_readonly e discourse disable_readonly

  • Descrizione: Imposta o cancella la chiave READONLY_MODE_KEY in Redis.
  • Dettagli:
  • Blocca le scritture sul database mantenendo il sito leggibile per gli utenti.
  • Utilizza un ciclo a breve tempo di vita (TTL) che viene aggiornato mentre è attivo, impedendo che il sito rimanga bloccato permanentemente in caso di crash della sessione terminale.

discourse request_refresh

  • Descrizione: Invia un messaggio di sistema tramite MessageBus istruendo tutte le sessioni web online a ricaricare la pagina web. Utile dopo aver distribuito aggiornamenti delle risorse o cambiamenti globali del tema.

3. Rimappatura Database

discourse remap [OPZIONI] DA A

  • Descrizione: Esegue una ricerca e sostituzione diretta di stringhe nelle colonne di testo del database. Cruciale quando si aggiornano nomi di dominio, percorsi CDN o prefissi di caricamento immagini.

  • Flag:

  • --global: (Booleano) Scansiona e rimappa tutte le tabelle invece delle sole tabelle di contenuto standard.

  • --regex: (Booleano) Valuta il parametro DA come espressione regolare invece di una stringa letterale.

  • Esempio:

discourse remap "vecchio-dominio.com" "nuovo-dominio.com"
discourse remap --global "/uploads/default/" "/cdn-uploads/"

4. Importazione ed Esportazione Selettiva dei Dati

discourse export_category [ID_CATEGORIA]

  • Descrizione: Serializza una singola categoria, inclusi tutti gli argomenti annidati, i post e i profili degli utenti partecipanti, in un file archivio JSON.

discourse import_category [PERCORSO_FILE]

  • Descrizione: Legge un archivio creato da export_category e fonde i dati della categoria nell’istanza di destinazione.

discourse export_topics [ID_ARGOMENTI...]

  • Descrizione: Prende uno o piĂą ID argomento separati da spazi ed esporta gli argomenti, i post e i relativi account utente.
  • Esempio:
discourse export_topics 102 105 210

discourse import_topics [PERCORSO_FILE]

  • Descrizione: Importa un archivio JSON creato da export_topics nell’istanza Discourse di destinazione.
1 Mi Piace