Discourse の読み取り専用モード

:bookmark: このガイドでは、Discourse で利用可能なさまざまな読み取り専用モード、それらを有効化および無効化する方法、および各モードを使用するシナリオについて説明します。

:person_raising_hand: 必要なユーザーレベル:管理者

Discourse で活気のあるオンライン コミュニティを管理するには、管理者がユーザーの活動を一時的に制限する必要がある場合があります。これらの状況は、サーバーのメンテナンスの実行、バックアップの促進、またはサーバーの移行など、さまざまな場合があります。このような時期には、ユーザー アクセスを完全に停止することなく、フォーラムの活動を制限することが重要です。

Discourse は、管理者がサイト内のさまざまな種類の対話を一時的にフリーズするために有効にできる、さまざまな読み取り専用モードを提供しています。

このガイドでは、これらのモードについて説明し、特にそれらを有効化および無効化する方法、および特定のモードが重複する状況の処理に焦点を当てます。

読み取り専用モードの理解

Discourse は、さまざまな管理ニーズに合わせて調整された 2 つの異なるレベルの読み取り専用モードをサポートしています。これらは次のとおりです。

  1. フル読み取り専用モード

    • フォーラムでのすべての書き込み操作を制限し、ユーザーが投稿、コメント、いいねなどのコンテンツを作成または変更できないようにします。
    • フォーラムを現在の状態に「フリーズ」させることができ、ユーザーはデータベースに影響を与えることなく、既存のコンテンツを読み取り、移動できます。
    • データベースの現在の状態が維持されるように、管理者サイトの設定またはサイトのカスタマイズの変更を無効にします。
    • 新しいフォーラムへのログインを無効にします。
  2. スタッフのみ書き込みモード

    • フォーラムでの投稿、コメント、いいねなどの書き込み操作から標準ユーザーを制限します。標準ユーザーは読み取り専用操作に限定され、このモードが有効になるとアカウントにログインできなくなります。
    • 管理者とモデレーターの活動は通常どおり続行できます。管理者はサイト設定を変更でき、スタッフユーザーは投稿、いいね、プロフィールの変更などの書き込み操作を実行できます。

これらのモードは、重要な管理期間中にフォーラムの運用可能性を管理する上での柔軟性を保証します。

読み取り専用モードの有効化/無効化方法

:warning: 管理者は、異なる読み取り専用モード間の移行を慎重に管理する必要があります。読み取り専用モードを有効にする前に、以前にアクティブ化されたモードが無効になっていることを確認してください。

フル読み取り専用モード

Rails コンソール経由

Discourse のインストールにアクセスできる場合は、./launcher enter app で Docker コンテナに入り、次に rails c で Rails コンソールに入って、Discourse の rails コマンドラインインターフェイスを使用して次のコマンドを実行します。

Discourse.enable_readonly_mode(Discourse::USER_READONLY_MODE_KEY)

管理者パネル経由

Web インターフェイスから管理アクセス権がある場合は、Admin > Backups > Enable Read-Only Mode に移動して読み取り専用モードを有効にできます。

読み取り専用モードを無効にするには、次の rails コマンドを実行します。

Discourse.disable_readonly_mode(Discourse::USER_READONLY_MODE_KEY)

または、管理者パネルで Admin > Backups > Disable Read-Only Mode に移動して使用します。

スタッフのみ書き込みモード

:discourse: スタッフのみ書き込みモードは、Discourse rails コンソールからのみ有効化/無効化できます。サイトが Discourse によってホストされている場合は、このモードのいずれかを有効化または無効化したい場合は、team@discourse.org までご連絡ください。

スタッフのみ書き込みモードを有効にするには、次の rails コンソール コマンドを使用します。

Discourse.enable_readonly_mode(Discourse::STAFF_WRITES_ONLY_MODE_KEY)

無効にするには:

Discourse.disable_readonly_mode(Discourse::STAFF_WRITES_ONLY_MODE_KEY)

ベストプラクティス

  • 適時のコミュニケーション: 予定されている読み取り専用期間についてコミュニティに事前に通知し、適切な期待を設定します。
  • テスト: 重要な操作中にこれらのモードを実装する前に、トラフィックの少ない期間中にテストを実施して、その影響を理解します。
  • ドキュメント: 将来の運用計画を支援するために、各モードがいつ、なぜ有効化または無効化されたかの詳細な記録を保持します。

