私のphpBB移行ジャーニー(postgresql)

phpBB3 から Discourse への移行を進める中で、発見したことを共有します。

ソリューションには以下が含まれます。

  • PostgreSQL ソース DB
  • 絵文字
  • インポーターの調整(引用バグの修正、BBCode サポートの改善(YouTube を含む)、添付ファイルのコメント)
  • ソフト削除された投稿を通常の投稿としてインポート

私は非常にこだわりが強いので、もしあなたがこれに沿って進めれば、かなり良い結果を得られるはずです。


phpbb(インストール済みバージョン履歴: 3.2.1 - 3.2.8)から Discourse への移行を検討しています。
問題は、DB に PostgreSQL を使用していることです。提案はありますか?試してはいませんが、OP に基づいてまだサポートされていないと仮定しています。

新しいインポート スクリプトは実際に出ましたか?それは 1 年以上前だったと思います。

「いいね!」 1

バルクインポートスクリプトは機能するはずです… discourse/script/bulk_import/phpbb_postgresql.rb at 52d4de7b45eb1b7c7997da2ba8bff83a3c22a3a5 · discourse/discourse · GitHub

「いいね!」 4

ありがとうございます、@gerhard様

私の理解は正しいでしょうか?

  • script/import_scripts/phpbb3script/bulk_import は完全に別のインポーターですか?
  • バルクインポーターは(より高速ですが)洗練されておらず、例えば添付ファイルはインポートしませんか?

もしそうなら、バルクインポーターを使用することには欠点があるようです…

他に解決策はありませんか? PostgreSQLからMySQLなどへのDB移行を検討することは推奨されますか?

「いいね!」 2

はい、欠点はあります。Rubyでの作業に慣れているなら、pg gemではなくmysql2を使用するように、discourse/script/import_scripts/phpbb3/database at main · discourse/discourse · GitHub のファイルを変更することをお勧めします。

そうですね?それがどれほど簡単で、実際に機能するかどうかは全くわかりません。試してみることはできますよ…

「いいね!」 1

残念です。やってみます。何か思いついたら、また連絡します。

「いいね!」 2

これは非推奨になるインポーターですか?「新しい」インポーターの状況はどうなっていますか?どの程度の労力を費やすべきか判断しようとしています。アップストリームでの価値はありますか?

「いいね!」 2

PostgreSQLからMySQLへの移行問題は自身で扱ったことはありませんが、phpBBからDiscourseへの移行という観点から言えば、移行を達成するために「できる限りのことをする」ことをお勧めします。

私はphpBBフォーラムを2つDiscourseに移行しましたが、どのような変更にもつきものの、ごく一部のユーザーからのいつもの不満はあったものの、Discourseの利点はそれに見合うものでした! Discourseはメンテナンスや管理が容易なだけでなく、組み込みのユーザーエンゲージメント、画像処理、ユーザーカスタマイズ、そして可読性は、phpBBをはるかに凌駕しており、比較になりません。Discourseでは、より良いサポートも受けられます。

専門家ではありませんが、簡単な検索によると、PostgreSQLからMySQLへの移行は、スキーマダンプを実行し、スキーマステートメントのデータ型をMySQLで使用されているものに一致するように変更し、変更されたスキーマを使用してMySQLデータベースにテーブルを作成し、その後、テーブルごとにCSVのエクスポートとインポートを実行することで可能になるようです。

MySQLデータベースができたら、通常のphpBB移行スクリプトを使用して、すべての添付ファイルを取得できます。

労を惜しまない価値はあります!

「いいね!」 3

データベースの文字セットや照合順序に注意しないと、悲惨な結果を招く可能性があります。

数年前に着手しましたが、未完成で時代遅れです。それでも、役立つかもしれません。

「いいね!」 3

簡単だとは言っていません。労力に見合う価値があり、手動でも可能であり、自動ツールと手動の両方でそれを達成するためのリソースがたくさんあるように思われる、という意味でした。:grinning:

「いいね!」 3

Rubyが嫌いなこと、そして既存のインポーターが非推奨になり、私の目的にはまだ十分ではないバルクインポーターに置き換えられることを考えると、PostgreSQLからMySQLへの移行戦略を進めることにしました。

MySQL Workbenchの移行ウィザードで進捗がありました。成功したら簡単なガイドを作成しますが、今のところ有望に見えます。

「いいね!」 2

今のところ、この問題で詰まっています。
https://bugs.mysql.com/bug.php?id=89048

要するに、MySQL Workbench は Unicode のインポートに失敗します。明日 MariaDB で試してみて、インポート前にデフォルトの DB エンコーディングなどを設定できるか確認します。

「いいね!」 1

MySQL Workbench が機能していればよかったのですが。オプションを見たときにエラーレポートがたくさんあったので、お勧めしませんでした。

