このガイドでは、Discourse で利用可能な各種の読み取り専用モード、それらの有効化・無効化方法、および各モードを使用すべきシナリオについて解説します。
必要なユーザーレベル:管理者
Discourse 上で活発なオンラインコミュニティを運営する際、管理者が一時的にユーザーの活動を制限する必要がある場合があります。このような状況には、サーバーのメンテナンス、バックアップの促進、サーバーの移行などが含まれます。そのような時期には、ユーザーのアクセスを完全に遮断することなく、フォーラムの活動を制限することが不可欠です。
Discourse では、サイト内のさまざまな種類のインタラクションを一時的に停止するために、管理者が有効にできるさまざまな読み取り専用モードが用意されています。
このガイドでは、これらのモード、特にそれらの有効化・無効化方法、および特定のモードが交錯する状況への対処法について詳しく説明します。
読み取り専用モードの理解
Discourse は、さまざまな管理ニーズに対応するために、2 つの異なるレベルの読み取り専用モードをサポートしています。それらは以下の通りです。
- 完全な読み取り専用モード
- フォーラム内のすべての書き込み操作を制限し、投稿、コメント、いいねなどのコンテンツの作成や変更をすべてのユーザーから禁止します。
- フォーラムを現在の状態で事実上「凍結」し、ユーザーが既存のコンテンツを読み取り、ナビゲートできる一方で、データベースへの影響を与えないようにします。
- データベースの現在の状態を維持するために、管理者サイト設定やサイトのカスタマイズの変更を無効にします。
- 一般ユーザーの新しいフォーラムログインを無効にします。管理者は、管理者用メールログインフロー(
/u/admin-login)を使用してログインできます。 - API 呼び出しは読み取り(GET)可能ですが、書き込み(POST/PUT/DELETE)はできません。
- キューイングされた送信ウェッブフックは配信されますが、それらをトリガーするアクションがブロックされるため、新しいウェッブフックはトリガーされません。
- 受信ウェッブフック(メールのバウンス)は 503 レスポンスでブロックされます。メールプロバイダーは、独自のバックオフスケジュールに従って再試行します。
- スタッフのみ書き込み可能モード
- フォーラム内の書き込み操作(投稿、コメント、いいねなど)を一般ユーザーに制限します。スタッフ以外のユーザーは読み取り専用操作に制限されますが、アカウントにログインすることは可能です。
- 管理者およびモデレーターの活動は通常通り続行されます。管理者はサイト設定を変更でき、スタッフユーザーは投稿、いいね、プロフィールの変更などの書き込み操作を実行できます。
- API 呼び出しは読み取り(GET)可能です。書き込み(POST/PUT/DELETE)は、スタッフ用 API キーを持つ場合のみ可能です。
- キューイングされた送信ウェッブフックは配信されます。スタッフのアクションによって新しい送信ウェッブフックがトリガーされ、これも成功しますが、スタッフ以外のユーザーのアクションによってウェッブフックはトリガーされません。
- 受信ウェッブフック(メールのバウンス)は 503 レスポンスでブロックされます。メールプロバイダーは、独自のバックオフスケジュールに従って再試行します。
これらのモードにより、重要な管理期間中のフォーラムの運用性を柔軟に管理することが可能になります。
読み取り専用モードの有効化・無効化方法
管理者は、異なる読み取り専用モード間の移行を慎重に管理する必要があります。読み取り専用モードを有効にする前に、以前に有効化されたモードが無効化されていることを確認してください。
完全な読み取り専用モード
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 の 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)
ベストプラクティス
- タイムリーなコミュニケーション: 予定されている読み取り専用期間について事前にコミュニティに通知し、適切な期待値を設定します。
- テスト: 重要な操作中にこれらのモードを実装する前に、トラフィックの少ない時期にテストを行い、その影響を理解します。
- ドキュメント: 各モードがいつ、なぜ有効化または無効化されたかについて詳細な記録を保持し、将来の運用計画を支援します。
よくある質問
-
読み取り専用モードの有効化・無効化にどのくらい時間がかかりますか?
- 変更は即座に反映されます。ただし、移行期間中のユーザーのアクションによっては、ユーザー体験が若干異なる場合があります。
-
助けてください!読み取り専用モードのためにサイトからロックアウトされてしまいました。再度サイトにアクセスするにはどうすればよいですか?
-
discourse/lib/discourse.rb に他の
READ-ONLYモードがリストされていることに気づきましたが、これらのモードは何をするものですか?READONLY_MODE_KEYは主にバックアップとリストアプロセスに使用され、アプリケーション自体によってトリガーされます。このモードは、discourse enable_readonlyおよびdiscourse disable_readonlyを使用して、Discourse コマンドラインインターフェースからも有効化または無効化できます。ただし、このキーはコンテナの再起動後に生存しません。USER_READONLY_MODE_KEYは、管理者が管理インターフェースで読み取り専用ボタンをクリックしたときに使用されます。このキーの特別な点は、ユーザーによって有効化された読み取り専用状態がコンテナの再起動後も維持される必要があるため、有効期限付きキーとして設定されないことです。他のキーは TTL(READONLY_MODE_KEYは 60 秒、PG_READONLY_MODE_KEYは 300 秒)で設定され、アプリが読み取り専用モードに閉じ込められないように、30 秒ごとに有効期限を延長するスレッドがあります。PG_READONLY_MODE_KEYおよびPG_FORCE_READONLY_MODE_KEYは、PG フェイルオーバーに使用されます。前者は有効期限付きキーとして設定され、後者は有効期限なしです。

