大規模Drupal 7フォーラムの移行前評価

皆さん、こんにちは。私はインターネット上で最大級と思われるDrupalベースのフォーラムを所有・管理しており、投稿数は200万件に近づいています。Drupal 7は終焉を迎えつつあり、Drupal 8/9はすぐに使えるコンテンツ管理システムというよりは、Webプログラマー向けのフレームワークになりつつあります。新しいDrupalバージョンでは、私のフォーラムが基本的な機能を継続するために必要なサードパーティモジュールが提供されていません。また、PHPやDrupalの他の多くの奇妙な点のおかげで、アップグレードは完全に異なるプラットフォームへの移行と同じくらい地獄のようなものになるでしょう。そのため、私は覚悟を決めて他のものに移行しなければなりません。私のフォーラムコミュニティのスタイルにはユニークな側面があるため、Discourseに移行する必要があることはほぼ確実です。私はモデレーターが一人だけで、それが私のフルタイムの仕事ではありません。そのため、長年にわたりDrupalの柔軟なRulesとFlagフレームワークを使用して、スパムや不快な投稿に対するコミュニティモデレーションの寄せ集めのシステムを作成してきました。ユーザーの新規性やフラグが付けられた回数、そしてそれをフラグ付けしたユーザーの新規性や最近のフラグ付け活動を考慮して、特定のしきい値に基づいて投稿の自動削除やユーザーアカウントの閉鎖を行います。つまり、Discourseが実装したものとほぼ同じです。Discourseがコミュニティモデレーションの価値を認識し、このような包括的でよく考えられたシステムを標準で実装しているのを見て、本当に嬉しく思います。Drupal 7は、経験豊富な開発者でなくても、このようなカスタム機能を利用できる唯一のCMSであり、現在もそうです。私は開発者ではありません。そのため、Discourseに移行することになりそうです。しかし、いくつか懸念事項があります。

  1. コミュニティモデレーションシステム: 現在、私たちのフォーラムはDiscourseのプレイグラウンドインスタレーションを評価中です。システム全体の包括性とよく練られた点に感銘を受けています。しかし、コミュニティからはいくつかの奇妙な点が見つかっています。
    • 自動的に削除された投稿が「無視されたコンテンツを表示」の背後に隠されるのは、あまり好きではありません。投稿がコミュニティによって削除されるほど悪いものであれば、それは非常に不快なものか、純粋なスパムであり、訪問者やユーザーにそれを表示するオプションすら与えたくありません。これは、スパムや不快なタイトルのトピックの場合に特に問題となります。また、検索エンジンのクローラーは隠されたスパムコンテンツを見ることができるのでしょうか?自動的に隠されたスパム投稿が完全に一般公開から削除されるまでのユーザー介入なしの時間を設定することは可能ですか?また、不適切としてコミュニティによってフラグが付けられたトピックや投稿はどうなりますか?
    • 投稿の削除やユーザーの一時停止につながるしきい値に関して、「注:上記の値はすべてデフォルト設定です。管理者はサイト設定で変更できます」とこちらで読みましたが、私のDiscourseテストインスタンスでは、そのような詳細な設定が見つかりません。「hide post sensitivity」と「silence new user sensitivity」しか見つかりませんが、その感度が具体的に何に関連しているのか理解できません。
    • 投稿をフラグ付けする理由として「オフタピック」を削除したいと思います。私たちのフォーラムコミュニティは、その点では非常に気楽で、オフタピックな投稿が非常に一般的でよく受け入れられているフォーラム文化を持っています。更新: こちらで解決できそうです。
  2. プライベートメッセージの移行: 現在のフォーラムには、Drupal 7のprivatemsgモジュールを使用したプライベートメッセージスレッドが100万件近くあります。DrupalからDiscourseへの移行スクリプトでは、これは処理されません。これは、典型的なDrupalのサードパーティモジュールであるにもかかわらず、Drupal 7管理者にとって事実上のプライベートメッセージ機能であるため、重大な見落としのように思われます。
  3. 投稿形式の変換: 残念ながら、現在のフォーラムでは、純粋なHTMLとTextile形式の投稿が混在しています。移行スクリプトは純粋なHTMLを処理できると理解していますが(間違っていたら訂正してください)、Textileは処理できません。可能であれば、Textile投稿をHTMLまたはMarkdownに変換したいと考えています。どちらでも簡単です。Pandocを移行スクリプトにフックできると聞きましたが、移行時間を大幅に増加させることにもなります。既存の投稿の形式を変換するためのDrupalモジュールを探しましたが、こちらしか見つかりませんでした。これは、大量の投稿をバッチ処理できず、Drupalの「コメント」パラダイムをサポートしていません。このパラダイムは、変換が必要な「投稿」の大部分を占めています。そのため、こちらで説明されているような、sedを使用したデータベースダンプファイルでのオフラインの検索/置換を行うことを考えています。提案や解決策を歓迎します。私は経験豊富なLinuxユーザーであり、正規表現を断続的に使用してきましたが、まだ得意ではありません。編集: こちらは、生のデータがDiscourseに入った後の検索/置換のための興味深いオプションです。
  4. 広告: Discourse用の広告プラグインは、最後に調べたときから大幅に成熟したようで、本当に嬉しいです。インハウス広告を使用すると、特定の場所に画像バナーを配置し、クリック時にターゲットリンクを設定できると理解しています。また、同じ場所に複数の広告が割り当てられている場合、ランダムに選択されるのですよね?しかし、モバイルのパラダイムをどう扱うべきか全く分かりません。現在のフォーラムでは、トップに1つの水平バナーと左サイドバーに3つの垂直バナーがありますが、Discourseのレスポンシブインターフェースでは、モバイルユーザーにはこれらは実現不可能でしょう。編集: 私のニーズに合わせて広告プラグインを修正する必要があるかもしれません。有料オファーはこちらです。
  5. パーマリンク: DrupalのURLスキームには2つの主要なコンポーネントがあります。/node/XXXXXXX と、それらのノード内の特定のコメントへのリンク /comment/YYYYYYY#comment-YYYYYYY (YYYYYYYは両方の発生で同じです)。Drupal 7からDiscourseへの移行スクリプトは、これらのリンクを自動的に維持し、他のスレッドや投稿へのリンクが機能し続け、SEOを維持するようにしますか?検索エンジン用のsitemap.xmlファイルはどうなりますか?
  6. バッチ処理: 移行中、バッチで実行されますか?エラーが発生した場合、修正後に続行されますか、それとも最初からやり直す必要がありますか?
  7. 古いAppleデバイスユーザー: 当然ながら、古いブラウザを使用する危険性は理解しています。Windowsや古いAndroidデバイスでは、Discourseと互換性のある最新のブラウザをインストールする方法はほぼ常にあります。しかし、2015年のMacを持っており、アップデートを受け取っておらず、Discourseで非推奨通知を表示している古いバージョンのSafari以外は何もインストールできないと主張しているユーザーが心配です。Appleデバイスについては、それらがはるかにロックダウンされていること以外はほとんど知りません。それらのデバイスに他の最新ブラウザをインストールするのは本当に難しいのですか?
  8. 画像/アップロードストレージ: ユーザーと私はDiscourseでの画像のアップロードの容易さを気に入っていますが、ストレージスペースとコストについて少し心配しています。将来的には、必要に応じてVPSにネットワークストレージボリュームをマウントするのが最善の選択肢になるでしょう。デフォルトのアップロード場所でDiscourseを初期設定した場合、後で別のボリュームに移動すると問題が発生しますか?
  9. バックアップ:
    • 差分バックアップ、あるいはできれば重複排除バックアップのシステムがあればと思います。現在、DrupalフォーラムではAmazon S3でDuplicityを使用しており、改訂履歴が非常に長いにもかかわらず、コストは信じられないほど低いです。S3アーカイブ作成後、どのくらいの期間でルールがGlacierに移行できるか、ご存知の方はいらっしゃいますか?
    • Discourseのバックアップインターフェースでは、Amazon S3のアーカイブを削除できますか?少し極端ですが、その機能を無効にしたいと考えています。なぜなら、S3バケットにはPUT、GET、LISTの権限のみを設定しており、侵害されたシステム上のハッカーがリモートバックアップを削除できないようにしているからです。その後、S3ライフサイクルルールが適用され、一定期間後に古いアーカイブがサーバー側で削除されます。
  10. Stop Forum Spamプラグイン: Akismetは使用したくありませんが、スパマーアカウントの作成を多数防ぐためにStopForumSpam.comには常に良い結果を得ています。編集: いいえ、そうではありません。こちらでリクエストしました。また、残念ながら、Drupalのように、ユーザー名、IPアドレス、またはメールアドレスがデータベースに十分なヒット数がある場合にアカウント作成を実際に防止するようには機能しません。

