메인 콘텐츠로 바로가기

백업 및 복구

3-2-1 백업 전략을 사용하여 데이터를 보호하는 것이 좋습니다. 업로드된 사진/영상뿐만 아니라 Immich 데이터베이스의 복사본도 포함하는 포괄적인 백업 솔루션이 필요합니다. 이 페이지는 데이터베이스를 백업하고 사용자 업로드 사진 및 영상의 위치를 확인하는 방법에 대한 개요를 제공합니다. 크론 작업으로 실행할 수 있는 템플릿 bash 스크립트는 여기에서 찾을 수 있습니다.

위험

이 페이지의 지침은 Immich 인스턴스를 백업할 준비를 하는 방법과 백업해야 할 파일을 보여줍니다. 하지만 실제 백업 도구를 사용하여 스스로 백업을 수행해야 합니다.

데이터베이스​

주의

Immich는 데이터를 데이터베이스에 파일 경로로 저장하며, 라이브러리 폴더를 스캔하여 데이터를 업데이트하지 않으므로 백업이 중요합니다.

정보

Postgres 공식 문서를 참고하여 Postgres 데이터베이스 백업 및 복구에 대한 자세한 내용을 확인하십시오.

주의

DB_DATA_LOCATION 폴더를 직접 백업하는 것은 권장되지 않습니다. 데이터베이스 실행 중에 그렇게 하면 복구할 수 없는 손상된 백업이 생성될 수 있습니다.

자동 데이터베이스 덤프​

경고

자동 데이터베이스 덤프는 Postgres 데이터베이스 파일이 손상될 경우에 데이터베이스 복구에 사용할 수 있습니다. 이 덤프들을 모니터링하지 않으며 성공하지 못했을 경우 알림은 받지 않습니다.

주의

데이터베이스 덤프는 사진이나 비디오가 아닌 메타데이터만 포함합니다. 이는 아래에 나와 있는 UPLOAD_LOCATION의 다른 파일 복사본과 함께 사용될 수 있습니다.

재난 복구를 위해 Immich는 자동으로 데이터베이스 덤프를 생성합니다. 덤프는 UPLOAD_LOCATION/backups에 저장됩니다. 아래에 언급된 자산 폴더와 함께 데이터베이스의 독립적인 백업을 반드시 생성하십시오. 관리자 설정에서 데이터베이스 덤프의 일정과 유지되는 덤프 수를 조정할 수 있습니다. 기본적으로 Immich는 마지막 14개의 데이터베이스 덤프를 유지하며 매일 새벽 2시에 새 덤프를 생성합니다.

덤프 트리거​

관리자 작업 상태 페이지에서 데이터베이스 덤프를 트리거할 수 있습니다. 페이지를 방문하여 오른쪽 상단에서 "작업 생성" 모달을 열고 "데이터베이스 덤프 생성"을 선택한 후 "확인"을 클릭합니다. 작업이 실행되며 덤프가 트리거됩니다. 로그 또는 backups/ 폴더를 확인하여 올바르게 작동했는지 확인할 수 있습니다. 이 덤프들은 설정에 따라 유지되는 X 개의 마지막 덤프에 포함됩니다.

복구​

향후 버전에서 복구를 간소화하기를 희망하며, 현재는 호스트의 UPLOAD_LOCATION/backups 폴더에서 데이터베이스 덤프를 찾을 수 있습니다. 그런 다음 아래 섹션의 단계에 따라 데이터베이스를 복구하십시오.

수동 백업 및 복구​

백업
docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=<DB_USERNAME> | gzip > "/path/to/backup/dump.sql.gz"
복구
docker compose down -v  # 경고! 처음부터 시작하기 위해 Immich 데이터를 모두 삭제합니다.
## 다음 줄의 주석을 제거하고 DB_DATA_LOCATION을 사용자의 Postgres 경로로 대체하여 Postgres 데이터베이스를 영구적으로 재설정하십시오.
# rm -rf DB_DATA_LOCATION # 경고! 처음부터 시작하기 위해 Immich 데이터를 모두 삭제합니다.
docker compose pull # Immich 최신 버전으로 업데이트 (원하는 경우)
docker compose create # Immich 앱을 실행하지 않고 Docker 컨테이너 생성
docker start immich_postgres # Postgres 서버 시작
sleep 10 # Postgres 서버가 시작될 때까지 기다림
# 데이터베이스 사용자가 기본값에서 벗어난 경우 확인하십시오.
gunzip --stdout "/path/to/backup/dump.sql.gz" \
| sed "s/SELECT pg_catalog.set_config('search_path', '', false);/SELECT pg_catalog.set_config('search_path', 'public, pg_catalog', true);/g" \
| docker exec -i immich_postgres psql --dbname=postgres --username=<DB_USERNAME> # 백업 복원
docker compose up -d # Immich 앱의 나머지를 시작

데이터베이스 복구가 제대로 진행되려면 완전히 새로 설치된 상태(즉, Docker 컨테이너 생성 이후 Immich 서버가 실행된 적이 없음)가 필요합니다. Immich 앱이 실행되었다면 데이터베이스 복구 중 Postgres 충돌(관계가 이미 존재함, 외래 키 제약 조건 위반, 여러 기본 키 등)이 발생할 수 있으며 이런 경우에는 DB_DATA_LOCATION 폴더를 삭제하여 데이터베이스를 초기화해야 합니다.

