Déplacer des sujets d'une instance Discourse à une autre

Besoin de déplacer des éléments d’une instance de Discourse à une autre ?

Il existe un outil en ligne de commande pour exporter un sujet, un ensemble de sujets ou une catégorie entière, et un autre pour les importer à l’autre extrémité.

Exportation/Importation de Sujets

  • un ou plusieurs sujets et leurs réponses
  • les utilisateurs qui ont posté dans le sujet

Exportation/Importation de Catégories

  • la catégorie et toutes ses sous-catégories
  • ses paramètres de sécurité
  • les groupes personnalisés mentionnés dans les paramètres de sécurité
    • :warning: si l’un des groupes a activée la demande d’adhésion, cela provoquera un crash. Désactivez ceci avant l’exportation
  • tous les sujets et messages dans la catégorie et les sous-catégories
  • tous les utilisateurs qui ont posté, et les affecte aux groupes

Début : Identifier les ID

Tout d’abord, identifiez l’ID (ou les ID) de l’=Exportation= que vous souhaitez exporter. Vous le trouverez à la fin de l’URL utilisée pour y accéder.

  • https://meta.discourse.org/t/how-to-contribute-to-discourse/53797

  • https://meta.discourse.org/t/how-to-contribute-to-discourse/53797/12
    (dans ce cas, vous êtes au milieu d’un sujet - prenez le premier nombre)

  • https://meta.discourse.org/c/howto/faq/4

ID(s) de Catégorie ou de Sujet

Sujets Multiples

Vous pouvez sélectionner plus d’un sujet en ajoutant des ID séparés par un espace ; cela fonctionne dans le champ ci-dessus (je ne pense pas que cela fonctionne pour les catégories cependant) :

  • 53797 200943 124096

Exécuter le Script d’Exportation

L’outil peut être exécuté en tant qu’utilisateur root à l’intérieur du conteneur :

cd /var/discourse
./launcher enter app

Exécutez cette commande :

discourse export_=Exportation= =ID=

Le résultat devrait ressembler à ceci :

Démarrage de l’exportation de =Exportation=…

Où arrivent tous les nouveaux utilisateurs ?
Exportation enregistrée dans =Exportation=-export-2021-08-27-015437.json

Terminé

Déplacer le Fichier Exporté

Le fichier .json exporté doit être déplacé de l’intérieur du conteneur d’application où vous avez effectué l’exportation vers l’intérieur du conteneur de l’instance de réception. Cela nécessite quelques étapes.

Le copier vers l’« extérieur »

Quittez le conteneur si vous ne l’avez pas déjà fait

exit

Vous devriez maintenant avoir une invite comme celle-ci :

root@votre_serveur:/var/discourse

Utilisez docker pour copier le fichier hors du conteneur (je ne pense pas que vous puissiez le déplacer)

docker cp app:/var/www/discourse/=FileName= .

Le déplacer vers l’autre instance

Ceci dépasse le cadre de ce guide, mais ceci pourrait vous aider à y parvenir :

Le copier dans le conteneur de l’instance de réception

Connectez-vous en SSH à votre instance de réception en tant que root et accédez au répertoire Discourse :

cd /var/discourse

Utilisez docker une fois de plus pour copier le fichier dans l’autre conteneur

docker cp =FileName= app:/var/www/discourse

Importer le Contenu

Entrez dans le conteneur de l’instance de réception :

./launcher enter app

Exécutez le script d’importation

discourse import_=Exportation= =FileName=

:cake: Fait !

Vous pourriez avoir besoin de régler quelques détails, mais espérons que tout soit terminé.

Conseils Avancés

Gem Ruby Manquante

Lors de l’exécution d’une importation de catégorie complexe, mon instance manquait la gem Ruby ‘Listen’.
Ceci a été résolu en faisant ceci : (en utilisant l’utilisateur Discourse à l’intérieur du conteneur)

./launcher enter app
su discourse
bundle config --delete without
bundle config --delete with
bundle install
exit
exit

Ceci a cassé la console rails, nécessitant une reconstruction par la suite

./launcher rebuild app

Multisite

Dans un environnement multisite, utilisez la variable d’environnement RAILS_DB.

RAILS_DB=xxxmoves discourse export_=Exportation= =ID=
RAILS_DB=dancerehab discourse import_=Exportation= =FileName=

Veuillez signaler les bugs dans la catégorie bug, et demander des améliorations dans la catégorie #feature.