FAQ

  • 読み取り専用モードの有効化/無効化にはどのくらい時間がかかりますか?

    • 変更は即時です。ただし、移行期間中のユーザーのアクションによっては、ユーザーエクスペリエンスが若干異なる場合があります。
  • ヘルプ!読み取り専用モードでサイトにロックアウトされました。サイトに再度アクセスするにはどうすればよいですか?

  • discourse/lib/discourse.rb に他の READ-ONLY モードがリストされていることに気づきましたが、これらのモードは何をしますか?

    • READONLY_MODE_KEY は主にバックアップと復元プロセスに使用され、アプリケーション自体によってトリガーされます。このモードは、Discourse コマンドラインインターフェイスで discourse enable_readonly および discourse disable_readonly を使用して有効化または無効化することもできます。ただし、このキーはコンテナの再起動では保持されません。
    • USER_READONLY_MODE_KEY は、管理者が管理者インターフェイスの読み取り専用ボタンをクリックしたときに使用されます。このキーの特別な点は、ユーザーによって有効化された読み取り専用がコンテナの再起動を生き残る必要があるため、期限切れのキーとして設定しないことです。他のキーは TTL が 60 秒に設定されており、アプリが決して読み取り専用モードでスタックしないように、30 秒ごとに有効期限を延長するスレッドがあります。
    • PG_READONLY_MODE_KEY および PG_FORCE_READONLY_MODE_KEY は、PG フェイルオーバーに使用されます。前者は期限切れのキーとして設定され、後者は期限切れではありません。
「いいね!」 9

違いがわかりません!もし違いがある場合、これらの説明を調整していただけますか?

「いいね!」 1

ガイドを更新し、ここでいくつかの追加の明確化を行いました。読み取り専用モードについて、まだご不明な点がございましたらお知らせください。 :slightly_smiling_face:

「いいね!」 1

しかし、

discourse enable_readonly

は何をするのでしょうか?

READONLY_MODE_KEY を使用しており、ttl を 60 に設定するため、ある時点でオフに戻ります。さて、

このコマンドのデフォルトの動作には何か理由があるのでしょうか?ウェブインターフェイスの読み取り専用モードとは完全に異なるコマンドであることに気づくのに、何年もかかりました。そして、誰かがかつてこれらのキーについて教えてくれようとしたことを思い出しましたが、その重要性を理解できませんでした。

私の意見では、discourse enable_readonly が行うべきは、Discourse.enable_readonly_mode(Discourse::STAFF_WRITES_ONLY_MODE_KEY) のようなことだと思います。ずっと前に気づいていればよかったです!

このような PR を提出できますか?

  desc "enable_readonly", "Enable the readonly mode, allowing staff writes"
  def staff_writes_only
    load_rails

    Discourse.enable_readonly_mode(Discourse::STAFF_WRITES_ONLY_MODE_KEY)
    puts 'The site is now in readonly mode with staff writes permitted.'
  end

これにはあまり詳しくありませんが、enable_readonly_mode がサイトを staff_writes_only_mode に設定するのは混乱を招くと思います。これらは異なるモードであり、特定の操作を実行する際には、スタッフがデータベースへの書き込みを許可されないようにしたい場合があります(たとえば、復元中は削除されます)。

代わりに、ここでいくつかのことを行うことができるかもしれません。

  1. リードオンリーモードがそのタスクの説明にTTLを設定することを明確にする
  2. keep_readonly_mode を呼び出すタスクを追加して、60分以上に延長できるようにする
  3. enable_staff_writes_only および disable_staff_writes_only タスクを追加する
「いいね!」 2

同意しますが、「しばらくの間読み取り専用モードを設定する」よりはるかに混乱が少ないでしょう。

復元スクリプト自体が読み取り専用モードを設定するため、このコマンドの影響を受けないと思います。

設定されたときにX分間設定されていることを宣言する方が良いでしょう。説明を見つけるのはそれほど簡単ではありません。

たぶん。誰がそれを使用するのかはっきりしません。

それは素晴らしいでしょう!

また、rakeタスクとdiscourseコマンドから利用可能なコマンドを混同していないことを明確にする必要があります。

「いいね!」 2

なるほど。これをPRとして提出する可能性はありますか? enable_staff_writes_only および disable_staff_writes_only コマンドについても、可能であれば同様にお願いします。ありがとうございます!

「いいね!」 3

読み取り専用を開始した後、どのクロックが停止するのか知りたいのですが?読み取り専用を設定した後、トピックのバンプは発生しますか?

Web UIで読み取り専用モードが設定されている場合、アップデートも動作しないようです。