Backup discourse from the command line

いくつかの AI の助けを借りて、discourse コマンドのサブコマンドの包括的なリストを作成しました。
discourse CLI(Thor gem を使用して script/discourse 経由で実装されています)は、バックアップと復元、サイト管理とモード、データベースユーティリティ、**データ移行(インポート/エクスポート)**の 4 つのカテゴリに分類された 13 のコアサブコマンドを提供します。


コマンドクイックリファレンス

カテゴリ サブコマンド 主な機能
バックアップと復元 backup 完全またはデータベースのみを含むバックアップアーカイブを生成します。
restore .tar.gz バックアップファイルをインスタンスに復元します。
enable_restore 復元コマンドの実行を許可します。
disable_restore 復元の実行権限を取り消します。
rollback 失敗した復元後にデータベースの状態を元に戻します。
サイトモード enable_readonly サイト全体で一時的な読み取り専用モードを切り替えます。
disable_readonly 読み取り専用モードを解除し、通常のサイト書き込みを復元します。
request_refresh 接続されているすべてのアクティブなクライアントにブラウザのリフレッシュプロンプトを発行します。
データベース操作 remap データベーステーブル全体でグローバルなテキスト検索と置換を実行します。
データ移行 export_category カテゴリ、そのトピック、および関連するユーザーをエクスポートします。
import_category カテゴリアーカイブを現在のフォーラムにインポートします。
export_topics ID により特定のトピックと、その作成者/返信者のアカウントをエクスポートします。
import_topics トピックアーカイブを現在のフォーラムにインポートします。

サブコマンドの詳細ドキュメント

1. バックアップと復元コマンド

discourse backup [FILENAME]

  • 説明: フォーラムのデータベースとアセットの完全なバックアップを作成します。

  • フラグ:

  • --sql-only: (ブール値、デフォルト: false)ローカルにアップロードされたファイルをスキップし、PostgreSQL データベースのみをダンプします。

  • --s3-uploads: (ブール値、デフォルト: false)S3 に保存されているアセットをバックアップアーカイブに含めることを強制します(--sql-only が設定されている場合は無視されます)。

  • 例:

discourse backup
discourse backup --sql-only

discourse restore [FILENAME]

  • 説明: /var/www/discourse/public/backups/default にあるローカルの .tar.gz アーカイブからフォーラムのバックアップを復元します。
  • 前提条件: まず discourse enable_restore を実行する必要があります。
  • 例:
discourse restore discourse-2026-07-22-120000-v2026xxxx.tar.gz

discourse enable_restore と discourse disable_restore

  • 説明: コンソール/ウェブベースの復元タスクを許可または制限するアプリケーションフラグを切り替えます。
  • 使用手順:
discourse enable_restore
discourse restore <filename>
discourse disable_restore

discourse rollback

  • 説明: 失敗した復元実行前の時点にデータベーススキーマと状態をロールバックします。

2. サイト状態とクライアント制御

discourse enable_readonly と discourse disable_readonly

  • 説明: Redis 内の READONLY_MODE_KEY を設定またはクリアします。
  • 詳細:
  • データベースへの書き込みを凍結しますが、ユーザーがサイトを閲覧できるようにします。
  • アクティブな間に更新される短い生存時間(TTL)ループを使用し、ターミナルセッションがクラッシュした場合でもサイトが永久にロックされないようにします。

discourse request_refresh

  • 説明: MessageBus を介してシステムメッセージを送信し、オンラインのすべてのウェブセッションにウェブページを再読み込みするよう指示します。アセットの更新やグローバルなテーマ変更をデプロイした後で有用です。

3. データベースリマップ

discourse remap [OPTIONS] FROM TO

  • 説明: データベース内のテキスト列に対して直接文字列の検索と置換を実行します。ドメイン名、CDN パス、または画像アップロードプレフィックスの更新時に重要です。

  • フラグ:

  • --global: (ブール値)標準的なコンテンツテーブルではなく、すべてのテーブルをスキャンしてリマップします。

  • --regex: (ブール値)FROM パラメータをリテラル文字列ではなく正規表現として評価します。

  • 例:

discourse remap "old-domain.com" "new-domain.com"
discourse remap --global "/uploads/default/" "/cdn-uploads/"

4. 選択的データインポートとエクスポート

discourse export_category [CATEGORY_ID]

  • 説明: 単一のカテゴリを、すべてのネストされたトピック、投稿、および参加ユーザーのプロファイルを含めて、JSON アーカイブファイルにシリアライズします。

discourse import_category [FILE_PATH]

  • 説明: export_category によって作成されたアーカイブを読み取り、カテゴリデータをターゲットインスタンスにマージします。

discourse export_topics [TOPIC_IDS...]

  • 説明: 1 つ以上のスペース区切りのトピック ID を受け取り、トピック、投稿、および関連するユーザーアカウントをエクスポートします。
  • 例:
discourse export_topics 102 105 210

discourse import_topics [FILE_PATH]

  • 説明: export_topics によって作成された JSON アーカイブを宛先の Discourse インスタンスにインポートします。
「いいね!」 1