Sujets Connexes


Dernière révision par @SaraDev le 2022-07-13T00:00:00Z

44 « J'aime »
UI: Topic and Category Export/Import
CLI command to migrate a single category
Moving topics between sites?
Category/Topic export fails with error "database "discourse_development" does not exist"
Easiest way to export a single topic?
Saving a Conversation
Migrate user custom fields to another instance
How to export user data from a category on a hosted site
Error Importing Categories from a Discourse Instance to Another
Import CSV User Activity from one Discourse to Another
How use API to convert topic in discourse1.com to discourse2.com
Can sub-forums of the same instance split up and move to new independent servers (or discourse instances)?
Adding default sets of topics, categories and users to a new Discourse
I wonder how to add hundreds of users into a group? Is there any api?
How to download Comments and Topics
Downloading Content
Can we combine 2 separate discourse sites?
Tracking and resolving a schema drift cause
Merge two Discourse forums into one
Moving topics from a forum on one website to a forum on another website
Transfer topics between forums?
Forum Aquisition
Imported categories are not in parent category
Help migrating category from one instance to another without admin on the source instance
Selective backups skipping settings and config
Test driving admin/moderation features
Add backup to existing Discourse instance
Merging two Discourse forums
Migrating vBulletin onto existing and live Discourse instance
Migrate topics from one discourse instance to another?
A system where people have to start at lesson 1, and cannot see the other lessons?
How to divide my community into 2 parts

Je vais réessayer.\n\nY a-t-il un moyen simple de migrer les téléchargements pertinents avec les sujets ?

Pas vraiment. Une chose qui fonctionne la plupart du temps est si vous récupérez tous ces téléchargements et collez l’URL de l’original dans n’importe quel message sur le site vers lequel vous vous déplacez, alors ce qui devrait se produire, c’est que ces téléchargements seront créés avec le même SHA et que cela fonctionnera tout simplement.

Vous feriez donc la chose qui convertit le contenu du message en URL pour obtenir ces URL. (Je ne me souviens jamais comment faire cela, je dois donc le découvrir à chaque fois).

Hmmm - je ne suis toujours pas très clair à ce sujet. Dites-vous que cela fonctionnera ?

  1. Récupérer tous les fichiers téléchargés du premier site
    • Comment ?
  2. Les déposer dans un seul sujet
  3. Ils généreront le même lien relatif qu’ils avaient sur l’ancien site et magie !

Ou vouliez-vous dire ceci ?

  1. Récupérer toutes les URL absolues dans vos catégories d’intérêt de l’ancien site
  2. Les coller dans un sujet
  3. Ils seront tous téléchargés sur le nouveau site avec le même SHA et les liens existants fonctionneront comme par magie

Ou quelque chose de complètement différent ?

Je pense que l’une ou l’autre de ces solutions devrait fonctionner. Cependant, vous pouvez transférer ces images vers le nouveau site, elles devraient générer le même sha, ce qui fera fonctionner comme par magie les liens existants dans les sujets.

Peut-être pourriez-vous faire quelque chose comme ça :

cat_id=123
Topic.where(category_id: cat_id).each do| t|
  Post.where(topic_id: t.id) do |p|
      p.cooked.match(image url)....
         puts(the match)

Et je pense que si vous faites cela et collez ces liens dans un message n’importe où sur votre site, cela téléchargera toutes ces images localement et créera le même sha, puis ces liens. Vous pouvez en essayer quelques-unes à la main pour voir.

Il est tard dans la nuit. Votre expérience peut varier.

1 « J'aime »

Bonjour, je ne suis pas sûr que ce tutoriel soit ce que je veux faire, mais je pose la question ici.

Si j’installe Discourse sur un serveur, mais qu’en raison de sa croissance, j’ai besoin de migrer vers un serveur plus puissant, est-ce que ce sont les étapes ?

Que se passe-t-il, par exemple, avec l’option de sauvegarde ? Ne puis-je pas le faire, installer Discourse sur un autre serveur, puis restaurer la copie de sauvegarde de l’autre instance à partir de cette option ?

J’attends vos éclaircissements, car je veux savoir comment migrer lorsque j’en aurai besoin et ne pas perdre le travail que j’ai accompli récemment.

Non. Pour passer à un serveur plus grand, une simple sauvegarde et restauration suffisent. Vous pouvez également déplacer un site Discourse vers un autre VPS avec rsync.