長文失礼しました。皆様からの洞察に感謝いたします。そして、この優れた製品を提供してくれたDiscourseプロジェクト全体に心より感謝いたします。

これを見つけました。

BBCodeタグをMarkdownに置き換えるなど、一連の正規表現ベースの変換を適用します。

これは2016年に最後に更新されたもので、まだ関連性のあるオプションかどうかはわかりません。


これはまだ関連性がありますか? Drupalインポータスクリプトでは、次のようなコードが見られます。

 create_posts(results, total: total_count, offset: offset) do |row|
        topic_mapping = topic_lookup_from_imported_post_id("nid:#{row['nid']}")
      end
 def create_permalinks
    puts '', 'creating permalinks...'

    Topic.listable_topics.find_each do |topic|
      begin
        tcf = topic.custom_fields
        if tcf && tcf['import_id']
          node_id = tcf['import_id'][/nid:(\d+)/, 1]
          slug = "/topic/#{node_id}"
          Permalink.create(url: slug, topic_id: topic.id)
        end
「いいね!」 1

スクリプトは通常、一度に1000件の投稿を取得します。

処理済みのものを追跡するため、後続の実行では既に実行されたデータをスキップできます。私が触ったスクリプトでは、import_after設定も追加しており、最近のデータのみをロードすることで後続の実行をさらに高速化します(少量のデータでテストする場合にも役立ちます)。

