バックアップスクリプト
Borg は、機能が豊富で重複排除機能を備えたアーカイブソフトウェアで、バージョン管理機能を内蔵しています。毎日または毎週 cron ジョブとして実行可能なテンプレートのbashスクリプトを提供しており、ファイルおよびデータベースをバックアップできます。このスクリプトを実行する前に、Borgのクイックスタートガイドを読むことをお勧めします。
このスクリプトは、サーバーに接続された2番目のハードドライブをオンサイトバックアップ用として使用し、リモートマシンへのsshアクセスを介して3番目のオフサイトバックアップを作成することを前提としています。BorgBase は、競争力のある価格体系を持つオフサイトバックアップ用の代替オプションです。必要に応じて、テンプレートスクリプトから関連する行を削除することでオフサイトバックアップを完全にスキップすることも可能です。
データベースはImmichアップロードフォルダ内のdatabase-backup
サブディレクトリに保存されます。その後、Borgによってデータベースがバックアップおよびバージョン管理されます。これにより、各スナップショットでデータベースバックアップがアセットと同期していることが保証されます。
このスクリプトは、写真/ビデオライブラリとともにデータベースをバックアップします。これは、Immichに組み込まれている自動データベースバックアップツールと冗長です。このスクリプトを使用してデータベースをバックアップすることには、組み込みのバックアップツールに対する2つの利点があります。
- このスクリプトは、複数のコピーを作成するのではなく、バックアップのバージョン管理を行うことでストレージをより効率的に使用します。
- データベースのバックアップがライブラリのバックアップと同時に実行されるため、データベースとライブラリのバックアップが常に同期していることが保証されます。
このスクリプトを使用している場合は、ストレージスペースを節約するために、管理パネルで組み込みの自動データベースバックアップを無効にするのが安全です。
前提条件
- Borgはサーバーおよびリモートマシンにインストールする必要があります。Borgのインストール方法はこちらで確認できます。
- ( オプション) このスクリプトを非rootユーザーで実行するには、あなたのユーザー名をdockerグループに追加する必要があります。
- このスクリプトを非対話的に実行する場合、サーバーからリモートマシンへのパスワードなしsshを設定してください。前の手順をスキップした場合、rootアカウントからこの手順を実行してください。
borgリポジトリを初期化するには、次のコマンドを一度だけ実行してください。
UPLOAD_LOCATION="/path/to/immich/directory" # Immichデータベースの場所 (.envファイルで設定)
BACKUP_PATH="/path/to/local/backup/directory"
mkdir "$UPLOAD_LOCATION/database-backup"
borg init --encryption=none "$BACKUP_PATH/immich-borg"
## リモートセットアップ
REMOTE_HOST="remote_host@IP"
REMOTE_BACKUP_PATH="/path/to/remote/backup/directory"
borg init --encryption=none "$REMOTE_HOST:$REMOTE_BACKUP_PATH/immich-borg"
必要に応じて以下のスクリプトを編集し、cronに追加してください。このスクリプトは、パスに:
, @
, または "
文字が含まれていないことを前提としています。これらの文字が含まれている場合、それらをエスケープまたはリネームする必要があります。
#!/bin/sh
# パス
UPLOAD_LOCATION="/path/to/immich/directory"
BACKUP_PATH="/path/to/local/backup/directory"
REMOTE_HOST="remote_host@IP"
REMOTE_BACKUP_PATH="/path/to/remote/backup/directory"
### ローカル
# Immichデータベースをバックアップ
docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=<DB_USERNAME> > "$UPLOAD_LOCATION"/database-backup/immich-database.sql
# BorgやResticなどの重複排除バックアッププログラムでは、内容を圧縮すると、重複排除が困難になりバックアップサイズが増加する可能性があります。他のプログラムを使用する場合や、それでも圧縮を希望する場合は以下のコマンドを 使用できます:
# docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=<DB_USERNAME> | /usr/bin/gzip --rsyncable > "$UPLOAD_LOCATION"/database-backup/immich-database.sql.gz
### ローカルBorgリポジトリに追加
borg create "$BACKUP_PATH/immich-borg::{now}" "$UPLOAD_LOCATION" --exclude "$UPLOAD_LOCATION"/thumbs/ --exclude "$UPLOAD_LOCATION"/encoded-video/
borg prune --keep-weekly=4 --keep-monthly=3 "$BACKUP_PATH"/immich-borg
borg compact "$BACKUP_PATH"/immich-borg
### リモートBorgリポジトリに追加
borg create "$REMOTE_HOST:$REMOTE_BACKUP_PATH/immich-borg::{now}" "$UPLOAD_LOCATION" --exclude "$UPLOAD_LOCATION"/thumbs/ --exclude "$UPLOAD_LOCATION"/encoded-video/
borg prune --keep-weekly=4 --keep-monthly=3 "$REMOTE_HOST:$REMOTE_BACKUP_PATH"/immich-borg
borg compact "$REMOTE_HOST:$REMOTE_BACKUP_PATH"/immich-borg
復元手順
バックアップから復元するには、borg mount
コマンドを使用します。
BACKUP_PATH="/path/to/local/backup/directory"
mkdir /tmp/immich-mountpoint
borg mount "$BACKUP_PATH"/immich-borg /tmp/immich-mountpoint
cd /tmp/immich-mountpoint
REMOTE_HOST="remote_host@IP"
REMOTE_BACKUP_PATH="/path/to/remote/backup/directory"
mkdir /tmp/immich-mountpoint
borg mount "$REMOTE_HOST:$REMOTE_BACKUP_PATH"/immich-borg /tmp/immich-mountpoint
cd /tmp/immich-mountpoint
利用可能なスナップショットは/tmp/immich-mountpoint
のサブディレクトリにあります。必要なファイルを復元し、borg umount /tmp/immich-mountpoint
を使用してBorgリポジトリをアンマウントしてください。