Sauvegarde de Discourse depuis la ligne de commande

: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 « J'aime »

où dois-je exécuter cette commande ? sur le terminal de mon serveur cloud ou sur ma machine locale ?
bien que l’un ou l’autre me donne une erreur de permission refusée

Sur votre machine locale.

Utilisez-vous une clé SSH pour vous connecter ? L’erreur y est liée.

La commande devrait alors être :

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

J’ai un scénario où je veux migrer l’installation de Discourse vers un tout nouveau serveur.
Mon plan était :

  1. créer une nouvelle installation vierge de Discourse
  2. sauvegarder l’ancien Discourse, scp la sauvegarde vers le nouveau serveur et restaurer
  3. Copier tout le S3 (images, etc.) vers le nouveau S3 sur un compte différent

Le processus de restauration se déroule bien jusqu’à ce qu’il commence à chercher le S3 et échoue ensuite par manque d’accès. Je pense qu’il essaie d’accéder au même nom de bucket S3 que l’ancien Discourse, mais celui-ci n’existe pas sur le nouveau et je ne peux pas le créer.

Existe-t-il une solution recommandée ?

J’ai pensé que je pourrais essayer de changer le nom du bucket S3 sur l’ancien Discourse (avant d’effectuer la sauvegarde), puis lors de la restauration, il s’attendrait à avoir le nouveau bucket S3. Mais j’ai peur de ce qui arrivera à l’ancien Discourse si je le bascule simplement vers un bucket inexistant.

Il existe un paramètre caché qui téléchargera les fichiers s3 et les placera dans la sauvegarde.

Vous devez configurer s3 dans le fichier yml comme indiqué dans Configurer un fournisseur de stockage d’objets compatible S3 pour les téléchargements

Ensuite, lorsque vous restaurerez la sauvegarde, elle enverra les téléchargements dans le nouveau bucket.

1 « J'aime »

Avez-vous finalement trouvé une solution ?

Vous devez configurer s3 dans les variables d’environnement comme décrit dans Configurer un fournisseur de stockage d’objets compatible S3 pour les téléchargements

C’est particulièrement vrai si les paramètres s3 sont différents sur le nouveau serveur. Placer les valeurs s3 dans la base de données peut causer beaucoup de problèmes.

Mais il existe un commutateur pour la commande de restauration qui la fait s’arrêter entre les différentes parties. Cela peut aider.

Puis-je vérifier une dernière fois que le fichier que vous obtenez ici est le même que celui obtenu lors de la sauvegarde depuis le site du forum ?

Je reconstruis toujours en ligne de commande, mais je commence par faire une sauvegarde via le site web. Cette fois, j’ai oublié de faire la sauvegarde ! Je pense que l’utilisation de la ligne de commande pour les deux opérations pourrait m’aider :slight_smile: Bonne chance à moi !

Le script de sauvegarde a indiqué :

Terminé !
[SUCCÈS]
Sauvegarde effectuée.
Le fichier de sortie se trouve dans : /var/www/discourse/public/backups/default/FILENAME.tar.gz

Pour commencer, j’ai essayé de télécharger cela, ce qui contenait un chemin incorrect. J’ai trouvé le fichier ailleurs, et ce n’est qu’à ce moment-là que j’ai remarqué que les commandes de ce sujet sont correctes…

Salut ! Je tiens juste à préciser que pour effectuer une sauvegarde sans les téléchargements, utilisez la commande suivante :

discourse backup --sql-only

1 « J'aime »

Bonne remarque — nous devrions ajouter cela (ainsi que quelques autres détails) au premier message.

2 « J'aime »

Salut @supermathie ! Content de te « voir ». Je ne sais pas si tu te souviens de moi ? On s’est entrevus il y a quelque temps.

D’ailleurs, ce serait cool si le paramètre --help fonctionnait après avoir exécuté discourse backup. Au lieu de ça, la sauvegarde finit par s’appeler « --helpXXX ». :lolsob:

Bises !

Avec l’aide de l’IA, voici une liste complète des sous-commandes pour la commande discourse.

L’interface en ligne de commande discourse (implémentée via script/discourse en utilisant le gem Thor) fournit 13 sous-commandes principales, classées dans les catégories Sauvegardes & Restaurations, Gestion & Modes du Site, Utilitaires de Base de Données et Migration de Données (Importation/Exportation).


Référence rapide des commandes

