PostgreSQL existant
Bien que cela ne soit pas officiellement recommandé, il est possible d'exécuter Immich en utilisant un serveur PostgreSQL existant. Pour utiliser cette configuration, vous devez avoir un niveau de base de connaissance avec PostgreSQL et la ligne de commande Linux. Si ce n'est pas le cas, nous vous recommandons d'utiliser la configuration par défaut avec un conteneur PostgreSQL dédié.
Par défaut, Immich nécessite des permissions superutilisateur sur la base de données PostgreSQL et exige que certaines extensions soient installées. Ce guide décrit les étapes nécessaires pour préparer un serveur PostgreSQL existant à être utilisé par Immich.
Utiliser un serveur PostgreSQL existant peut débloquer des fonctionnalités administratives puissantes, notamment la réplication logique et les sauvegardes des journaux d'écriture anticipée en streaming avec des programmes comme pgBackRest ou Barman.
Prérequis
Vous devez installer pgvector
(>= 0.7.0, < 1.0.0
), car c'est un prérequis pour vchord
.
Le moyen le plus simple de faire cela sous Debian/Ubuntu est d'ajouter le dépôt Apt PostgreSQL puis d'exécuter apt install postgresql-NN-pgvector
, où NN
est votre version de PostgreSQL (par exemple, 16
).
Vous devez installer VectorChord dans votre instance de PostgreSQL en suivant leurs instructions. Après l'installation, ajoutez shared_preload_libraries = 'vchord.so'
à votre fichier postgresql.conf
. Si vous avez déjà des shared_preload_libraries
configurées, vous pouvez séparer chaque extension par une virgule. Par exemple, shared_preload_libraries = 'pg_stat_statements, vchord.so'
.
Immich est connu pour fonctionner avec les versions de PostgreSQL >= 14, < 18
.
Assurez-vous que la version installée de VectorChord est compatible avec votre version d'Immich. La plage acceptée actuelle pour VectorChord est >= 0.3.0, < 0.5.0
.
Sp écifier l'URL de connexion
Vous pouvez vous connecter à votre serveur PostgreSQL existant en définissant la variable d'environnement DB_URL
dans le fichier .env
.
DB_URL='postgresql://nomutilisateurbddimmich:motdepassebddimmich@hotepostgres:portpostgres/nomdebddimmich'
# exiger une connexion SSL à PostgreSQL
# DB_URL='postgresql://nomutilisateurbddimmich:motdepassebddimmich@hotepostgres:portpostgres/nomdebddimmich?sslmode=require'
# exiger une connexion SSL, mais sans vérifier le nom du certificat
# DB_URL='postgresql://nomutilisateurbddimmich:motdepassebddimmich@hotepostgres:portpostgres/nomdebddimmich?sslmode=require&sslmode=no-verify'
Avec permissions superutilisateur
En général, Immich attend des permissions superutilisateur sur la base de données, que vous pouvez accorder en exécutant ALTER USER <nomutilisateurbddimmich> WITH SUPERUSER;
dans la console psql
. Si vous préférez ne pas accorder de permissions superutilisateur, suivez les instructions dans la section suivante.
Sans permissions superutilisateur
Cette méthode est recommandée uniquement pour les utilisateurs avancés et nécessite souvent une intervention manuelle lors de la mise à jour d'Immich.
Actuellement, les sauvegardes automatisées nécessitent des permissions superutilisateur en raison de l'utilisation de pg_dumpall
.
Immich peut fonctionner sans permissions superutilisateur en suivant les instructions ci-dessous à l'invite psql
pour préparer la base de données.
CREATE DATABASE <nomdebddimmich>;
\c <nomdebddimmich>
BEGIN;
ALTER DATABASE <nomdebddimmich> OWNER TO <nomutilisateurbddimmich>;
CREATE EXTENSION vchord CASCADE;
CREATE EXTENSION earthdistance CASCADE;
COMMIT;
Mise à jour de VectorChord
Lors de l'installation d'une nouvelle version de VectorChord, vous devrez mettre à jour l'extension manuellement et réindexer en vous connectant à la base de données Immich et en exécutant les commandes suivantes :
ALTER EXTENSION vchord UPDATE;
REINDEX INDEX face_index;
REINDEX INDEX clip_index;
Migration vers VectorChord
VectorChord est l'extension successeur de pgvecto.rs, offrant de meilleures performances, une consommation mémoire réduite et des résultats de meilleure qualité pour la recherche intelligente et la reconnaissance faciale.
Migration depuis pgvecto.rs
Le support de pgvecto.rs sera supprimé dans une version future, nous recommandons donc à tous les utilisateurs utilisant actuellement pgvecto.rs de migrer vers VectorChord à leur convenance. Deux approches principales sont possibles pour effectuer cette migration.
La solution la plus simple consiste à avoir les deux extensions installées pendant la migration :
Étapes de migration (automatique)
- Assurez-vous que pgvecto.rs est toujours installé
- Installez
pgvector
(>= 0.7.0, < 1.0.0
). Le moyen le plus simple est d'ajouter le dépôt Apt PostgreSQL sur Debian/Ubuntu puis de lancerapt install postgresql-NN-pgvector
, oùNN
est votre version de PostgreSQL (par exemple,16
) - Installez VectorChord
- Ajoutez
shared_preload_libraries= 'vchord.so, vectors.so'
à votre fichierpostgresql.conf
, en veillant à inclure à la foisvchord.so
etvectors.so
. Vous pouvez également ajouter d'autres bibliothèques ici si nécessaire - Redémarrez la base de données PostgreSQL
- Si Immich ne dispose pas de permissions superutilisateur, exécutez la commande SQL
CREATE EXTENSION vchord CASCADE;
en utilisant psql ou le client de base de données de votre choix - Lancez Immich et attendez que les journaux
Reindexed face_index
etReindexed clip_index
soient affichés - Si Immich ne dispose pas de permissions superutilisateur, exécutez la commande SQL
DROP EXTENSION vectors;
- Supprimez l'ancien schéma avec la commande
DROP SCHEMA vectors;
- Retirez
vectors.so
de la configurationshared_preload_libraries
- Redémarrez la base de données PostgreSQL
- Désinstallez pgvecto.rs (par exemple
apt-get purge vectors-pg14
sur les environnements basés sur Debian, en remplaçantpg14
par votre version).pgvector
doit rester installé car il fournit les types de données utilisés parvchord
Si vous ne pouvez pas avoir VectorChord et pgvecto.rs installés en même temps, vous pouvez effectuer une migration plus manuelle :
Étapes de migration (manuelle)
- Tant que pgvecto.rs est encore installé, exécutez la commande SQL suivante avec psql ou le client de base de données de votre choix. Prenez note du chiffre renvoyé par cette commande, vous en aurez besoin plus tard
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;
- Supprimez les références à pgvecto.rs avec les commandes SQL suivantes
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[];
- Installez VectorChord
- Changez les colonnes en types vecteur appropriés, en remplaçant
<number>
par le chiffre obtenu à l'étape 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);
- Lancez Immich et laissez-le créer de nouveaux indices utilisant VectorChord
Migration depuis pgvector
Étapes de migration
- Assurez-vous d'avoir au moins la version 0.7.0 de pgvector installée. Si ce n'est pas le cas, mettez-la à jour et exécutez le commande SQL
ALTER EXTENSION vector UPDATE;
avec psql ou le client de base de données de votre choix - Suivez les prérequis pour installer VectorChord
- Si Immich ne dispose pas de permissions superutilisateur, exécutez la commande SQL
CREATE EXTENSION vchord CASCADE;
- Retirez la variable d'environnement
DB_VECTOR_EXTENSION=pgvector
car elle ferait qu'Immich utilise toujours pgvector - Lancez Immich et laissez-le créer de nouveaux indices à l'aide de VectorChord
Notez que VectorChord utilise lui-même les types pgvector, donc vous ne devez pas désinstaller pgvector après avoir suivi ces étapes.