投稿がパーマリンクに含まれるかどうか、さらに詳しく確認する必要があります。通常は含まれませんが、可能です。

すべてのアップロードをS3に保存したいので、バックアップにはデータベースダンプのみが含まれます。それを最適化するためにできることは特にありません。Discourseに一定数を保持させるか、保持しないように指示するか(またはバックアップ数を大きな数に設定するだけ)、ルールで処理させることができます。

「いいね!」 1

ああ、それは非常に良い点ですね。考えてみると、アップロードが直接S3に保存されるか、あるいはDiscourseのバックアップからの複数のtarball内にあるかに関わらず、S3でのアップロードストレージにはどちらにしても料金が発生します。

Discourseのバックアップ用に削除権限のないバケットを使用することについてはどうでしょうか?

しかし、S3上にある場合、コピーは1つしかないことになります。

Discourseに削除権限がない場合は機能すると思いますが、確信はありません。

はい、S3の常軌を逸したレベルのデータ冗長性があれば、通常はアップロードを保存する責任ある方法と見なされるのではないでしょうか?最近S3のオプションをいじっていませんが、削除されたファイルを一定期間復旧するためのライフサイクルルールもあると記憶していますか?誤ったDiscourseの呼び出し、例えば(ありそうもない、かつ大規模な)コーディングバグやユーザーエラーによってアップロードが誤って削除された場合のことを考えています。あるいは、ハッキングイベント、バケットの削除権限に関する私の元の懸念に戻ります。

はい、バージョン管理を有効にすれば、ファイルが削除対象としてマークされたときに削除されなくなります。支払っている容量がどれだけ多くても気にしないのであれば、そうすることができます。Discourse が使用されなくなったファイルを削除すると、削除される前にしばらくの間、墓石フォルダに移動します。ファイルの管理は Discourse に任せることをお勧めします。削除アクセスを無効にすると何か問題が発生するかどうかはわかりません。

バックアップは、必要であれば、異なる権限を持つ別のバケット(ただし、同じ認証情報)に配置できます。

「いいね!」 1

S3へのアップロードについて、@pfaffmanさん、またはどなたか詳しい方にご質問があります。多くの要因に依存することは承知していますが、アップロードをS3に置いている中規模から大規模のフォーラムにおける、帯域幅とS3リクエストの料金について、何か経験則的な情報をお持ちでしょうか?どうぞよろしくお願いいたします!

「いいね!」 1

ここで少しアップデートがあります。私がやろうとしていることは、アップロードをローカルに保持することです。現時点では十分なローカルストレージがあり、必要に応じて追加のストレージボリュームで拡張するオプションがあります。CDNの複雑さと費用、オブジェクトストレージの予測不可能な料金、そして何よりもライブウェブサイトの画像配信の転送コストに対処したくありません。次に、アップロードと s3 disable cleanup オプションを含む、Backblaze B2への自動S3バックアップを実行します。Backblazeの価格は非常に安いため、冗長なアップロードがあっても、数週間の日次バックアップを保持しても問題にならないはずです。Backblaze B2には、まさに私が求めているバケットの2つの非常に簡単なオプションがあります。1)X日後にファイルを削除する自動ライフサイクルルール、および2)N日間、ファイルの削除または変更を防ぐ(サーバーがハッキングされ、保存された認証情報を使用してリモートバックアップを削除する可能性が低い可能性を防ぐため)です。これをテストしたところ、うまく機能しているようです。Backblazeによって削除が禁止されているDiscourse GUIからバックアップアーカイブを削除しようとしましたが、何も起こりませんでした。

私や他の人のために明確にするために:backup with uploads オプションが有効(デフォルト)であれば、ローカルストレージのアップロードを自動的にS3にバックアップすることは可能ですよね?

「いいね!」 1

はい。デフォルトでは、ローカルアップロードはバックアップファイルに含まれます。

「いいね!」 1