Существующий Postgres
Хотя это официально не рекомендуется, возможно запустить Immich, используя существующий сервер Postgres. Чтобы воспользоваться этой настройкой, вы должны иметь базовые знания о Postgres и командной строке Linux. Если таких знаний нет, мы рекомендуем использовать стандартную настройку с выделенным контейнером Postgres.
По умолчанию Immich ожидает права суперпользователя в базе данных Postgres и требует установки некоторых расширений. В этом руководстве описаны шаги, необходимые для подготовки существующего сервера Postgres для работы с Immich.
Работа с существующим сервером Postgres может предоставить мощные административные функции, включая логическую репликацию и потоковые резервные копии журнала записей с помощью таких программ, как pgBackRest или Barman.
Предварительные условия
Вы должны установить pgvector
(>= 0.7.0, < 1.0.0
), так как это необходимое условие для vchord
.
Самый простой способ сделать это на Debian/Ubuntu — добавить репозиторий PostgreSQL Apt, а затем запустить apt install postgresql-NN-pgvector
, где NN
— это ваша версия Postgres (например, 16
).
Вы должны установить VectorChord в ваш экземпляр Postgres, используя инструкцию. После установки добавьте shared_preload_libraries = 'vchord.so'
в ваш postgresql.conf
. Если уже настроены некоторые другие 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 подключения
Вы можете подключиться к вашему существующему серверу Postgres, установив переменную окружения DB_URL
в файле .env
.
DB_URL='postgresql://immichdbusername:immichdbpassword@postgreshost:postgresport/immichdatabasename'
# требуется SSL-подключение к Postgres
# 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 ожидает разрешения суперпользователя в базе данных, которое можно предоставить, запустив команду ALTER USER <immichdbusername> WITH SUPERUSER;
в консоли psql
. Если вы предпочитаете не предоставлять права суперпользователя, следуйте инструкциям в следующем разделе.
Без разрешения суперпользователя
Этот метод рекомендуется использовать только опытным пользователям и часто требует ручного вмешательства при обновлении Immich.
В настоящее время автоматические резервные копии требуют разрешения суперпользователя из-за использования pg_dumpall
.
Immich может работать без разрешения суперпользователя, следуя представленным ниже инструкциям в psql
для подготовки базы данных.
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
- Добавьте
shared_preload_libraries= 'vchord.so, vectors.so'
в вашpostgresql.conf
, обязательно включая оба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;
- Удалите запись
vectors.so
из настройкиshared_preload_libraries
- Перезапустите сервер базы данных Postgres
- Удалите pgvecto.rs (например, с помощью команды
apt-get purge vectors-pg14
в среде, основанной на Debian, заменивpg14
на соответствующую версию).pgvector
должен оставаться установленным, так как он предоставляет типы данных, используемыеvchord
Если невозможно установить оба VectorChord и pgvecto.rs одновременно, миграцию можно выполнить с большим количеством ручных шагов:
Шаги миграции (ручные)
- Пок а установлен pgvecto.rs, выполните следующую SQL-команду с помощью psql или вашего предпочитаемого клиента базы данных. Сохраните число, выведенное этой командой, так как оно понадобится позже
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;
- Удалите ссылки на pgvecto.rs, используя следующие SQL-команды
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. Если версия ниже, пожалуйста, обновите ее и выполните SQL-команду
ALTER EXTENSION vector UPDATE;
, используя psql или предпочитаемый клиент базы данных - Следуйте предварительным условиям для установки VectorChord
- Если у Immich нет разрешений суперпользователя, выполните SQL-команду
CREATE EXTENSION vchord CASCADE;
- Удалите переменную окружения
DB_VECTOR_EXTENSION=pgvector
, так как она заставляет Immich продолжать использовать pgvector, если установлена - Запустите Immich и дайте ему создать новые индексы, используя VectorChord
Учтите, что VectorChord сам использует типы pgvector, поэтому после выполнения этих шагов pgvector нельзя удалять.