# Ein Migration eines NodeBB-Forums mit MongoDB zu Discourse

**URL:** <https://meta.discourse.org/t/migrate-a-nodebb-forum-with-mongodb-to-discourse/126553>\
**Category:** Sysadmins\
**Tags:** how-to\
**Created:** [22. August 2019 um 17:33 UTC](https://meta.discourse.org/t/migrate-a-nodebb-forum-with-mongodb-to-discourse/126553 "2019-08-22T17:33:06Z")\
**Posts on this page:** 1\
**Showing post:** 1

<div class="post-metadata">

**Author:** ![enigmaty](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/enigmaty/32/65626_2.png) [@enigmaty](https://meta.discourse.org/u/enigmaty)\
**Post date:** [22. August 2019 um 17:33 UTC](https://meta.discourse.org/t/migrate-a-nodebb-forum-with-mongodb-to-discourse/126553/1 "2019-08-22T17:33:06Z")

</div>

Wie Sie richtig wissen, unterstützt NodeBB zwei Datenbank-Backends: Redis und MongoDB. Das Discourse-Importskript unterstützt beide. In diesem Tutorial lernen wir, wie wir NodeBB mit MongoDB als Datenbank-Backend migrieren. Wir verwenden den [NodeBB-Importer](https://github.com/discourse/discourse/blob/master/script/import_scripts/nodebb/nodebb.rb) mit dem `mongo`-Adapter. Wenn Ihr NodeBB-Forum Redis als Backend verwendet, folgen Sie bitte [diesem Tutorial](https://meta.discourse.org/t/importing-nodebb-redis-to-discourse/124897), das den `redis`-Adapter demonstriert.

### Der Plan

- Vorbereitung der Entwicklungsumgebung.
- Export der Datenbank aus der Produktionsumgebung.
- Import der Produktionsdatenbank in eine Discourse-Instanz.
- Ausführung des Importskripts.

### Was migriert werden kann

- Gruppen
- Anhänge
- Kategorien
  - Root-Kategorie =\> Root-Kategorie
  - Unterkategorie & Unter-Unterkategorie =\> Unterkategorie

- Themen & Beiträge
  - angepinntes Thema =\> angepinntes Thema
  - gesperrtes Thema =\> geschlossenes Thema
  - Themenaufrufe
  - upvoted\_by
  - Stile, Erwähnungen, Emojis und Anhänge.

- Benutzer (mit folgenden Attributen)
  - Profilhintergrund
  - Avatare
  - Sperrstatus
  - Benutzername
  - Name
  - E-Mail
  - Administrator
  - Biografie
  - Gruppe
  - Website
  - Standort
  - Beitrittsdatum

### Vorbereitung der lokalen Entwicklungsumgebung

Wie in unserem Plan erwähnt, müssen wir zunächst unsere Entwicklungsumgebung vorbereiten. Folgen Sie einer dieser Anleitungen, um Discourse selbst zu installieren:

- [Ubuntu](https://meta.discourse.org/t/beginners-guide-to-install-discourse-on-ubuntu-for-development/14727)
- [Mac OS](https://meta.discourse.org/t/beginners-guide-to-install-discourse-on-mac-os-x-for-development/15772)
- [Windows 10](https://meta.discourse.org/t/beginners-guide-to-install-discourse-on-windows-10-for-development/75149)

> 💡 Bitte konsultieren Sie [diese Anleitung](https://github.com/discourse/discourse/blob/master/docs/TROUBLESHOOTING.md), falls Sie Probleme beim Einrichten des _Discourse-Servers_ haben.

Installieren Sie anschließend den MongoDB-Datenbankserver.

Ubuntu-18-04:

```plaintext
$ wget -qO - https://www.mongodb.org/static/pgp/server-4.0.asc | sudo apt-key add -
$ echo "deb [arch=amd64] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list
$ sudo apt-get update
$ sudo apt-get install -y mongodb-org
$ sudo service mongod status

```

Für weitere Details verweisen wir auf den [offiziellen Leitfaden](https://docs.mongodb.com/v4.0/tutorial/install-mongodb-on-ubuntu/).

Mac OS:

```plaintext
$ brew tap mongodb/brew
$ brew install mongodb-community@4.0
$ brew services start mongodb-community@4.0
$ brew services status mongodb-community@4.0

```

Für weitere Details verweisen wir auf den [offiziellen Leitfaden](https://docs.mongodb.com/manual/tutorial/install-mongodb-on-os-x/).

Windows 10:

Laden Sie das Installationsprogramm herunter und installieren Sie MongoDB als Windows-Dienst:

```plaintext
https://fastdl.mongodb.org/win32/mongodb-win32-x86_64-2008plus-ssl-4.0.12-signed.msi

```

Führen Sie die `cmd` mit Administratorrechten aus, um zu überprüfen, ob der MongoDB-Server ordnungsgemäß funktioniert:

```plaintext
"C:\Program Files\MongoDB\Server\4.0\bin\mongo.exe"

```

Für weitere Details verweisen wir auf den [offiziellen Leitfaden](https://docs.mongodb.com/v4.0/tutorial/install-mongodb-on-windows/).

Diese Umgebung wird unser _Discourse-Server_ sein.

### Exportieren des Produktionsdatenbank-Dumps:

Fahren Sie Ihr NodeBB-Forum (Produktionsserver) herunter.

```plaintext
$ cd /path_to_nodebb
$ ./nodebb stop

```

Fahren Sie Ihre Datenbank herunter:

```plaintext
$ sudo service mongodb stop

```

Sichern Sie Ihre Datenbank:

```plaintext
$ mongodump --out ~/my_backup_path/

```

Die Ausgabe des vorherigen Befehls sieht ungefähr so aus:

```plaintext
2019-08-16T15:17:09.845+0300 done dumping admin.system.users (1 document)
2019-08-16T15:17:09.846+0300 done dumping admin.system.version (2 documents)
2019-08-16T15:17:09.849+0300 done dumping nodebb.sessions (10 documents)
2019-08-16T15:17:09.850+0300 done dumping nodebb.socket.io (215 documents)
2019-08-16T15:17:09.854+0300 done dumping nodebb.objects (1488 documents)

```

Beachten Sie, dass das Backup tatsächlich ein Verzeichnis und nicht nur eine Datei ist.

> 💡 Sie können die Größe Ihrer Datenbank überprüfen, indem Sie `use myDatabase` und dann `db.stats().dataSize;` innerhalb der `mongo`-CLI ausführen. Der zurückgegebene Wert ist in Bytes.

Sichern Sie Ihre Forum-Assets:

```plaintext
$ cd /path_to_nodebb_root_directory/
$ tar -czf ./uploads.tar.gz ./public/uploads

```

Nachdem Sie Ihre Datenbank und Forum-Assets gesichert haben, sollten Sie diese auf den _Discourse-Server_ kopieren.

### Importieren der Datenbank

Da wir nun unsere Datenbank haben, können wir sie in unsere lokale MongoDB-Instanz importieren:

```plaintext
$ mongorestore ~/path_of_my_backup_directory/

```

Für weitere Optionen verweisen wir auf den offiziellen Leitfaden.

Als Nächstes müssen Sie die `uploads.tar.gz` entpacken, damit der Importeur die Assets importieren kann:

```plaintext
$ tar xvzf uploads.tar.gz

```

### Ausführen des Importskripts

Da unsere Datenbank und Assets jetzt vorhanden sind, sind wir bereit, unser Importskript auszuführen. Zuvor müssen wir das NodeBB-Importskript bearbeiten, um es an unsere Bedürfnisse anzupassen.

Dies ist der Pfad zu Ihrem NodeBB-Upload-Ordner:

```ruby
ATTACHMENT_DIR = '/absolute_path/uploads'

```

Als Nächstes müssen wir dem Importeur mitteilen, dass er den `mongo`-Adapter anstelle des `redis`-Adapters verwenden soll:

```ruby
adapter = NodeBB::Mongo
@client = adapter.new('mongodb://127.0.0.1:27017/nodebb')

# adapter = NodeBB::Redis
# @client = adapter.new(
# host: "localhost",
# port: "6379",
# db: 14
# )

```

Führen Sie den Importeur mit einem sauberen Discourse und Unterstützung für das `mongo`-Gem aus:

```plaintext
$ cd ~/discourse
$ echo "gem 'mongo'" >> Gemfile
$ bundle install
$ bundle exec rake db:drop db:create db:migrate
$ bundle exec ruby script/import_scripts/nodebb/nodebb.rb

```

Der Importeur verbindet sich mit der MongoDB-Instanz und migriert alles nach Discourse.

Nachdem der Importeur abgeschlossen ist, starten Sie Discourse:

```plaintext
$ bundle exec rails server

```

Starten Sie Sidekiq, um die migrierten Daten zu verarbeiten:

```plaintext
$ bundle exec sidekiq

```

Sie können den Fortschritt unter `http://localhost:3000/sidekiq/queues` überwachen.

Führen Sie ein Discourse-Backup durch und laden Sie es auf Ihren Discourse-Produktionsserver hoch, indem Sie diesem [Tutorial](https://meta.discourse.org/t/move-your-discourse-instance-to-a-different-server/15721) folgen.

🎉

Wenn Sie Fragen zum Prozess haben, helfe ich gerne weiter.

Viel Erfolg bei der Migration 😀

---

_[View the full topic](https://meta.discourse.org/t/migrate-a-nodebb-forum-with-mongodb-to-discourse/126553)._
