Crowi
運用

バックアップ

Crowi のデータ (MongoDB / 添付ファイル / Redis) のバックアップとリストア

Crowi のデータは複数の場所に分散しています。バックアップを設計するには、 それぞれのデータストアが何を保持していて、どれが復旧に不可欠かを 理解しておく必要があります。

バックアップ対象の全体像

データストア内容バックアップ
MongoDBページ・リビジョン・ユーザー・コメント・設定など全ドキュメント必須
添付ファイルストレージアップロードされたファイルの実体必須
Elasticsearch全文検索インデックス不要 (再構築可能)
Redisセッション・Socket.IO アダプタ・編集者カウンタなど不要 (揮発前提)

要点は、MongoDB と添付ファイルストレージの 2 つが復旧に不可欠で、 Elasticsearch と Redis はバックアップ不要 (失っても再生成できる) という ことです。

MongoDB のバックアップ

Crowi の中核データはすべて MongoDB にあります。ページ本文、リビジョン 履歴、ユーザー、コメント、設定 (Config) など、これを失うと Wiki その ものが失われます。

mongodump

mongodump でデータベース全体のスナップショットを取得します。

# MONGO_URI に対応する接続情報でダンプ
mongodump --uri "mongodb://localhost:27017/crowi" --out ./backup/crowi-$(date +%Y%m%d)
  • 出力先ディレクトリには BSON 形式でコレクションが書き出されます。
  • 認証付きクラスタやレプリカセットの場合は、--uri に認証情報・ レプリカセット名を含めてください。
  • 機密 Config (OAuth secret、SMTP パスワードなど) は CROWI_ENCRYPTION_KEY で暗号化された状態でダンプに含まれます。復元先で同じ CROWI_ENCRYPTION_KEY を使えるよう、鍵も別途安全に保管してください。 鍵を失うと暗号化された機密値は復号できません。

Tip: 定期バックアップは cron などで mongodump をスケジュール 実行し、出力先をリポジトリとは別のストレージ (オブジェクトストレージ など) へ転送する構成が安全です。日付入りディレクトリにしておくと 世代管理しやすくなります。

mongorestore

ダンプからの復元は mongorestore で行います。

mongorestore --uri "mongodb://localhost:27017/crowi" ./backup/crowi-20260516/crowi
  • 既存データへ上書き復元する場合は、事前に対象 DB を空にするか --drop オプションを検討してください。
  • 復元後、必要に応じて検索インデックスを再構築します (後述)。

添付ファイルのバックアップ

添付ファイルの実体は、選択している ストレージドライバ によって 保存場所が異なります。バックアップ手順もドライバごとに変わります。

ドライバ保存先バックアップ方法
ローカル (plugin-storage-local)サーバのファイルシステム保存ディレクトリを丸ごとコピー / アーカイブ
S3 (plugin-storage-aws-s3)S3 バケットS3 のバージョニング / クロスリージョンレプリケーション / aws s3 sync

ストレージドライバの構成については ストレージ設定 を 参照してください。

Important: MongoDB と添付ファイルのバックアップは できるだけ 同じ時点で 取得してください。タイミングが大きくずれると、MongoDB に 添付メタデータはあるのに実体ファイルがない (またはその逆) という 不整合が起きえます。

Note: AWS Lightsail の VPS から S3 へバックアップする場合、 インスタンスに既定で付く AmazonLightsailInstanceRoleLightsail サービス側のアカウント所属 で、あなたの AWS アカウントの S3 には触れ ません。EC2 のようにインスタンスプロファイルで権限が自動で付く挙動は 使えないため、あなたのアカウントで作った 明示的な IAM ユーザーの アクセスキー~/.aws/credentials に置いて aws s3 sync などを実行 してください。Lightsail での運用の通し手順は AWS Lightsail で動かす を参照してください。

ドライバ間のファイル移行

バックアップ目的とは別ですが、ストレージドライバを切り替える際の ファイル移行は crowi-admin CLI で行えます。

crowi-admin rebuild storage copy --from local --to s3
# 実コピー前に対象キーを確認したい場合
crowi-admin rebuild storage copy --from local --to s3 --dry-run

Elasticsearch — バックアップ不要

Elasticsearch の全文検索インデックスは、MongoDB のページデータから いつでも再構築できる派生データです。バックアップ対象に含める必要は ありません。

MongoDB を別環境へ復元したあとは、検索インデックスを再構築します。

crowi-admin rebuild search

検索バックエンドの構成については 検索バックエンドのセットアップ を参照してください。

Redis — バックアップ不要

Redis はセッションストア、Socket.IO アダプタ、リアルタイム共同編集の pub/sub、ページ単位の編集者カウンタとして使われます。いずれも 揮発しても支障のないデータです。

  • Redis を失うとログインセッションがリセットされ、ユーザーは再ログインを 求められますが、Wiki のコンテンツには影響しません。
  • リアルタイム共同編集の真実の源は MongoDB の Page.yjsState であり、 Redis はライブのルーティング専用です。

したがって Redis の永続化バックアップは不要です。詳細は リアルタイム共同編集の運用 を参照してください。

復旧手順のまとめ

新しい環境へ Crowi を復元する大まかな流れは以下の通りです。

  1. MongoDB を mongorestore で復元する。
  2. 添付ファイルをストレージドライバの保存先へ復元する。
  3. 復元先の .env に、ダンプ取得時と 同じ CROWI_ENCRYPTION_KEY を 設定する (機密 Config の復号に必要)。
  4. api を起動する。
  5. crowi-admin rebuild search で検索インデックスを再構築する。
  6. Redis は空のまま起動してよい (セッションは再ログインで再生成される)。

Tip: 本番運用に入る前に、ステージング環境で実際にバックアップ からの復旧を一度通しで試しておくことを強くおすすめします。鍵の保管や 添付ファイルの整合性は、実際に復元してみて初めて問題が見つかること が多いためです。

On this page