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.soevectors.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_indexeReindexed clip_indexserem 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.soda configuraçãoshared_preload_libraries - Reinicie o banco de dados Postgres
- Desinstale o pgvecto.rs (por exemplo,
apt-get purge vectors-pg14em ambientes baseados em Debian, substituindopg14conforme necessário). Opgvectordeve 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.