Phorum フォーラムから Discourse への移行を検討している場合は、このチュートリアルが役立ちます。手順は straightforward で、公式の Phorum インポータースクリプト を使用します。始めましょう。
大まかな流れは以下の通りです。
- ローカル開発環境の準備
- 本番環境からのデータベースのエクスポート
- 本番環境のデータベースをローカルの Discourse インスタンスにインポート
- Phorum インポータースクリプトの実行
移行可能な項目
- カテゴリ
- 各フォーラムとフォルダ ⇒ ルートカテゴリ
- トピックと投稿
- ユーザー(以下の属性を含む)
- 禁止ステータス
- ユーザー名
- 実名 ⇒ 名前
- メールアドレス
- 管理者ステータス
- 追加日
- 最終アクティブ日時
ローカル開発環境の準備
Discourse のインストールについては以下のガイドのいずれかに従ってください。問題が発生した場合は、こちらのガイド を参照してください。
MySQL データベースサーバーをインストールします。
Ubuntu 18.04:
$ sudo apt update
$ sudo apt install mysql-server -y
MySQL のインストールが完了したら、ステータスを確認します。
$ systemctl status mysql.service
実行されていない場合は、以下を実行してください。
$ sudo systemctl start 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
Windows の場合は、公式の インストールガイド に従ってください。
この環境が私たちの Discourse サーバー となります。
本番環境からのデータベースのエクスポート
本番環境(Phorum 本番サーバー)からデータベースをエクスポートします。
$ mysqldump -u USER_NAME -p DATABASE_NAME > phorum_dump.sql
データベースダンプを Discourse サーバー にコピーします。
データベースのコピーには
scpまたはrsyncを使用してください。もちろん、gzip で圧縮してからコピーすることもできます。
本番環境のデータベースを Discourse サーバーにインポート
Discourse サーバー でデータベースを作成します。
$ mysql -u root
データベースユーザーにパスワードが設定されている場合は、
mysql -u root -pを使用し、パスワードを入力してください。
mysql> CREATE DATABASE phorum;
データベースが作成されたことを確認します。
mysql> SHOW DATABASES;
以下のような表示が確認できるはずです。
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| phorum |
| sys |
+--------------------+
5 rows in set (0.04 sec)
これは空のデータベースです。次のステップは、本番環境のデータベースをこれにインポートすることです。
$ mysql -u root phorum < phorum_dump.sql
この機会にテーブルプレフィックスを取得しておきましょう。後で必要になります。
$ mysql -u root
mysql> USE phorum;
mysql> SHOW TABLES;
以下のような表示が確認できるはずです。
+---------------------------+
| Tables_in_phorum |
+---------------------------+
| pw_banlists |
| pw_files |
| pw_forum_group_xref |
| pw_forums |
| pw_groups |
| pw_messages |
| pw_messages_edittrack |
| pw_pm_buddies |
| pw_pm_folders |
| pw_pm_messages |
| pw_pm_xref |
| pw_search |
| pw_settings |
| pw_subscribers |
| pw_user_custom_fields |
| pw_user_group_xref |
| pw_user_newflags |
| pw_user_permissions |
| pw_users |
+---------------------------+
19 rows in set (0.00 sec)
上記の出力から、プレフィックスは pw_ であることがわかります。
Phorum インポータースクリプトの実行
まず、インポーターの依存関係をインストールします。
$ cd ~/discourse
$ echo "gem 'mysql2', require: false" >> Gemfile
$ bundle install
次に、スクリプトを要件に合わせて設定します。例では以下のようになります。
PHORUM_DB = "phorum"
TABLE_PREFIX = "pw_"
BATCH_SIZE = 1000
# ...
host: "localhost",
username: "root",
password: "", # MySQL データベースにパスワードを設定している場合はこれを変更してください
database: PHORUM_DB
URL リダイレクト を作成したい場合は、以下のコメントアウトを外してください。
# categories.each do |category|
# Permalink.create(url: "list.php?#{category['id']}", category_id: category_id_from_imported_category_id(category['id'].to_i))
# end
#...
# results.each do |post|
# if post['parent_id'] == 0
# topic = topic_lookup_from_imported_post_id(post['id'].to_i)
# Permalink.create(url: "read.php?#{post['category_id']},#{post['id']}", topic_id: topic[:topic_id].to_i)
# end
# end
以下のようになります。
categories.each do |category|
Permalink.create(url: "list.php?#{category['id']}", category_id: category_id_from_imported_category_id(category['id'].to_i))
end
#...
results.each do |post|
if post['parent_id'] == 0
topic = topic_lookup_from_imported_post_id(post['id'].to_i)
Permalink.create(url: "read.php?#{post['category_id']},#{post['id']}", topic_id: topic[:topic_id].to_i)
end
end
クリーンな Discourse インスタンスでインポーターを実行します。
bundle exec rake db:drop db:create db:migrate
bundle exec ruby script/import_scripts/phorum.rb
インポーターは MySQL サーバーに接続し、Phorum データベースを Discourse データベースに移行します。
インポートが完了したら Discourse サーバーを起動します。
$ bundle exec rails server
移行されたデータを処理するために Sidekiq を起動します。
$ bundle exec sidekiq
Sidekiq の進行状況は
http://localhost:3000/sidekiq/queuesで監視できます。
この チュートリアル に従って、Discourse 本番サーバーをセットアップしてください。
Discourse データベースをバックアップし、この チュートリアル に従って Discourse 本番サーバーにアップロードしてください。
完了です ![]()