기존 Postgres
공식적으로 권장하지는 않지만, 기존 Postgres 서버를 사용하여 Immich를 실행할 수 있습니다. 이 설정을 사용하려면 Postgres와 Linux 명령줄에 대한 기본적인 이해가 필요합니다. 이러한 지식이 없는 경우, 전용 Postgres 컨테이너를 사용하는 기본 설정을 권장합니다.
기본적으로 Immich는 Postgres 데이터베이스에서 슈퍼유저 권한을 기대하며 특정 확장이 설치되어야 합니다. 이 안내서는 Immich에 의해 사용될 기존 Postgres 서버를 준비하는 데 필요한 절차를 설명합니다.
기존 Postgres 서버를 사용하면 논리적 복제 및 pgBackRest 또는 Barman과 같은 프로그램을 사용하는 스트리밍 WAL 백업과 같은 강력한 관리 기능을 활용할 수 있습니다.
사전 조건
pgvector
(>= 0.7.0, < 1.0.0
)를 설치해야 하며, 이는 vchord
의 사전 요구 사항입니다.
Debian/Ubuntu에서 이 작업을 수행하는 가장 쉬운 방법은 PostgreSQL Apt 저장소를 추가한 다음
apt install postgresql-NN-pgvector
를 실행하는 것입니다(여기서 NN
은 Postgres 버전, 예: 16
).
Postgres의 인스턴스에 VectorChord를 설치하고 설치 지침에 따라야 합니다. 설치 후 postgresql.conf
에 shared_preload_libraries = 'vchord.so'
를 추가하십시오. 이전에 shared_preload_libraries
가 설정되어 있다면 각 확장을 쉼표로 구분하여 추가할 수 있습니다. 예를 들어, shared_preload_libraries = 'pg_stat_statements, vchord.so'
.
Immich는 Postgres 버전 >= 14, < 18
에서 작동하는 것으로 알려져 있습니다.
설치된 VectorChord 버전이 Immich 버전과 호환되는지 확인하십시오. VectorChord의 현재 허용 범위는 >= 0.3.0, < 0.5.0
입니다.
연결 URL 지정
.env
파일의 DB_URL
환경 변수를 설정하여 기존 Postgres 서버에 연결할 수 있습니다.
DB_URL='postgresql://immichdbusername:immichdbpassword@postgreshost:postgresport/immichdatabasename'
# Postgres에 SSL 연결 요구
# DB_URL='postgresql://immichdbusername:immichdbpassword@postgreshost:postgresport/immichdatabasename?sslmode=require'
# SSL 연결 요구, 그러나 인증서 이름 확인은 보장하지 않음
# DB_URL='postgresql://immichdbusername:immichdbpassword@postgreshost:postgresport/immichdatabasename?sslmode=require&sslmode=no-verify'
슈퍼유저 권한과 함께
일반적으로 Immich는 데이터베이스에서 슈퍼유저 권한을 기대하 며, 이를 psql
콘솔에서 ALTER USER <immichdbusername> WITH SUPERUSER;
명령을 실행하여 부여할 수 있습니다. 슈퍼유저 권한을 부여하지 않는 것을 선호하는 경우 다음 섹션의 지침을 따르십시오.
슈퍼유저 권한 없이
이 방법은 고급 사용자만을 대상으로 하며 Immich를 업데이트할 때 수동 개입이 요구되는 경우가 많습니다.
현재 자동 백업은 pg_dumpall
사용으로 인해 슈퍼유저 권한이 필요합니다.
아래 지침을 psql
프롬프트에서 따라 데이터베이스를 준비하면 Immich는 슈퍼유저 권한 없이 실행할 수 있습니다.
CREATE DATABASE <immichdatabasename>;
\c <immichdatabasename>
BEGIN;
ALTER DATABASE <immichdatabasename> OWNER TO <immichdbusername>;
CREATE EXTENSION vchord CASCADE;
CREATE EXTENSION earthdistance CASCADE;
COMMIT;
VectorChord 업데이트
새로운 버전의 VectorChord를 설치할 때 Immich 데이터베이스에 연결하여 아래 명령을 실행함으로써 확장을 수동으로 업데이트하고 다시 인덱싱해야 합니다.
ALTER EXTENSION vchord UPDATE;
REINDEX INDEX face_index;
REINDEX INDEX clip_index;
VectorChord로의 마이그레이션
VectorChord는 pgvecto.rs의 후속 확장으로 더 높은 성능, 더 낮은 메모리 사용량 및 스마트 검색 및 얼굴 인식을 위한 더 높은 품질의 결과를 제공합니다.
pgvecto.rs에서 마이그레이션
pgvecto.rs 지원은 향후 릴리스에서 제거될 예정이므로, 현재 pgvecto.rs를 사용하는 모든 사용자에게 가능한 한 빨리 VectorChord로 마이그레이션할 것을 권장합니다. 이를 수행하는 두 가지 주요 접근 방식이 있습니다.
가장 쉬운 방법은 마이그레이션 동안 두 확장이 모두 설치되도록 하는 것입니다:
마이그레이션 단계 (자동)
- pgvecto.rs가 여전히 설치되어 있는지 확인
pgvector
(>= 0.7.0, < 1.0.0
)을 설치합니다. 가장 쉬운 방법은 Debian/Ubuntu에서 PostgreSQL Apt 저장소를 추가한 후apt install postgresql-NN-pgvector
를 실행하는 것입니다(여기서NN
은 Postgres 버전, 예:16
)- VectorChord 설치
postgresql.conf
에shared_preload_libraries= 'vchord.so, vectors.so'
를 추가하여 두 개 모두vchord.so
와vectors.so
가 포함되도록 합니다. 다른 라이브러리가 필요하다면 여기에 포함시킬 수도 있습니다- Postgres 데이터베이스를 재시작
- Immich에 슈퍼유저 권한이 없는 경우, SQL 명령
CREATE EXTENSION vchord CASCADE;
를 psql 또는 데이터베이스 클라이언트를 통해 실행 - Immich를 시작하고 로그
Reindexed face_index
와Reindexed clip_index
가 출력될 때까지 기다림 - Immich에 슈퍼유저 권한이 없는 경우, SQL 명령
DROP EXTENSION vectors;
를 실행 DROP SCHEMA vectors;
를 실행하여 이전 스키마를 제거shared_preload_libraries
설정에서vectors.so
항목을 제거- Postgres 데이터베이스를 재시작
- pgvecto.rs를 제거 (예: Debian 기반 환경에서
apt-get purge vectors-pg14
) 이 때 적절한pg14
를 변경.pgvector
는vchord
에서 사용하는 데이터 유형을 제공하므로 설치 상태를 유지해야 합니다
VectorChord와 pgvecto.rs를 동시에 설치할 수 없는 경우 아래와 같이 더 수동적인 단계로 마이그레이션을 수행할 수 있습니다.
마이그레이션 단계 (수동)
- pgvecto.rs가 여전히 설치되어 있는 동안, psql 또는 데이터베이스 클라이언트를 통해 아래 SQL 명령을 실행하십시오. 나중에 필요하니 출력된 숫자를 기록해 두십시오
SELECT atttypmod as dimsize
FROM pg_attribute f
JOIN pg_class c ON c.oid = f.attrelid
WHERE c.relkind = 'r'::char
AND f.attnum > 0
AND c.relname = 'smart_search'::text
AND f.attname = 'embedding'::text;
- 아래 SQL 명령을 사용하여 pgvecto.rs에 대한 참조를 제거
DROP INDEX IF EXISTS clip_index;
DROP INDEX IF EXISTS face_index;
ALTER TABLE smart_search ALTER COLUMN embedding SET DATA TYPE real[];
ALTER TABLE face_search ALTER COLUMN embedding SET DATA TYPE real[];
- VectorChord 설치
- 적절한 벡터 유형으로 열을 다시 변경, 여 기서
<number>
는 1단계에서 얻은 숫자로 대체
CREATE EXTENSION IF NOT EXISTS vchord CASCADE;
ALTER TABLE smart_search ALTER COLUMN embedding SET DATA TYPE vector(<number>);
ALTER TABLE face_search ALTER COLUMN embedding SET DATA TYPE vector(512);
- Immich를 시작하여 VectorChord를 사용하여 새 인덱스를 생성
pgvector에서 마이그레이션
마이그레이션 단계
- 최소 0.7.0 버전의 pgvector가 설치되어 있는지 확인. 버전이 낮다면 업그레이드하고 psql 또는 데이터베이스 클라이언트를 통해 SQL 명령
ALTER EXTENSION vector UPDATE;
를 실행 - VectorChord 설치를 위한 사전 조건을 따름
- Immich에 슈퍼유저 권한이 없는 경우, SQL 명령
CREATE EXTENSION vchord CASCADE;
를 실행 - 환경 변수
DB_VECTOR_EXTENSION=pgvector
를 제거. 이를 설정하면 Immich가 여전히 pgvector를 사용하므로 제거해야 함 - Immich를 시작하여 VectorChord를 사용하여 새 인덱스를 생성
VectorChord 자체가 pgvector 타입을 사용하므로 이 단계를 완료한 후에도 pgvector를 제거해서는 안 됩니다.