ResticとCronを使用して、Nextcloudのバックアップを自動化し、一貫性を保つ

信頼性の高い Nextcloud バックアップを作成するには、ユーザーアクティビティを一時停止し、データベースをエクスポートし、Restic を使用してそのエクスポートデータとアプリケーションおよびデータディレクトリをキャプチャします。この作業を root 権限のスクリプトに記述し、cron でスケジュール設定してください。スケジュール設定に頼る前に、スナップショットを確認し、テスト復元を実行してください。

この例では、DebianまたはUbuntuサーバー、Nextcloudの直接インストール先/var/www/nextcloud、別のデータディレクトリ/srv/nextcloud-data、およびMariaDBを想定しています。これらの値を実際のパスとデータベース名に置き換えてください。手順は、2026年10月にNextcloud 35管理マニュアルとRestic 0.19.1ドキュメントに基づいて検証済みです。

暗いターミナル画面に表示されたイラストは、MariaDBデータベースのエクスポート前にNextcloudのメンテナンスモードが有効になっている様子を示している。
一貫性のあるバックアップを開始するために必要な2つの操作(メンテナンスモードの有効化とデータベースのエクスポート)を、ターミナル画面で示す図。

Nextcloudのバックアップには何を含める必要がありますか?

Nextcloudのバックアップガイドでは、設定、データ、データベース、テーマ、およびカスタムアプリが保持すべき重要な部分として挙げられています。アプリケーションディレクトリ全体をバックアップすると、通常は設定とバンドルされているアプリも含まれますが、カスタムアプリ、テーマ、またはデータディレクトリがサーバー上の別の場所に存在するかどうかを確認してください。Resticコマンドには、それぞれのパスを個別に指定してください。

メンテナンスモードでは、バックアップの実行中に既存のセッションがロックされ、新規ログインができなくなります。これにより、データベースやファイルが様々なタイミングで変更される可能性が低くなりますが、その間はNextcloudが利用できなくなります。データストアが大きい場合は、比較的静かな時間帯にジョブをスケジュールしてください。サーバーにデータディレクトリに直接書き込む外部ワーカーやスクリプトがある場合は、それらも一時停止してください。

Nextcloudの公式バックアップ手順書には、構成要素とデータベースのエクスポートオプションが説明されています。この手順ではMariaDBを使用します。PostgreSQL、MySQL、またはSQLiteを使用する場合は、該当マニュアルのデータベースセクションにある対応するダンプおよびリストアコマンドを使用してください。

Resticを準備し、その認証情報を保護してください。

ResticとMariaDBクライアントは、お使いのディストリビューションの信頼できるパッケージソースを使用してインストールしてください。リポジトリは、別のディスクまたはリモートバックアップターゲットに選択してください。Nextcloudサーバー上にのみ保存されたリポジトリでは、サーバーまたはそのストレージの損失から保護されません。リポジトリをバックアップ対象のディレクトリ内に配置しないでください。

Resticはリポジトリデータを暗号化しますが、復元するにはリポジトリのパスワードが必要です。パスワードファイルを作成し、承認されたパスワードマネージャーなど、サーバー外の保護された場所にコピーを保管してください。パスワードを紛失すると、暗号化されたリポジトリを読み取ることができなくなります。パスワードをコマンドライン、crontab、またはスクリプトに直接記述することは避けてください。

sudo install -d -m 700 /root/.config/restic
sudo install -m 600 /dev/null /root/.config/restic/nextcloud-password
sudo install -m 600 /dev/null /root/.config/restic/nextcloud.env

選択したResticパスワードをパスワードファイルに安全に保管してください。リポジトリの場所とパスワードファイルのパスを環境ファイルに記述してください。

RESTIC_REPOSITORY=/mnt/backup/nextcloud
RESTIC_PASSWORD_FILE=/root/.config/restic/nextcloud-password

リモートバックエンドの場合は、そのバックエンドのドキュメントに記載されているリポジトリのURLと認証情報を使用し、権限を制限して保存してください。Resticのリポジトリ設定とサポートされているパスワードファイル環境変数については、リポジトリ準備ガイドに記載されています。新しいリポジトリは、実行ごとにではなく、一度だけ初期化してください。

set -a
. /root/.config/restic/nextcloud.env
set +a
restic init
ターミナル画面には、Resticリポジトリのパス、パスワードファイルのパス、およびrestic initコマンドが表示されます。
暗号化されたResticリポジトリの設定例。パスワード自体は別の保護されたファイルに保存されます。

/root/.my.cnfMariaDB の認証情報も保護する必要があります。データベースのユーザー名、パスワード、ホスト名を記述した、root 権限で読み取り可能なクライアント オプション ファイル (例: ) を作成し、そのパーミッションを に設定します600。以下のスクリプトは、そのファイルを に渡すmariadb-dumpため、データベースのパスワードがプロセス引数に表示されません。

