메인 콘텐츠로 바로가기

백업 스크립트

Borg는 버전 관리가 내장된 중복 제거 아카이빙 소프트웨어입니다. 우리는 cron 작업으로 매일/주간 실행할 수 있는 템플릿 bash 스크립트를 제공하여 파일과 데이터베이스를 백업할 수 있습니다. 이 스크립트를 실행하기 전에 Borg의 빠른 시작 가이드를 읽는 것을 권장합니다.

이 스크립트는 두 번째 하드 드라이브를 서버에 연결하여 온사이트 백업을 수행하고 SSH를 통해 원격 머신에 접속하여 세 번째 오프사이트 복사본을 준비하는 것을 전제로 합니다. BorgBase는 경쟁력 있는 가격 구조로 오프사이트 백업을 제공하는 대안 옵션입니다. 템플릿 스크립트에서 관련 라인을 제거하여 오프사이트 백업을 완전히 생략할 수도 있습니다.

데이터베이스는 Immich 업로드 폴더의 database-backup 하위 디렉토리에 저장됩니다. 그런 다음 데이터베이스는 Borg를 통해 자산과 함께 백업되고 버전 관리됩니다. 이것은 매 스냅샷에 데이터베이스 백업이 자산과 동기화되도록 보장합니다.

정보

이 스크립트는 데이터베이스와 사진/비디오 라이브러리를 함께 백업합니다. 이는 Immich에 내장된 자동 데이터베이스 백업 도구와 중복될 수 있습니다. 이 스크립트를 사용하여 데이터베이스를 백업하는 것은 다음과 같은 두 가지 장점을 가지고 있습니다:

  • 이 스크립트는 여러 복사본을 만들지 않고 백업의 버전 관리 기능을 사용하여 저장 공간을 더 효율적으로 사용합니다.
  • 데이터베이스 백업은 라이브러리 백업과 동시에 수행되어 데이터베이스와 라이브러리가 항상 동기화된 상태를 유지합니다.

따라서 이 스크립트를 사용하는 경우 관리 패널에서 내장된 자동 데이터베이스 백업 기능을 꺼서 저장 공간을 절약해도 안전합니다.

사전 필요 조건

  • Borg는 서버와 원격 머신에 설치되어야 합니다. Borg 설치 지침은 여기에서 확인할 수 있습니다.
  • (선택 사항) 루트 계정이 아닌 사용자 계정으로 이 스크립트를 실행하려면 사용자 이름을 Docker 그룹에 추가해야 합니다.
  • 이 스크립트를 비대화형으로 실행하려면 서버에서 원격 머신으로 암호 없는 SSH를 설정하세요. 이전 단계를 건너뛴 경우 루트 계정에서 이 단계를 수행해야 합니다.

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"

필요에 따라 다음 스크립트를 편집하여 크론탭(crontab)에 추가하세요. 이 스크립트는 경로에 :, @, 또는 " 문자가 없다는 것을 가정합니다. 이러한 문자가 있으면 경로를 이스케이프하거나 이름을 변경해야 합니다.

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와 같은 중복 제거 백업 프로그램의 경우 콘텐츠를 압축하면 중복 제거가 어려워 백업 크기가 커질 수 있습니다. 일반 백업 프로그램을 사용하거나 압축을 선호한다면 다음 명령어를 대신 사용할 수 있습니다:
# 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 저장소의 마운트를 해제하세요.