スキーマダンプと CSV のエクスポート/インポート方法については以前に一度言及しましたが、さらに簡単にするためのわずかな変更を加えて、もう一度だけ言及して終わりにします。

GUI ルートを使用したい場合:

  1. MySQL/MariaDB を実行している、現在使用している phpBB3 と同じバージョンの動作中のコピーから、すべてのテーブルの構造のみのエクスポートを入手してください。phpMyAdmin を使用すれば、誰でも 2 分で作成できます。phpMyAdmin は、MySQL/MariaDB を実行しているほとんどのウェブホストで利用可能です。(または、構造のみのエクスポートを入手できない場合は、phpBB3 のインストールスクリプトから必要な CREATE TABLE ステートメントを入手できるかもしれません。あるいは、安価なウェブホスティングアカウントを使用して、MySQL/MariaDB 環境に phpBB3 のバージョンをクリーンインストールし、作成されたテーブルのデータを削除して空の MySQL/MariaDB データベースを作成することもできます。)
  2. MySQL/MariaDB と phpMyAdmin を備えたウェブホストにアクセスし、データベースを作成し、phpMyAdmin を使用してステップ 1 で作成した構造のみのエクスポートから構造をインポートしてください。
  3. PostgreSQL データベースから各テーブルの CSV エクスポートを作成し、新しい MySQL/MariaDB データベースの対応するテーブルに phpMyAdmin を使用して CSV インポートを行ってください。

これにより、文字セットとエンコーディングの問題が回避され、PostgreSQL からスキーマダンプを手動で変換しようとした場合に必要となる、対応するデータ型やフィールドサイズをすべて把握する必要がなくなると考えられます。

構造のみの SQL ステートメントを提供できますが、私がまだ持っている唯一の DB は phpBB3 3.3.8 のものなので、v. 3.2.x を使用している場合はさらに問題が発生する可能性があります。

「いいね!」 3

はは。ええ、私ができたところまで動作させるには、明白ではないトリックがいくつか必要でした。まだ機能すると思いますが、探求する別の道を与えてくれてありがとう。

「いいね!」 1

postgresqlインポートのソリューションです。

これにより、PostgreSQLダンプから動作するMariaDBサーバーに移行でき、インポーターを接続できます。Docker Composeが必要です。

phpBB 3.2で動作します。3.3については不明です。3.3のサポートがどうしても必要な場合は、phpBB 3.3のpg_dumpallダンプを提供していただければ修正を試みることができます。

「いいね!」 3

phpbb_smilies.zip (87.2 KB)

(compare to default smilies)

参考までに、私の絵文字ソリューションを提示します。

2つのオプションがあります。

  1. ネイティブ
    • 元のphpBB絵文字を保持したくない場合は、Discourseに既に存在するネイティブ絵文字にマッピングできます。

:grin: :smile: :wink: :slightly_frowning_face: :astonished: :exploding_head: :confounded: :sunglasses: :joy: :rage:
:stuck_out_tongue: :person_facepalming: :sob: :imp: :smiling_imp: :roll_eyes: :exclamation: :question: :bulb: :arrow_forward:
:neutral_face: :smiley_cat: :nerd_face: :nerd_face:

  1. インポート
    • 元のphpBB絵文字を保持し、ショートコードとして引き続き使用できるようにしたい場合
      • インポーターを実行する前に、Discourseダッシュボードの絵文字セクション(admin/customize/emojis)に移動します。
      • 必要であれば、まずphpbbなどの絵文字グループを作成します。
      • new_files内の絵文字ファイル(一度に5つずつ)をブラウザにドラッグして、カスタム絵文字としてインポートします。

どちらのオプションの構成も含むzipファイルをimport.ymlとしてzipに含めています。

また、zip内には、決定を支援したり、独自の対応付けを作成したりするためのスプレッドシートも含まれています。

phpbb_smilies
├── phpbb_smilies.xlsx # 決定を支援するためのマスターリファレンス
├── import.yml # 両方のオプションを含む設定ファイル
├── orig_phpbb_smilies.csv # 元のphpBBデータ
├── orig_files # 元のphpBB絵文字ファイル
│   ├── icon_arrow.gif
│   └── ...
└── new_files # スプレッドシートの`new_shortcode`列に合わせてリネームされた絵文字ファイル
    ├── phpbb_arrow.gif
    └── ...
「いいね!」 1

引用の帰属を正しく機能させた方はいらっしゃいますか?

以下は、phpbb の引用を含む元の投稿の例です(ユーザー名とコンテンツは変更されています。ID などは同じです)。

[quote=someuser post_id=46649 time=1677556325 user_id=48]
foo
[/quote]

bar

Discourse でどのように表示されるかはこちらです。

Discourse に移行された元の投稿はこちらです。

[quote=", post:37, topic:1893"]
foo
[/quote]

bar

移行された postid と topicid は正しいですが、ユーザー名がありません。これにより、インタラクティブになりません。ユーザー名が空の文字列の場合、引用は展開されず、元の投稿への参照をたどるためにクリックすることもできません。

