Vorhandenes Postgres
Obwohl es nicht offiziell empfohlen wird, ist es möglich, Immich mit einem vorhandenen Postgres-Server auszuführen. Für diese Konfiguration sollten Sie über grundlegende Kenntnisse in Postgres und der Linux-Befehlszeile verfügen. Falls Sie diese nicht haben, empfehlen wir die Verwendung der Standardkonfiguration mit einem dedizierten Postgres-Container.
Standardmäßig erwartet Immich Superuser-Rechte auf der Postgres-Datenbank und verlangt, dass bestimmte Erweiterungen installiert sind. Diese Anleitung beschreibt die Schritte, die erforderlich sind, um einen vorhandenen Postgres-Server für die Nutzung durch Immich vorzubereiten.
Die Verwendung eines vorhandenen Postgres-Servers kann leistungsstarke Administrationsfunktionen freischalten, darunter logische Replikation und Streaming-Backups des Write-Ahead-Logs mithilfe von Programmen wie pgBackRest oder Barman.
Voraussetzungen
Sie müssen pgvector
(>= 0.7.0, < 1.0.0
) installieren, da es eine Voraussetzung für vchord
ist.
Der einfachste Weg auf Debian/Ubuntu besteht darin, das PostgreSQL Apt-Repository hinzuzufügen und anschließend
apt install postgresql-NN-pgvector
auszuführen, wobei NN
Ihre Postgres-Version ist (z. B. 16
).
Sie müssen VectorChord in Ihrer Postgres-Instanz basierend auf deren Anleitung installieren. Nach der Installation fügen Sie shared_preload_libraries = 'vchord.so'
zu Ihrer postgresql.conf
hinzu. Wenn bereits einige shared_preload_libraries
gesetzt sind, können Sie jede Erweiterung mit einem Komma trennen. Zum Beispiel: shared_preload_libraries = 'pg_stat_statements, vchord.so'
.
Immich funktioniert nachweislich mit Postgres-Versionen >= 14, < 18
.
Stellen Sie sicher, dass die installierte Version von VectorChord mit Ihrer Version von Immich kompatibel ist. Der derzeit akzeptierte Bereich für VectorChord liegt bei >= 0.3.0, < 0.5.0
.
Verbindung-URL angeben
Sie können eine Verbindung zu Ihrem vorhandenen Postgres-Server herstellen, indem Sie die Umgebungsvariable DB_URL
in der Datei .env
festlegen.
DB_URL='postgresql://immichdbusername:immichdbpassword@postgreshost:postgresport/immichdatabasename'
# SSL-Verbindung zu Postgres erforderlich
# DB_URL='postgresql://immichdbusername:immichdbpassword@postgreshost:postgresport/immichdatabasename?sslmode=require'
# SSL-Verbindung erforderlich, jedoch ohne Überprüfung des Zertifikatsnamens
# DB_URL='postgresql://immichdbusername:immichdbpassword@postgreshost:postgresport/immichdatabasename?sslmode=require&sslmode=no-verify'
Mit Superuser-Rechten
Normalerweise erwartet Immich Superuser-Rechte für die Datenbank, die Sie gewähren können, indem Sie ALTER USER <immichdbusername> WITH SUPERUSER;
in der psql
-Konsole ausführen. Wenn Sie die Vergabe von Superuser-Rechten vermeiden möchten, folgen Sie den Anweisungen im nächsten Abschnitt.
Ohne Superuser-Rechte
Diese Methode wird nur fortgeschrittenen Benutzern empfohlen und erfordert häufig manuellen Eingriff bei der Aktualisierung von Immich.
Derzeit erfordern automatische Backups Superuser-Rechte aufgrund der Verwendung von pg_dumpall
.
Immich kann ohne Superuser-Rechte ausgeführt werden, indem die unten stehenden Anweisungen an der psql
-Eingabeaufforderung befolgt werden, um die Datenbank vorzubereiten.
CREATE DATABASE <immichdatabasename>;
\c <immichdatabasename>
BEGIN;
ALTER DATABASE <immichdatabasename> OWNER TO <immichdbusername>;
CREATE EXTENSION vchord CASCADE;
CREATE EXTENSION earthdistance CASCADE;
COMMIT;
VectorChord aktualisieren
Beim Installieren einer neuen Version von VectorChord müssen Sie die Erweiterung manuell aktualisieren und neu indizieren, indem Sie sich mit der Immich-Datenbank verbinden und folgendes ausführen:
ALTER EXTENSION vchord UPDATE;
REINDEX INDEX face_index;
REINDEX INDEX clip_index;
Migration zu VectorChord
VectorChord ist die Nachfolgeverweiterung von pgvecto.rs und ermöglicht höhere Leistung, niedrigeren Speicherverbrauch und qualitativ hochwertigere Ergebnisse für intelligente Suche und Gesichtserkennung.
Migration von pgvecto.rs
Die Unterstützung für pgvecto.rs wird in einer späteren Version eingestellt, daher empfehlen wir allen Benutzern, die derzeit pgvecto.rs verwenden, zu VectorChord zu wechseln, sobald es möglich ist. Es gibt zwei Hauptansätze dafür.
Die einfachste Option besteht darin, beide Erweiterungen während der Migration installiert zu haben:
Migrationsschritte (automatisch)
- Stellen Sie sicher, dass pgvecto.rs weiterhin installiert ist
- Installieren Sie
pgvector
(>= 0.7.0, < 1.0.0
). Der einfachste Weg dazu ist unter Debian/Ubuntu die Hinzufügung des PostgreSQL Apt-Repositories und anschließend die Ausführung vonapt install postgresql-NN-pgvector
, wobeiNN
Ihre Postgres-Version ist (z. B.16
) - VectorChord installieren
- Fügen Sie
shared_preload_libraries= 'vchord.so, vectors.so'
zu Ihrerpostgresql.conf
hinzu und stellen Sie sicher, dass beidevchord.so
undvectors.so
enthalten sind. Bei Bedarf können hier auch andere Bibliotheken hinzugefügt werden - Starten Sie die Postgres-Datenbank neu
- Falls Immich keine Superuser-Rechte hat, führen Sie den SQL-Befehl
CREATE EXTENSION vchord CASCADE;
aus, indem Sie psql oder Ihren bevorzugten Datenbank-Client verwenden - Starten Sie Immich und warten Sie, bis die Logs
Reindexed face_index
undReindexed clip_index
ausgegeben werden - Falls Immich keine Superuser-Rechte hat, führen Sie den SQL-Befehl
DROP EXTENSION vectors;
aus - Löschen Sie das alte Schema durch Ausführen von
DROP SCHEMA vectors;
- Entfernen Sie den Eintrag
vectors.so
aus der Einstellungshared_preload_libraries
- Starten Sie die Postgres-Datenbank neu
- Deinstallieren Sie pgvecto.rs (z. B.
apt-get purge vectors-pg14
auf Debian-basierten Systemen, wobeipg14
entsprechend angepasst wird).pgvector
muss weiterhin installiert bleiben, da es die Datentypen bereitstellt, die vonvchord
verwendet werden
Falls es nicht möglich ist, VectorChord und pgvecto.rs gleichzeitig installiert zu haben, können Sie die Migration mit mehr manuellen Schritten durchführen:
Migrationsschritte (manuell)
- Während pgvecto.rs noch installiert ist, führen Sie den folgenden SQL-Befehl mithilfe von psql oder einem bevorzugten Datenbank-Client aus. Merken Sie sich die durch diesen Befehl ausgegebene Zahl, da Sie sie später benötigen
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;
- Entfernen Sie Verweise auf pgvecto.rs mithilfe der untenstehenden SQL-Befehle
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 installieren
- Ändern Sie die Spalten zurück in die entsprechenden Vektortypen und ersetzen Sie
<number>
durch die Zahl aus Schritt 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);
- Starten Sie Immich und lassen Sie es neue Indizes mithilfe von VectorChord erstellen
Migration von pgvector
Migrationsschritte
- Stellen Sie sicher, dass mindestens Version 0.7.0 von pgvector installiert ist. Wenn dies nicht der Fall ist, aktualisieren Sie es und führen Sie den SQL-Befehl
ALTER EXTENSION vector UPDATE;
mithilfe von psql oder einem bevorzugten Datenbank-Client aus - Folgen Sie den Voraussetzungen, um VectorChord zu installieren
- Falls Immich keine Superuser-Rechte hat, führen Sie den SQL-Befehl
CREATE EXTENSION vchord CASCADE;
aus - Entfernen Sie die Umgebungsvariable
DB_VECTOR_EXTENSION=pgvector
, da Immich sonst weiterhin pgvector verwenden würde, falls die Variable gesetzt ist - Starten Sie Immich und lassen Sie es neue Indizes mithilfe von VectorChord erstellen
Beachten Sie, dass VectorChord selbst pgvector-Typen verwendet, daher sollten Sie pgvector nach diesen Schritten nicht deinstallieren.