Nextcloudをサービスに戻すバックアップスクリプトを作成します。

以下の内容を として保存してください/usr/local/sbin/nextcloud-restic-backup。 と を調整してNC_DATA_DIRにDB_NAME合わせてくださいconfig/config.php。このスクリプトは、メンテナンスモードを有効にし、MariaDB をエクスポートし、アプリケーション、データ、および一時的な SQL ダンプをバックアップした後、後続のコマンドが失敗した場合でもメンテナンスモードを無効にします。

#!/usr/bin/env bash
set -Eeuo pipefail
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

NC_DIR=/var/www/nextcloud
NC_DATA_DIR=/srv/nextcloud-data
DB_NAME=nextcloud
RESTIC_ENV=/root/.config/restic/nextcloud.env
DB_CNF=/root/.my.cnf

set -a
source "$RESTIC_ENV"
set +a
exec 9>/run/lock/nextcloud-restic.lock
flock -n 9 || exit 0

mountpoint -q /mnt/backup || {
  echo "Backup target is not mounted" >&2
  exit 1
}

install -d -m 700 /var/backups/nextcloud
STAGE_DIR=$(mktemp -d /var/backups/nextcloud/db.XXXXXX)
maintenance_on=0

cleanup() {
  if [[ "$maintenance_on" -eq 1 ]]; then
    sudo -u www-data php "$NC_DIR/occ" maintenance:mode --off ||
      logger -t nextcloud-restic "Could not disable maintenance mode"
  fi
  rm -rf "$STAGE_DIR"
}
trap cleanup EXIT
trap 'exit 130' INT
trap 'exit 143' TERM

sudo -u www-data php "$NC_DIR/occ" maintenance:mode --on
maintenance_on=1

mariadb-dump --defaults-extra-file="$DB_CNF"   --single-transaction --default-character-set=utf8mb4 "$DB_NAME"   > "$STAGE_DIR/nextcloud.sql"
test -s "$STAGE_DIR/nextcloud.sql"

restic backup "$NC_DIR" "$NC_DATA_DIR" "$STAGE_DIR" --tag nextcloud

所有権とパーミッションを設定して、rootユーザーのみがスクリプトを編集または実行できるようにし、メンテナンス時間中に手動でテストしてください。このmountpointチェックにより、バックアップディスクが見つからない場合に、大量のリポジトリがサーバーのローカルファイルシステムに密かに送信されるのを防ぎます。リポジトリがローカルにマウントされているのではなくリモートにある場合は、このチェックをバックエンド用の信頼性の高いチェックに置き換えてください。

初回実行前にパスを確認してください。データフォルダが既に 内にある場合は/var/www/nextcloud、サンプルパスが正しいと想定せず、Nextcloud の設定から実際のデータディレクトリを使用してください。また、アプリケーションディレクトリ外に保存されているカスタムアプリやテーマが明示的に含まれていることを確認してください。

ターミナル画面の図は、ResticがNextcloudアプリケーションディレクトリ、別のデータディレクトリ、およびSQLダンプ用のステージングディレクトリをバックアップしている様子を示しています。
Resticのバックアップには、アプリケーション、ユーザーファイル、および今回の実行用に作成されたデータベースダンプが含まれます。

cronをスケジュールして結果を確認する

手動実行が成功したら、root crontab エントリを追加しますsudo crontab -e。この例では、スクリプトのフルパスを使用して毎日午前 2 時 30 分にジョブを開始し、トラブルシューティングのために出力を記録します。

30 2 * * * /usr/local/sbin/nextcloud-restic-backup >> /var/log/nextcloud-restic.log 2>&1

Cronは限られた環境しか提供しないため、スクリプトは明示的に設定を行いPATH、Resticの設定自体を読み込みます。お使いのディストリビューションでcronが有効になっていること、およびこの時間がNextcloudのバックグラウンドジョブランナーや他のメンテナンスタスクと重複していないことを確認してください。Linuxのcrontabマニュアルには、スケジュールの形式とcronが提供する環境について記載されています。

ジョブが/var/log/nextcloud-restic.log正常に終了したことを確認し、最近のスナップショットを一覧表示することで、ジョブが正しく実行されたことを確認します。

sudo bash -lc 'set -a; source /root/.config/restic/nextcloud.env; set +a; restic snapshots'
sudo bash -lc 'set -a; source /root/.config/restic/nextcloud.env; set +a; restic check'

Restic の通常のcheck検証機能は、リポジトリの構造を検証します。データ全体の読み取りには時間がかかり、リモートリポジトリではかなりの帯域幅を消費する可能性があります。restic check --read-data定期的にスケジュールするか、時間をかけて部分的にチェックするように設定してください。詳細については、Restic のリポジトリ整合性に関するドキュメントを--read-data-subset参照してください。