インポーターを改善せずに、より良い体験を期待できますか?つまり、私が何か間違っているだけでしょうか?

「いいね!」 1

以前に行ったphpbb3のインポートでは、これらが正常に機能していたと確信しています。

「いいね!」 1

まだ最後の問題は解決していませんが、別の質問があります。

インポートが完了してアプリコンテナを開始した後、まだ存在するphpbbサーバーに非常に負荷がかかることに気づきました。これはサイドキックの後処理フェーズ中だと思います。

phpbbは www.example.com に存在し、ディスコースは dc.example.com にあります。

実際に何が起こっているのか、このテスト移行中にどの設定が適切か、そして最終移行でどの設定が適切になるのかを理解しようとしています。そして、サイドキックの後処理のためにphpbbを実行する必要があるかどうか。後処理で何が起こるのか全くわからないので質問しています。

現在の settings.yml の設定で関連性があるかもしれないもの:

import:
  # 複数のphpBBフォーラムを単一のDiscourseフォーラムにインポートする場合に設定します。
  site_name:
  site_prefix:
    # これは、投稿内の内部リンクを書き換えるために必要です
    original: example.com    # http(s)://なし
    new: https://dc.example.com       # http://またはhttps://あり

他に確認する必要があることがあれば、お知らせください。

www サブドメインについても不明な点があります。現在、phpbbのためにnginxでwwwにリダイレクトしています。したがって、上記の例では、original: example.comoriginal: www.example.com のどちらを入れるかは関係ありますか?最終移行時の new についても同様の質問です。私のユーザーは実際には www.example.com からディスコースにアクセスしますが、ベストプラクティスがわかりません。

「いいね!」 1

引用の解析に問題があるようです。

phpBB 3.2.8(mariadbにインストール済み)をクリーンインストールしてインポートを試しました。

引用の属性が壊れています。インポートされた引用のユーザー名フィールドは空白ですが、それ以外はすべて正規のものです。

インポートされた投稿のDiscourseスクリーンショット:

Discourseでインポートされた投稿:

[quote=", post:4, topic:12"]
[quote=", post:3, topic:12"]
[quote=", post:2, topic:12"]
msg 1
[/quote]

second
[/quote]

third
[/quote]

fourth

元のphpBB投稿:

MariaDB [phpbb]> select post_text from phpbb_posts where post_id=5;
...
| <r><QUOTE author="admin" post_id="4" time="1678400691" user_id="2"><s">[quote=admin post_id=4 time=1678400691 user_id=2]</s>
<QUOTE author="admin" post_id="3" time="1678400685" user_id="2"><s">[quote=admin post_id=3 time=1678400685 user_id=2]</s>
<QUOTE author="admin" post_id="2" time="1678400675" user_id="2"><s">[quote=admin post_id=2 time=1678400675 user_id=2]</s>msg 1</e>[/quote]</e></QUOTE>

second

</e>[/quote]</e></QUOTE>

third

</e>[/quote]</e></QUOTE>

fourth</r> |

結局、インポーターを改善することになるかもしれません…

「いいね!」 3

修正済み


フォーラムの移行にはこだわりがあるので、インポーターの改善を続けています。インポーターは非推奨であり、私の修正の一部は私のフォーラムに半ば特化しているため、PRを作成するかどうかはわかりませんが、誰かの役に立つ場合に備えて、このブランチには私のすべての修正をまとめてあります。

引用の問題を修正し、一般的に追加されるbbcodeのサポートを追加し、youtubeリンクの解析をより壊れないようにし、メンション/simplementions拡張をサポートしました。複数のサイトプレフィックスのサポートを追加するなど、さらに改善したいことがあります(主なユースケースは、フォーラムに example.comwww.example.com へのリンクがある場合です)。

バニラ以外のものをいくつかサポートしていますが、拡張機能のない標準のphpBBフォーラムで実行しても問題はないはずです。いずれにしても、私のものを使用することをお勧めします。

使用する最も簡単な方法は、私のブランチをどこかにプルし、コンテナ内のインポートスクリプトディレクトリをバインドマウントで上書きすることです。

私の変更をどこかにプルします。

git clone --filter=blob:none --no-checkout https://github.com/ftc2/discourse.git discourse_dev
cd discourse_dev
git sparse-checkout set --cone
git switch phpbb_import
git sparse-checkout set script/import_scripts

次に、import.yml コンテナ構成に以下を追加します。

docker_args:
  - '-v /path/to/discourse_dev/script/import_scripts:/var/www/discourse/script/import_scripts'

次に、インポートコンテナを再構築します。再構築後、ビルドプロセスが私のファイルを上書きするため、リポジトリをプルした場所をリセットする必要があるでしょう。

cd /path/to/discourse_dev
git reset --hard HEAD
chown -R 1000:1000 .
「いいね!」 5