バックアップ
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 へバックアップする場合、 インスタンスに既定で付く
AmazonLightsailInstanceRoleは Lightsail サービス側のアカウント所属 で、あなたの 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-runElasticsearch — バックアップ不要
Elasticsearch の全文検索インデックスは、MongoDB のページデータから いつでも再構築できる派生データです。バックアップ対象に含める必要は ありません。
MongoDB を別環境へ復元したあとは、検索インデックスを再構築します。
crowi-admin rebuild search検索バックエンドの構成については 検索バックエンドのセットアップ を参照してください。
Redis — バックアップ不要
Redis はセッションストア、Socket.IO アダプタ、リアルタイム共同編集の pub/sub、ページ単位の編集者カウンタとして使われます。いずれも 揮発しても支障のないデータです。
- Redis を失うとログインセッションがリセットされ、ユーザーは再ログインを 求められますが、Wiki のコンテンツには影響しません。
- リアルタイム共同編集の真実の源は MongoDB の
Page.yjsStateであり、 Redis はライブのルーティング専用です。
したがって Redis の永続化バックアップは不要です。詳細は リアルタイム共同編集の運用 を参照してください。
復旧手順のまとめ
新しい環境へ Crowi を復元する大まかな流れは以下の通りです。
- MongoDB を
mongorestoreで復元する。 - 添付ファイルをストレージドライバの保存先へ復元する。
- 復元先の
.envに、ダンプ取得時と 同じCROWI_ENCRYPTION_KEYを 設定する (機密 Config の復号に必要)。 - api を起動する。
crowi-admin rebuild searchで検索インデックスを再構築する。- Redis は空のまま起動してよい (セッションは再ログインで再生成される)。
Tip: 本番運用に入る前に、ステージング環境で実際にバックアップ からの復旧を一度通しで試しておくことを強くおすすめします。鍵の保管や 添付ファイルの整合性は、実際に復元してみて初めて問題が見つかること が多いためです。