Come ben sapete, NodeBB supporta due backend di database: Redis e MongoDB. Lo script di importazione di Discourse supporta entrambi. In questo tutorial impareremo come migrare NodeBB utilizzando MongoDB come backend del database. Useremo NodeBB Importer con l’adattatore mongo. Se il tuo forum NodeBB utilizza Redis come backend, segui invece questo tutorial che illustra l’adattatore redis.
Il piano
- Preparazione dell’ambiente di sviluppo.
- Esportazione del database dall’ambiente di produzione.
- Importazione del database di produzione in un’istanza di Discourse.
- Esecuzione dello script di importazione.
Cosa può essere migrato
- Gruppi
- Allegati
- Categorie
- Categoria radice => Categoria radice
- Sottocategoria e sottocategoria di secondo livello => Sottocategoria
- Argomenti e post
- argomento fissato => argomento fissato
- argomento bloccato => argomento chiuso
- visualizzazioni degli argomenti
- upvoted_by
- stili, menzioni, emoji e allegati.
- Utenti (con i seguenti attributi)
- sfondo del profilo
- avatar
- stato di sospensione
- nome utente
- nome
- amministratore
- biografia
- gruppo
- sito web
- località
- data di iscrizione
Preparazione dell’ambiente di sviluppo locale
Come menzionato nel nostro piano, dobbiamo prima preparare il nostro ambiente di sviluppo. Segui una di queste guide per installare Discourse:
Ti invitiamo a consultare questa guida se incontri problemi nella configurazione del server Discourse.
Successivamente, installa il server di database MongoDB.
Ubuntu-18-04:
$ 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
Per ulteriori dettagli, consulta la guida ufficiale.
Mac OS:
$ brew tap mongodb/brew
$ brew install mongodb-community@4.0
$ brew services start mongodb-community@4.0
$ brew services status mongodb-community@4.0
Per ulteriori dettagli, consulta la guida ufficiale.
Windows 10:
Scarica il programma di installazione e installa MongoDB come servizio Windows:
https://fastdl.mongodb.org/win32/mongodb-win32-x86_64-2008plus-ssl-4.0.12-signed.msi
Esegui cmd con privilegi di amministratore per verificare che il server mongo funzioni correttamente:
"C:\Program Files\MongoDB\Server\4.0\bin\mongo.exe"
Per ulteriori dettagli, consulta la guida ufficiale.
Questo ambiente sarà il nostro server Discourse.
Esportazione del dump del database di produzione
Arresta il tuo forum NodeBB (server di produzione).
$ cd /path_to_nodebb
$ ./nodebb stop
Arresta il tuo database:
$ sudo service mongodb stop
Esegui il backup del tuo DB:
$ mongodump --out ~/my_backup_path/
L’output del comando precedente sarà simile a questo:
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)
Tieni presente che il backup è effettivamente una directory, non solo un file.
Puoi verificare la dimensione del tuo DB eseguendo
use myDatabasee poidb.stats().dataSize;all’interno della CLImongo. Il valore restituito sarà in byte.
Esegui il backup degli asset del forum:
$ cd /path_to_nodebb_root_directory/
$ tar -czf ./uploads.tar.gz ./public/uploads
Dopo aver ottenuto il DB e gli asset del forum, copiali sul server Discourse.
Importazione del database
Ora che abbiamo il nostro database, possiamo importarlo nella nostra istanza locale di MongoDB:
$ mongorestore ~/path_of_my_backup_directory/
Per ulteriori opzioni, consulta la guida ufficiale.
Successivamente, devi estrarre uploads.tar.gz in modo che l’importatore possa importare gli asset:
$ tar xvzf uploads.tar.gz
Esecuzione dello script di importazione
Ora che il database e gli asset sono pronti, siamo pronti per eseguire lo script di importazione. Prima di ciò, dobbiamo modificare lo script di importazione di NodeBB per adattarlo alle nostre esigenze.
Questo è il percorso della cartella uploads di NodeBB:
ATTACHMENT_DIR = '/absolute_path/uploads'
Successivamente, dobbiamo indicare all’importatore di utilizzare l’adattatore mongo invece di redis:
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
# )
Esegui l’importatore con Discourse pulito e supporto per il gem mongo:
$ 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
L’importatore si connetterà all’istanza MongoDB e migrerà tutto su Discourse.
Dopo il completamento dell’importazione, avvia Discourse:
$ bundle exec rails server
Avvia Sidekiq per elaborare i dati migrati:
$ bundle exec sidekiq
Puoi monitorare l’avanzamento su http://localhost:3000/sidekiq/queues.
Esegui un backup di Discourse e caricalo sul tuo server di produzione Discourse seguendo questo tutorial.
![]()
Se hai domande sul processo, sono felice di aiutarti.
Buona migrazione ![]()

