메인 콘텐츠로 바로가기

백업 및 복구

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 컨테이너를 중지한 상태에서 백업을 받는 것입니다. 변경 사항이 없으면 백업은 항상 동기화 상태를 유지합니다.

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