ご存知の通り、NodeBB は Redis と MongoDB の 2 つのデータベースバックエンドをサポートしています。Discourse のインポートスクリプトも両方をサポートしています。このチュートリアルでは、データベースバックエンドとして MongoDB を使用した NodeBB の移行方法について学びます。ここでは、mongoアダプターを使用した NodeBB Importer を使用します。NodeBB フォーラムが Redis をバックエンドとして使用している場合は、redisアダプターを紹介する このチュートリアル をご覧ください。
計画
- 開発環境の準備
- 本番環境からのデータベースエクスポート
- 本番環境のデータベースを Discourse インスタンスにインポート
- インポートスクリプトの実行
移行可能な項目
- グループ
- アタッチメント
- カテゴリ
- ルートカテゴリ ⇒ ルートカテゴリ
- サブカテゴリおよびサブのサブカテゴリ ⇒ サブカテゴリ
- トピックおよび投稿
- ピン留めされたトピック ⇒ ピン留めされたトピック
- 固定されたトピック ⇒ 閉鎖されたトピック
- トピックの閲覧数
- 高評価したユーザー
- スタイル、メンション、絵文字、アタッチメント
- ユーザー(以下の属性を含む)
- プロフィール背景
- アバター
- 禁止ステータス
- ユーザー名
- 名前
- メールアドレス
- 管理者権限
- 自己紹介
- グループ
- ウェブサイト
- 所在地
- 登録日時
ローカル開発環境の準備
計画で述べたように、まず開発環境を準備する必要があります。Discourse 自体をインストールするには、以下のいずれかのガイドに従ってください。
Discourse サーバーのセットアップに問題がある場合は、このガイド を参照してください。
次に、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
詳細については、公式ガイド を参照してください。
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
詳細については、公式ガイド を参照してください。
Windows 10:
インストーラーをダウンロードし、MongoDB を Windows サービスとしてインストールします。
https://fastdl.mongodb.org/win32/mongodb-win32-x86_64-2008plus-ssl-4.0.12-signed.msi
管理者権限で cmd を実行し、mongo サーバーが正常に動作しているか確認します。
"C:\Program Files\MongoDB\Server\4.0\bin\mongo.exe"
詳細については、公式ガイド を参照してください。
この環境が私たちの Discourse サーバーとなります。
本番環境データベースダンプのエクスポート
NodeBB フォーラム(本番サーバー)をシャットダウンします。
$ cd /path_to_nodebb
$ ./nodebb stop
データベースをシャットダウンします。
$ sudo service mongodb stop
データベースをバックアップします。
$ mongodump --out ~/my_backup_path/
上記のコマンドの出力は以下のようになります。
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)
バックアップは単なるファイルではなく、実際にはディレクトリであることを注意してください。
mongo CLI 内で use myDatabase を実行し、次に db.stats().dataSize; を実行することで、データベースのサイズを確認できます。返される値はバイト単位です。
フォーラムのアセットをバックアップします。
$ cd /path_to_nodebb_root_directory/
$ tar -czf ./uploads.tar.gz ./public/uploads
データベースとアセットのバックアップが完了したら、それらを Discourse サーバーにコピーします。
データベースのインポート
データベースが準備できたので、ローカルの MongoDB インスタンスにインポートできます。
$ mongorestore ~/path_of_my_backup_directory/
その他のオプションについては、公式ガイド を参照してください。
次に、インポーターがアセットをインポートできるように uploads.tar.gz を展開する必要があります。
$ tar xvzf uploads.tar.gz
インポートスクリプトの実行
データベースとアセットが準備できたので、インポートスクリプトを実行する準備が整いました。その前に、ニーズに合わせて NodeBB インポートスクリプトを編集する必要があります。
NodeBB のアップロードフォルダーのパスは以下の通りです。
ATTACHMENT_DIR = '/absolute_path/uploads'
次に、インポーターに redis アダプターではなく mongo アダプターを使用するように指示します。
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
# )
クリーンな Discourse と mongo gem のサポート付きでインポーターを実行します。
$ 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
インポーターは MongoDB インスタンスに接続し、すべてのデータを Discourse に移行します。
インポーターが完了したら、Discourse を起動します。
$ bundle exec rails server
移行されたデータを処理するために Sidekiq を起動します。
$ bundle exec sidekiq
進捗状況は http://localhost:3000/sidekiq/queues で監視できます。
この チュートリアル に従って、Discourse のバックアップを実行し、それを Discourse の本番サーバーにアップロードします。
![]()
プロセスについてご質問がございましたら、喜んでお手伝いいたします。
円滑な移行を祈っています ![]()