Catégorie Sous-commande Fonction principale
Sauvegarde & Restauration backup Génère une archive de sauvegarde complète ou uniquement de la base de données.
restore Restaure un fichier de sauvegarde .tar.gz dans l’instance.
enable_restore Accorde la permission d’exécuter les commandes de restauration.
disable_restore Révoque la permission d’effectuer des restaurations.
rollback Annule l’état de la base de données après une restauration échouée.
Modes du Site enable_readonly Active temporairement le mode lecture seule sur l’ensemble du site.
disable_readonly Désactive le mode lecture seule pour rétablir les écritures normales sur le site.
request_refresh Déclenche une invite de rafraîchissement du navigateur pour tous les clients connectés actifs.
Opérations Base de Données remap Effectue une recherche et remplacement de texte global dans les tables de la base de données.
Migration de Données export_category Exporte une seule catégorie, ses sujets et les utilisateurs associés.
import_category Importe une archive de catégorie dans le forum actuel.
export_topics Exporte des sujets spécifiques par ID ainsi que les comptes de leurs auteurs/répondants.
import_topics Importe une archive de sujets dans le forum actuel.

Documentation détaillée des sous-commandes

1. Commandes de Sauvegarde & Restauration

discourse backup [FILENAME]

  • Description : Crée une sauvegarde complète de la base de données du forum et des actifs (fichiers).

  • Options :

  • --sql-only : (Booléen, Par défaut : false) Extrait uniquement la base de données PostgreSQL, en ignorant les fichiers téléversés localement.

  • --s3-uploads : (Booléen, Par défaut : false) Force l’inclusion des actifs stockés sur S3 dans l’archive de sauvegarde (ignoré si --sql-only est défini).

  • Exemple :

discourse backup
discourse backup --sql-only

discourse restore [FILENAME]

  • Description : Restaure une sauvegarde de forum à partir d’une archive locale .tar.gz située dans /var/www/discourse/public/backups/default.
  • Prérequis : Nécessite d’exécuter discourse enable_restore au préalable.
  • Exemple :
discourse restore discourse-2026-07-22-120000-v2026xxxx.tar.gz

discourse enable_restore & discourse disable_restore

  • Description : Active ou désactive le drapeau de l’application qui permet ou restreint les tâches de restauration via la console ou le web.
  • Séquence d’utilisation :
discourse enable_restore
discourse restore <filename>
discourse disable_restore

discourse rollback

  • Description : Restaure le schéma et l’état de la base de données à l’état antérieur à une tentative de restauration échouée.

2. État du Site & Contrôles Clients

discourse enable_readonly & discourse disable_readonly

  • Description : Définit ou supprime la clé READONLY_MODE_KEY dans Redis.
  • Détails :
  • Gèle les écritures dans la base de données tout en gardant le site lisible pour les utilisateurs.
  • Utilise une boucle à courte durée de vie (TTL) rafraîchie tant que le mode est actif, empêchant le site de rester verrouillé de manière permanente en cas de crash de la session terminal.

discourse request_refresh

  • Description : Envoie un message système via MessageBus indiquant à toutes les sessions web en ligne de recharger la page web. Utile après le déploiement de mises à jour d’actifs ou de changements globaux de thème.

3. Remappage de la Base de Données

discourse remap [OPTIONS] FROM TO

  • Description : Effectue une recherche et remplacement direct de chaînes dans les colonnes textuelles de la base de données. Crucial lors de la mise à jour de noms de domaine, de chemins CDN ou de préfixes de téléversement d’images.

  • Options :

  • --global : (Booléen) Analyse et remappe toutes les tables plutôt que les tables de contenu standard.

  • --regex : (Booléen) Évalue le paramètre FROM comme une expression régulière plutôt que comme une chaîne littérale.

  • Exemple :

discourse remap "old-domain.com" "new-domain.com"
discourse remap --global "/uploads/default/" "/cdn-uploads/"

4. Importation & Exportation Sélective de Données

discourse export_category [CATEGORY_ID]

  • Description : Sérialise une seule catégorie, incluant tous les sujets imbriqués, les messages et les profils des utilisateurs participants, dans un fichier archive JSON.

discourse import_category [FILE_PATH]

  • Description : Lit une archive créée par export_category et fusionne les données de la catégorie dans l’instance cible.

discourse export_topics [TOPIC_IDS...]

  • Description : Prend un ou plusieurs IDs de sujets séparés par des espaces et exporte les sujets, les messages et les comptes d’utilisateurs pertinents.
  • Exemple :
discourse export_topics 102 105 210

discourse import_topics [FILE_PATH]

  • Description : Importe une archive JSON créée par export_topics dans l’instance Discourse de destination.
1 « J'aime »