このチュートリアルでは、NodeBB インポーター を使用して、NodeBB フォーラムを Discourse プラットフォームに移行する方法を説明します。NodeBB フォーラムがバックエンドに MongoDB を使用している場合は、こちらのチュートリアル を参照してください。ご安心ください、手順は簡単です。始めましょう。
計画
- 開発環境の準備
- 本番環境からのデータベースのエクスポート
- 本番環境のデータベースを Discourse インスタンスにインポート
- インポータースクリプトの実行
移行可能なデータ
- グループ
- カテゴリ
- ルートカテゴリ ⇒ ルートカテゴリ
- サブカテゴリおよびサブのサブカテゴリ ⇒ サブカテゴリ
- アタッチメント
- トピックおよび投稿
- ピン留めされたトピック ⇒ ピン留めされたトピック
- トピックの閲覧数
- 全てのスタイル、メンション、絵文字、アタッチメントがそのまま移行されます。
- ユーザー(以下の属性を含む)
- アバター(プロフィール画像)
- プロフィール背景
- 禁止(BAN)ステータス
- 名前
- ユーザー名
- メールアドレス
- 自己紹介
- 管理者権限
- ウェブサイト
- 所在地
- 参加日時
- グループ
ローカル開発環境の準備
以下のガイドのいずれかに従って、開発環境を設定してください。
以降、この環境を「Discourse サーバー」と呼びます。
Discourse のセットアップで問題が発生した場合は、こちらのガイド をご覧ください。
本番環境データベースダンプのエクスポート(NodeBB サーバーから)
NodeBB の推奨に従い、フォーラムをシャットダウンしてください。
$ cd /path_to_nodebb
$ ./nodebb stop
Redis もシャットダウンする必要があります。
$ sudo service redis-server stop
$ sudo service redis-server status
# redis-server is not running
データベースは単一のファイルにすべて含まれています。このファイルは Redis によって定期的に自動生成されます。通常、このファイルは /var/lib/redis/dump.rdb にあります。また、Redis CLI からパスを取得することもできます。
$ redis-cli
127.0.0.1:6379> config get dir
# "/var/lib/redis"
127.0.0.1:6379> exit
$ ls -la /var/lib/redis
# -rw-rw-r-- 1 redis redis 2664346 Aug 4 16:24 dump.rdb
Redis サーバーにパスワードが必要な場合は、
AUTH YOUR_PASSWORDを使用してください。
何らかの理由で期待されるパスにデータベースファイルが見つからない場合は、Redis CLI で
SAVEを実行して手動で生成できます。
次に、フォーラムのアタッチメントをコピーする必要があります。
$ cd /path_to_nodebb_root_folder/
$ tar -czf ./uploads.tar.gz ./public/uploads
データベースとフォーラムのアセットが揃ったら、これらを「Discourse サーバー」にコピーしてください。
データベースのインポート
Discourse のインストール手順に従った場合、「Discourse サーバー」に Redis サーバーがインストールされているはずです。
$ redis-server -v
# Redis server v=5.0.2...
次に、Redis サーバーを停止する必要があります(重要)。
Linux ベースの場合:
$ sudo service redis-server stop
$ sudo service redis-server status
# redis-server is not running
Mac OS の場合:
$ brew services stop redis
$ brew services list
# redis stopped
次に、データベースファイルをローカルの Redis データベースパスにコピーします。インポーターは Redis サーバーに接続し、NodeBB のデータベースを Discourse のデータベースに移行します。この手順では、Redis データベースに重要なデータがないことを前提としています。重要なデータがある場合は、事前にバックアップを取得してください。
$ redis-cli
127.0.0.1:6379> config get dir
# "/var/lib/redis"
ファイルが存在するか確認し、現在のユーザーと dump.rdb のパーミッションをメモしてください。
$ ls -la /var/lib/redis
NodeBB のデータベースをコピーします(既存のファイルがある場合は上書きされます)。
$ cp dump.rdb /var/lib/redis
後で Redis サーバーに接続しようとした際に Fatal error loading the DB: Permission denied エラーが発生する可能性があります。そのため、dump.rdb のパーミッションを変更してください。
# ユーザーは以前メモしたものと同一に置き換えてください。
$ sudo chown redis:redis /var/lib/redis/dump.rdb
$ sudo chmod 660 /var/lib/redis/dump.rdb
次に、uploads.tar.gz を任意のパスに解凍します。
$ tar xvzf uploads.tar.gz
インポータースクリプトの実行
データベースの準備が整ったので、インポータースクリプトを実行する準備ができました。その前に、いくつかの設定を編集する必要があります。通常、以下の 2 行を変更するだけで十分です。
NodeBB のアップロードフォルダのパスです。
ATTACHMENT_DIR = '/absolute_path/uploads'
Redis 内のデータベース名です。デフォルトは 0 です。
db: 0
クリーンな Discourse でインポーターを実行します。
$ cd ~/discourse
$ bundle exec rake db:drop db:create db:migrate
$ bundle exec ruby script/import_scripts/nodebb/nodebb.rb
インポーターは Redis サーバーに接続し、すべてのデータを Discourse の PostgreSQL データベースに移行します。
インポーターが完了したら、Discourse プラットフォームを起動します。
$ bundle exec rails server
移行されたデータを処理するために Sidekiq を起動します。
$ bundle exec sidekiq
進捗状況は http://localhost:3000/sidekiq/queues で監視できます。
このチュートリアル に従って、Discourse のバックアップを作成し、Discourse の本番サーバーにアップロードしてください。
これで、NodeBB から Discourse への完全な移行が成功しました ![]()
ご質問がございましたら、喜んでお手伝いいたします ![]()