팁

일부 배포 방식에서는 데이터베이스를 시작하지 않고 서버를 시작하는 것이 어려울 수 있습니다. 이러한 경우에는 서비스를 시작하기 전에 환경 변수 DB_SKIP_MIGRATIONS=true를 설정할 수 있습니다. 이는 복구 프로세스에 영향을 미치는 서버 이주 작업을 방지합니다. 데이터베이스 복구 후에는 이 변수를 제거하고 서비스를 다시 시작해야 합니다.

파일 시스템​

Immich는 파일 시스템에 두 가지 유형의 콘텐츠를 저장합니다: (a) 원본 자산(사진과 동영상), 그리고 (b) 생성된 콘텐츠. UPLOAD_LOCATION 전체 내용을 백업하는 것이 좋지만, 다음 폴더에 저장된 원본 콘텐츠만이 중요합니다:

  1. UPLOAD_LOCATION/library
  2. UPLOAD_LOCATION/upload
  3. UPLOAD_LOCATION/profile

이 폴더만 백업하기로 선택하면 백업에서 복원한 후 모든 자산에 대해 트랜스코딩과 썸네일 생성 작업을 다시 실행해야 합니다.

주의

이러한 폴더 중 일부를 profile/처럼 다른 저장 장치로 이동했으면, 백업 경로를 설정에 맞게 조정했는지 확인하십시오.

자산 유형 및 저장 위치​

일부 저장 위치는 Storage Template의 영향을 받습니다. 자세한 내용은 아래를 참조하십시오.

참고

UPLOAD_LOCATION/library 폴더는 버전 1.92.0을 실행하는 새 머신에서 기본적으로 사용되지 않습니다. 시스템 관리자가 Storage Template 엔진을 활성화한 경우에만 사용됩니다. 자세한 내용은 릴리스 노트를 참조하십시오.

1. 사용자별 폴더:

  • 각 사용자는 고유한 문자열로 식별됩니다.
  • 설정 -> 계정 -> 사용자 ID에서 사용자 ID를 확인할 수 있습니다.

2. 자산 유형 및 저장 위치:

  • 원본 자산:

    • 브라우저 인터페이스, 모바일 및 CLI를 통해 업로드된 원본 자산.
    • UPLOAD_LOCATION/upload/<userID>에 저장.
  • 아바타 이미지:

    • 사용자 프로필 이미지.
    • UPLOAD_LOCATION/profile/<userID>에 저장.
  • 썸네일 이미지:

    • 각 자산의 소형 및 대형 썸네일과 인식된 얼굴의 썸네일.
    • UPLOAD_LOCATION/thumbs/<userID>에 저장.
  • 인코딩된 자산:

    • 보다 넓은 호환성을 위해 원본에서 재인코딩된 비디오.
    • 원본은 삭제되지 않음.
    • UPLOAD_LOCATION/encoded-video/<userID>에 저장.
  • Postgres

    • Immich 데이터베이스는 시스템이 제대로 작동할 수 있도록 필요한 모든 정보를 포함. 참고: 이 폴더는 v1.102.0에서 언급된 변경사항을 수행한 사용자(선택 사항이며 필수는 아님) 또는 이 버전에서 시작한 사용자에게만 나타남.
    • DB_DATA_LOCATION에 저장.
    위험

    이 폴더의 백업은 데이터베이스 백업을 의미하지 않습니다! 적절한 백업을 수행하는 방법은 여기에 명시된 지침을 따르십시오.

위험

백업을 제외하고는 어떠한 상황에서도 이 폴더 내부의 파일을 수정하지 마십시오. 에셋 변경이나 제거는 추적되지 않거나 누락된 파일을 초래할 수 있습니다. 이를 이름을 말할 수 없는 앱 처럼 생각할 수 있습니다. 에셋 조회, 변경 및 삭제는 모바일 혹은 브라우저 인터페이스를 통해서만 가능합니다.

백업 순서​

Immich의 백업은 데이터베이스와 에셋 파일을 모두 포함해야 합니다. 이를 백업할 때 동기화가 맞지 않을 수 있어 복원 후 에셋이 손상될 가능성이 있습니다. 이를 방지하는 가장 좋은 방법은 immich-server 컨테이너를 중지한 상태에서 백업을 받는 것입니다. 변경 사항이 없으면 백업은 항상 동기화 상태를 유지합니다.

컨테이너를 중지할 수 없는 상황이라면, 데이터베이스를 먼저 백업하고 파일 시스템을 두 번째로 백업하는 것이 권장됩니다. 이렇게 하면 최악의 경우 데이터베이스가 파일 시스템에 대해 알지 못하는 파일이 존재하는 상황이 됩니다. 필요한 경우 복원 후 이 파일들은 수동으로 (재)업로드할 수 있습니다. 반대로 파일 시스템을 먼저 백업하고 데이터베이스를 두 번째로 백업하면, 복원된 데이터베이스가 파일 시스템 백업에 없는 파일을 참조해 손상된 에셋이 발생할 수 있습니다.