Postgres Pré-existente
Embora não seja oficialmente recomendado, é possível executar o Immich usando um servidor Postgres pré-existente. Para usar esta configuração, você deve ter um nível básico de familiaridade com Postgres e a linha de comando do Linux. Se você não possuir esses conhecimentos, recomendamos usar a configuração padrão com um contêiner Postgres dedicado.
Por padrão, o Immich espera permissões de superusuário no banco de dados Postgres e requer que certas extensões sejam instaladas. Este guia descreve os passos necessários para preparar um servidor Postgres pré-existente para ser usado pelo Immich.
Executar com um servidor Postgres pré-existente pode desbloquear recursos administrativos poderosos, incluindo replicação lógica e backups em log de reescrita streaming usando programas como pgBackRest ou Barman.
Pré-requisitos
Você deve instalar pgvector
(>= 0.7.0, < 1.0.0
), pois é um pré-requisito para o vchord
.
A maneira mais fácil de fazer isso no Debian/Ubuntu é adicionando o repositório Apt do PostgreSQL e então
executando apt install postgresql-NN-pgvector
, onde NN
é sua versão do Postgres (por exemplo, 16
).
Você deve instalar o VectorChord na sua instância do Postgres usando as instruções deles. Após a instalação, adicione shared_preload_libraries = 'vchord.so'
ao seu postgresql.conf
. Se você já tiver algumas shared_preload_libraries
configuradas, pode separar cada extensão com uma vírgula. Por exemplo, shared_preload_libraries = 'pg_stat_statements, vchord.so'
.
O Immich é conhecido por funcionar com versões do Postgres >= 14, < 18
.
Certifique-se de que a versão instalada do VectorChord é compatível com sua versão do Immich. O intervalo atual aceito para o VectorChord é >= 0.3.0, < 0.5.0
.
Especificando a URL de conexão
Você pode se conectar ao seu servidor Postgres pré-existente configurando a variável de ambiente DB_URL
no arquivo .env
.
DB_URL='postgresql://immichdbusername:immichdbpassword@postgreshost:postgresport/immichdatabasename'
# requer uma conexão SSL com o Postgres
# DB_URL='postgresql://immichdbusername:immichdbpassword@postgreshost:postgresport/immichdatabasename?sslmode=require'
# requer uma conexão SSL, mas não força a verificação do nome do certificado
# DB_URL='postgresql://immichdbusername:immichdbpassword@postgreshost:postgresport/immichdatabasename?sslmode=require&sslmode=no-verify'
Com permissão de superusuário
Normalmente, o Immich espera permissões de superusuário no banco de dados, que você pode conceder executando ALTER USER <immichdbusername> WITH SUPERUSER;
no console psql
. Se preferir não conceder permissões de superusuário, siga as instruções na próxima seção.
Sem permissão de superusuário
Este método é recomendado apenas para usuários avançados e frequentemente requer intervenção manual ao atualizar o Immich.
Atualmente, os backups automatizados exigem permissão de superusuário devido ao uso de pg_dumpall
.
O Immich pode ser executado sem permissões de superusuário seguindo as instruções abaixo no prompt do psql
para preparar o banco de dados.
CREATE DATABASE <immichdatabasename>;
\c <immichdatabasename>
BEGIN;
ALTER DATABASE <immichdatabasename> OWNER TO <immichdbusername>;
CREATE EXTENSION vchord CASCADE;
CREATE EXTENSION earthdistance CASCADE;
COMMIT;
Atualizando VectorChord
Ao instalar uma nova versão do VectorChord, você precisará atualizar manualmente a extensão e recriar os índices conectando-se ao banco de dados Immich e executando:
ALTER EXTENSION vchord UPDATE;
REINDEX INDEX face_index;
REINDEX INDEX clip_index;
Migrando para VectorChord
O VectorChord é a extensão sucessora do pgvecto.rs, permitindo maior desempenho, menor uso de memória e resultados de maior qualidade para pesquisa inteligente e reconhecimento facial.
Migrando de pgvecto.rs
O suporte ao pgvecto.rs será descontinuado em uma versão futura. Por isso, recomendamos que todos os usuários que atualmente usam o pgvecto.rs migrem para o VectorChord quando for conveniente. Existem duas abordagens principais para isso.
A opção mais fácil é ter ambas as extensões instaladas durante a migração:
Passos para migração (automática)
- Certifique-se de ainda ter o pgvecto.rs instalado
- Instale
pgvector
(>= 0.7.0, < 1.0.0
). A maneira mais fácil de fazer isso no Debian/Ubuntu é adicionando o repositório Apt do PostgreSQL e então executandoapt install postgresql-NN-pgvector
, ondeNN
é sua versão do Postgres (por exemplo,16
) - Instale o VectorChord
- Adicione
shared_preload_libraries= 'vchord.so, vectors.so'
ao seupostgresql.conf
, certificando-se de incluir ambosvchord.so
evectors.so
. Você também pode incluir outras bibliotecas aqui, se necessário - Reinicie o banco de dados Postgres
- Se o Immich não tiver permissões de superusuário, execute o comando SQL
CREATE EXTENSION vchord CASCADE;
usando o psql ou o cliente de banco de dados de sua escolha - Inicie o Immich e aguarde os logs
Reindexed face_index
eReindexed clip_index
serem exibidos - Se o Immich não tiver permissões de superusuário, execute o comando SQL
DROP EXTENSION vectors;
- Elimine o esquema antigo executando
DROP SCHEMA vectors;
- Remova a entrada
vectors.so
da configuraçãoshared_preload_libraries
- Reinicie o banco de dados Postgres
- Desinstale o pgvecto.rs (por exemplo,
apt-get purge vectors-pg14
em ambientes baseados em Debian, substituindopg14
conforme necessário). Opgvector
deve permanecer instalado, pois fornece os tipos de dados usados pelovchord
Se não for possível ter o VectorChord e o pgvecto.rs instalados ao mesmo tempo, você pode realizar a migração com mais etapas manuais:
Passos para migração (manual)
- Enquanto o pgvecto.rs ainda estiver instalado, execute o seguinte comando SQL usando o psql ou o cliente de banco de dados de sua escolha. Anote o número fornecido por este comando, pois você precisará dele mais tarde
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;
- Remova as referências ao pgvecto.rs usando os comandos SQL abaixo
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[];
- Instale o VectorChord
- Mude as colunas de volta para os tipos de vetor apropriados, substituindo
<number>
pelo número da etapa 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);
- Inicie o Immich e deixe-o criar novos índices usando o VectorChord
Migrando de pgvector
Passos para migração
- Certifique-se de ter pelo menos a versão 0.7.0 do pgvector instalada. Se for uma versão inferior, atualize e execute o comando SQL
ALTER EXTENSION vector UPDATE;
usando o psql ou o cliente de banco de dados de sua escolha - Siga os Pré-requisitos para instalar o VectorChord
- Se o Immich não tiver permissões de superusuário, execute o comando SQL
CREATE EXTENSION vchord CASCADE;
- Remova a variável ambiental
DB_VECTOR_EXTENSION=pgvector
, pois ela fará com que o Immich continue usando o pgvector se configurada - Inicie o Immich e deixe-o criar novos índices usando o VectorChord
Observe que o próprio VectorChord usa tipos do pgvector, então você não deve desinstalar o pgvector após seguir essas etapas.