メインコンテンツにスキップ

バックアップスクリプト

Borg は、機能が豊富で重複排除機能を備えたアーカイブソフトウェアで、バージョン管理機能を内蔵しています。毎日または毎週 cron ジョブとして実行可能なテンプレートのbashスクリプトを提供しており、ファイルおよびデータベースをバックアップできます。このスクリプトを実行する前に、Borgのクイックスタートガイドを読むことをお勧めします。

このスクリプトは、サーバーに接続された2番目のハードドライブをオンサイトバックアップ用として使用し、リモートマシンへのsshアクセスを介して3番目のオフサイトバックアップを作成することを前提としています。BorgBase は、競争力のある価格体系を持つオフサイトバックアップ用の代替オプションです。必要に応じて、テンプレートスクリプトから関連する行を削除することでオフサイトバックアップを完全にスキップすることも可能です。

データベースはImmichアップロードフォルダ内のdatabase-backupサブディレクトリに保存されます。その後、Borgによってデータベースがバックアップおよびバージョン管理されます。これにより、各スナップショットでデータベースバックアップがアセットと同期していることが保証されます。

情報

このスクリプトは、写真/ビデオライブラリとともにデータベースをバックアップします。これは、Immichに組み込まれている自動データベースバックアップツールと冗長です。このスクリプトを使用してデータベースをバックアップすることには、組み込みのバックアップツールに対する2つの利点があります。

  • このスクリプトは、複数のコピーを作成するのではなく、バックアップのバージョン管理を行うことでストレージをより効率的に使用します。
  • データベースのバックアップがライブラリのバックアップと同時に実行されるため、データベースとライブラリのバックアップが常に同期していることが保証されます。

このスクリプトを使用している場合は、ストレージスペースを節約するために、管理パネルで組み込みの自動データベースバックアップを無効にするのが安全です。

前提条件

  • Borgはサーバーおよびリモートマシンにインストールする必要があります。Borgのインストール方法はこちらで確認できます。
  • (オプション) このスクリプトを非rootユーザーで実行するには、あなたのユーザー名をdockerグループに追加する必要があります。
  • このスクリプトを非対話的に実行する場合、サーバーからリモートマシンへのパスワードなしsshを設定してください。前の手順をスキップした場合、rootアカウントからこの手順を実行してください。

borgリポジトリを初期化するには、次のコマンドを一度だけ実行してください。

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に追加してください。このスクリプトは、パスに:, @, または " 文字が含まれていないことを前提としています。これらの文字が含まれている場合、それらをエスケープまたはリネームする必要があります。

Borgバックアップテンプレート
#!/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リポジトリをアンマウントしてください。