スナップショットの一覧表示は復元テストではありません。最新のスナップショットを別のスクラッチディレクトリに復元しrestic restore latest --target /tmp/nextcloud-restore-test、アプリファイル、データディレクトリ、SQLダンプが存在することを確認してください。テストとして、稼働中のインストール環境に復元しないでください。実際の復元を行うには、ファイルとデータベースを1つのセットとして復元してください。Nextcloudの復元手順では、データベースの再作成とクライアント同期に関する考慮事項について説明しています。

この設定では、再現可能な暗号化スナップショットが提供されますが、cron は自身の障害を監視しず、Restic は保持ポリシーを決定しません。ログを確認するか、失敗した実行に対するアラートを設定し、リポジトリ認証情報の別のコピーを保持し、定期的に復旧テストを実施してください。メンテナンス期間が長すぎる場合は、変更中のファイルをリアルタイムでバックアップするのではなく、ストレージプラットフォーム向けに設計された、調整されたファイルシステムスナップショットとデータベース整合性のあるエクスポートを使用してください。

ターミナル画面には、Nextcloud Resticスクリプトの毎日のcronエントリと、restic snapshotsコマンドが表示されています。
このスケジュールでは、root権限で所有するスクリプトが毎日実行されます。スナップショット一覧は、実行が記録されているかどうかを簡単に確認するためのものです。

コメントを残す

SLES 15 KVM セットアップ: 選択した仮想マシンを起動時に自動的に起動するように設定

SLES 15 KVM セットアップ: 選択した仮想マシンを起動時に自動的に起動するように設定

SLES 15 KVMおよびlibvirtツールをインストールし、適切なホストサービスを有効にし、選択した仮想マシンが再起動後に起動するように設定します。

systemdシャットダウン画面でハングアップするSUSEサーバーを診断する

systemdシャットダウン画面でハングアップするSUSEサーバーを診断する

systemdジョブと前回の起動ジャーナルを使用して、遅いサービス、マウント、またはストレージの依存関係を特定し、原因を隠蔽することなく修正します。

SLES 15サーバーに必要なWebトラフィックのみを許可する

SLES 15サーバーに必要なWebトラフィックのみを許可する

firewall-cmd を使用してアクティブゾーンを検査し、HTTP を安全に許可し、SSH アクセスを維持し、SLES 15 でルールが再読み込み後も有効であることを確認します。

ロックアウトせずにSLES PAMログイン失敗を診断する

ロックアウトせずにSLES PAMログイン失敗を診断する

PAMの障害が発生した原因を、サービス、アカウントポリシー、またはIDプロバイダーに特定し、正常に動作する管理者セッションを維持しながら、適切なSLES構成を修復します。

SLES 15セキュアブートにカスタムカーネルモジュールをインストールして署名する

SLES 15セキュアブートにカスタムカーネルモジュールをインストールして署名する

セキュアブートを無効にせずに、カスタムSLES 15カーネルモジュールをロードします。実行中のカーネルと一致させ、.koファイルに署名し、MOKキーを登録し、ロードが成功したことを確認します。

ResticとCronを使用して、Nextcloudのバックアップを自動化し、一貫性を保つ

ResticとCronを使用して、Nextcloudのバックアップを自動化し、一貫性を保つ

NextcloudのファイルとMariaDBをまとめてバックアップし、cronを使って暗号化されたResticスナップショットをスケジュール設定し、稼働中のサーバーにリスクを負わせることなく復旧を検証します。

TGZエクスポートを使用してZimbra CEメールボックスをバックアップおよび復元する

TGZエクスポートを使用してZimbra CEメールボックスをバックアップおよび復元する

Zimbra Community Editionの個々のメールボックスをエクスポートし、そのTGZバックアップを検証し、既存のメールを上書きすることなく、不足しているアイテムを復元します。

OSTreeベースの不変システムとしてDebianデスクトップを構築する方法

OSTreeベースの不変システムとしてDebianデスクトップを構築する方法

システムツリーの準備、ブート統合、デプロイメントチェック、ロールバックなど、仮想マシン上でDebianベースのOSTreeデスクトップを作成およびテストする方法を学びます。

承認されたユーザーがKeycloakサインインを使用してJitsiルームを作成できるようにする

承認されたユーザーがKeycloakサインインを使用してJitsiルームを作成できるようにする

Keycloakとトークン認証を使用してJitsi Meetルームを開始できるのは承認済みのアカウントのみとし、必要に応じてゲスト参加も可能にする。

Active DirectoryユーザーをLDAP経由でONLYOFFICE DocSpaceと同期する

Active DirectoryユーザーをLDAP経由でONLYOFFICE DocSpaceと同期する

ONLYOFFICE DocSpaceをActive DirectoryまたはOpenLDAPに接続し、ユーザーとグループを安全にインポートし、アカウントフィールドをマッピングし、信頼性の高い同期をスケジュールします。