PunBB フォーラムを Discourse へ移行する

このチュートリアルでは、公式の インポートスクリプト を使用して、PunBB フォーラムを :discourse: プラットフォームに移行する方法を学びます。では始めましょう :slight_smile:

移行可能な項目

  • トピックと返信 ⇒ トピックと投稿

  • カテゴリとフォーラム

    • ルートカテゴリ ⇒ ルートカテゴリ
    • 子カテゴリ ⇒ サブカテゴリ
    • ルートフォーラム ⇒ サブカテゴリ
    • 子フォーラム ⇒ サブカテゴリ
  • ユーザー

    • ユーザー名
    • 名前
    • メールアドレス
    • ウェブサイト
    • 権限ステータス
    • 所在地
    • 登録日
    • 管理者ステータス
    • 禁止ステータス

私たちの計画は非常にシンプルです。必要なことは以下の通りです:

  • ローカルの開発環境(DEV ENV)のセットアップ。
  • 本番データベースのエクスポート。
  • 本番データベースを Discourse にインポート。
  • PunBB インポートスクリプトの実行。

では始めましょう :slightly_smiling_face:

ローカルの開発環境(DEV ENV)のセットアップ

まず、以下のガイドのいずれかに従って Discourse プラットフォームをインストールする必要があります。問題が発生した場合は、こちらのガイド を参照してください。

MySQL データベースサーバーをインストールします。

MacOS:


$ brew install mysql@5.7
$ echo 'export PATH="/usr/local/opt/mysql@5.7/bin:$PATH"' >> ~/.bash_profile
$ source ~/.bash_profile

サービスステータスを以下のように確認します:

$ brew services list

以下のような表示が確認できるはずです:

mysql@5.7 started

確認できない場合は、以下のコマンドを実行して再度ステータスを確認してください:

$ brew services start mysql@5.7

Ubuntu 18.04:

以下のコマンドを実行して MySQL サーバーをインストールします:

$ sudo apt update
$ sudo apt install mysql-server -y

MySQL のインストールが完了したら、ステータスを確認します:

$ systemctl status mysql.service

実行されていない場合は、以下のコマンドを実行してください:

$ sudo systemctl start mysql

Windows の場合は、インストールガイド に従ってください。

これで、開発環境(DEV ENV)の準備が整いました。これを「Discourse サーバー」と呼びます。

本番データベースのエクスポート

PunBB 本番サーバーから本番データベースをエクスポート(バックアップ)します:

$ mysqldump -u USER_NAME -p DATABASE_NAME > punbb.sql
  • このデータベースダンプを「Discourse サーバー」にコピーします。

:bulb: データベースのコピーには scp または rsync を使用できます。

本番データベースを Discourse にインポート

「Discourse サーバー」上で、新しい空のデータベースを作成します。そのためには MySQL CLI を使用する必要があります:

$ mysql -u root

DB ユーザーにパスワードが設定されている場合は、以下のコマンドを実行してパスワードを入力してください:

mysql -u root -p
mysql> CREATE DATABASE punbb;

データベースが正常に作成されたことを確認するために以下を実行します:

mysql> SHOW DATABASES;

以下のような表示が確認できるはずです:

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| punbb              |
+--------------------+

次のステップは、本番データベースをこの新しい空のデータベースにインポートすることです。

$ mysql -u root punbb < punbb.sql

PunBB インポートスクリプトの実行

まず、インポートスクリプトの依存関係をインストールします。「Discourse サーバー」から以下のコマンドを実行します:

$ cd ~/discourse
$ echo "gem 'mysql2', require: false" >> Gemfile
$ bundle install

次に、スクリプトが正しく実行されるように設定します。任意のエディターで script/import_scripts/punbb.rb を開き、変更を加えます。基本的に必要なのは、MySQL データベース情報の指定です:

PUNBB_DB = "DATABASE_NAME"
.
.
.
@client = Mysql2::Client.new(
  host: "localhost",
  username: "MYSQL_USERNAME",
  password: "MYSQL_PASSWORD",
  database: PUNBB_DB
)

クリーンな Discourse インスタンスでインポートスクリプトを実行します:

$ bundle exec rails db:drop
$ bundle exec rails db:create
$ bundle exec rails db:migrate
$ bundle exec ruby script/import_scripts/punbb.rb

インポートスクリプトは MySQL DB に接続し、PunBB DB のフォーラムデータを Discourse DB に移行します。

インポートが完了したら、以下のコマンドを実行して Discourse サーバーを起動します:

$ bundle exec rails server

次に、移行されたデータを処理するためにバックグラウンドジョブプロセッサを起動します:

$ bundle exec sidekiq

:bulb: sidekiq の進捗状況は以下の URL で監視できます:http://localhost:3000/sidekiq/queues

次に、この チュートリアル に従って、Discourse 本番サーバーの準備を行います。

ローカルの「Discourse サーバー」プラットフォームをバックアップし、この チュートリアル に従って Discourse 本番サーバーにアップロードします。

プロセスについてご質問があれば、喜んでお手伝いいたします。

移行を成功させましょう :grinning:

「いいね!」 7