Перейти к основному содержимому

Существующий 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 для подготовки базы данных.

Настройка Postgres для Immich
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. Существует два основных подхода для выполнения миграции.

Самый простой вариант — установить оба расширения на время миграции:

Шаги миграции (автоматические)
  1. Убедитесь, что у вас все еще установлен pgvecto.rs
  2. Установите pgvector (>= 0.7.0, < 1.0.0). На Debian/Ubuntu проще всего это сделать, добавив репозиторий PostgreSQL Apt и затем запустив apt install postgresql-NN-pgvector, где NN — ваша версия Postgres (например, 16)
  3. Установите VectorChord
  4. Добавьте shared_preload_libraries= 'vchord.so, vectors.so' в ваш postgresql.conf, обязательно включая оба vchord.so и vectors.so. При необходимости можно включить другие библиотеки
  5. Перезапустите сервер базы данных Postgres
  6. Если у Immich нет разрешений суперпользователя, выполните SQL-команду CREATE EXTENSION vchord CASCADE; с помощью psql или предпочитаемого клиента базы данных
  7. Запустите Immich и дождитесь вывода логов Reindexed face_index и Reindexed clip_index
  8. Если у Immich нет разрешений суперпользователя, выполните SQL-команду DROP EXTENSION vectors;
  9. Удалите старую схему, выполнив команду DROP SCHEMA vectors;
  10. Удалите запись vectors.so из настройки shared_preload_libraries
  11. Перезапустите сервер базы данных Postgres
  12. Удалите pgvecto.rs (например, с помощью команды apt-get purge vectors-pg14 в среде, основанной на Debian, заменив pg14 на соответствующую версию). pgvector должен оставаться установленным, так как он предоставляет типы данных, используемые vchord

Если невозможно установить оба VectorChord и pgvecto.rs одновременно, миграцию можно выполнить с большим количеством ручных шагов:

Шаги миграции (ручные)
  1. Пока установлен 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;
  1. Удалите ссылки на 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[];
  1. Установите VectorChord
  2. Измените типы столбцов обратно на подходящие векторные типы, заменив <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);
  1. Запустите Immich и дайте ему создать новые индексы, используя VectorChord

Миграция с pgvector

Шаги миграции
  1. Убедитесь, что у вас установлена по крайней мере версия 0.7.0 pgvector. Если версия ниже, пожалуйста, обновите ее и выполните SQL-команду ALTER EXTENSION vector UPDATE;, используя psql или предпочитаемый клиент базы данных
  2. Следуйте предварительным условиям для установки VectorChord
  3. Если у Immich нет разрешений суперпользователя, выполните SQL-команду CREATE EXTENSION vchord CASCADE;
  4. Удалите переменную окружения DB_VECTOR_EXTENSION=pgvector, так как она заставляет Immich продолжать использовать pgvector, если установлена
  5. Запустите Immich и дайте ему создать новые индексы, используя VectorChord

Учтите, что VectorChord сам использует типы pgvector, поэтому после выполнения этих шагов pgvector нельзя удалять.