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

Переменные окружения

осторожно

Чтобы изменить переменные окружения, необходимо пересоздать контейнеры Immich. Просто перезапуск контейнеров не заменяет окружение внутри контейнера!

Чтобы пересоздать контейнер с использованием docker compose, выполните команду docker compose up -d. В большинстве случаев Docker распознает, что файл .env был изменён, и пересоздаст соответствующие контейнеры. Если это не работает, попробуйте выполнить команду docker compose up -d --force-recreate.

Docker Compose

ПеременнаяОписаниеЗначение по умолчаниюКонтейнеры
IMMICH_VERSIONТеги образаreleaseserver, machine learning
UPLOAD_LOCATIONПуть хоста для загрузокserver
DB_DATA_LOCATIONПуть хоста для базы данных Postgresdatabase
совет

Эти переменные окружения используются файлом docker-compose.yml и не влияют непосредственно на контейнеры.

Общие

ПеременнаяОписаниеЗначение по умолчаниюКонтейнерыВоркеры
TZЧасовой пояс*1servermicroservices
IMMICH_ENVОкружение (production, development)productionserver, machine learningapi, microservices
IMMICH_LOG_LEVELУровень логирования (verbose, debug, log, warn, error)logserver, machine learningapi, microservices
IMMICH_MEDIA_LOCATIONПуть хранения файлов внутри контейнера ⚠️Скорее всего, не стоит это менять*2⚠️/usr/src/app/uploadserverapi, microservices
IMMICH_CONFIG_FILEПуть к конфигурационному файлуserverapi, microservices
NO_COLORУстановите true, чтобы отключить цветной вывод логовfalseserver, machine learning
CPU_CORESЧисло ядер CPU, доступных серверу Immichавтоматически обнаруживаетсяserver
IMMICH_API_METRICS_PORTПорт для метрик OTEL8081serverapi
IMMICH_MICROSERVICES_METRICS_PORTПорт для метрик OTEL8082servermicroservices
IMMICH_PROCESS_INVALID_IMAGESЕсли true, создаёт уменьшенные изображения для недействительных изображенийservermicroservices
IMMICH_TRUSTED_PROXIESСписок доверенных прокси в формате IP, разделенных запятымиserverapi
IMMICH_IGNORE_MOUNT_CHECK_ERRORSСм. Системная целостностьserverapi, microservices

*1: TZ должен быть установлен в идентификатор часового пояса из этого списка. Например, TZ="Etc/UTC". TZ используется инструментом exiftool в случае, если невозможно определить часовой пояс из метаданных изображения. Также используется для отметок времени в логах и выполнения cron задач.

*2: Этот путь определяет, где код Immich ищет файлы, и используется внутри Docker контейнера. Установка пути на вашем хосте может привести к сбоям. Лучше использовать переменную UPLOAD_LOCATION.

Воркеры

ПеременнаяОписаниеЗначение по умолчаниюКонтейнеры
IMMICH_WORKERS_INCLUDEЗапуск только указанных воркеровserver
IMMICH_WORKERS_EXCLUDEНе запускать указанных воркеров. Сравнивается с воркерами по умолчанию или IMMICH_WORKERS_INCLUDE, если они указаныserver
информация

Информация о текущих воркерах доступна здесь.

Порты

ПеременнаяОписаниеЗначение по умолчанию
IMMICH_HOSTХост для прослушивания0.0.0.0
IMMICH_PORTПорт для прослушивания2283 (сервер), 3003 (машинное обучение)

База данных

ПеременнаяОписаниеЗначение по умолчаниюКонтейнеры
DB_URLURL базы данныхсервер
DB_HOSTNAMEХост базы данныхdatabaseсервер
DB_PORTПорт базы данных5432сервер
DB_USERNAMEПользователь базы данныхpostgresсервер, database*1
DB_PASSWORDПароль базы данныхpostgresсервер, database*1
DB_DATABASE_NAMEИмя базы данныхimmichсервер, database*1
DB_SSL_MODESSL-режим для базы данныхсервер
DB_VECTOR_EXTENSION*2Расширение для базы данных (одно из [vectorchord, pgvector, pgvecto.rs])сервер
DB_SKIP_MIGRATIONSПропускать миграции на этапе запуска (одно из [true, false])falseсервер
DB_STORAGE_TYPEОптимизация конкурентного IO на SSD или последовательного IO на HDD ([SSD, HDD]) *3SSDсервер

*1: Значения DB_USERNAME, DB_PASSWORD, и DB_DATABASE_NAME передаются контейнеру Postgres как переменные POSTGRES_USER, POSTGRES_PASSWORD, и POSTGRES_DB в docker-compose.yml.

*2: Если не указано, соответствующее расширение будет автоматически определено при запуске путём интроспекции базы данных. При установленных нескольких расширениях, порядок предпочтений такой: VectorChord, pgvecto.rs, pgvector.

*3: Используется либо postgresql.ssd.conf, либо postgresql.hdd.conf, что в основном управляет параметром effective_io_concurrency PostgreSQL для поддержки конкурентного IO на SSD и последовательного IO на HDD.

информация

Все переменные DB_ должны быть предоставлены всем воркерам Immich, включая api и microservices.

DB_URL должен быть в формате postgresql://immichdbusername:immichdbpassword@postgreshost:postgresport/immichdatabasename. Вы можете требовать SSL, добавив ?sslmode=require в конец строки DB_URL, или требовать SSL и пропустить проверку сертификатов, добавив ?sslmode=require&sslmode=no-verify.

Если задан DB_URL, переменные базы данных DB_HOSTNAME, DB_PORT, DB_USERNAME, DB_PASSWORD и DB_DATABASE_NAME игнорируются.

Redis

ПеременнаяОписаниеЗначение по умолчаниюКонтейнеры
REDIS_URLURL Redisserver
REDIS_SOCKETСокет Redisserver
REDIS_HOSTNAMEХост Redisredisserver
REDIS_PORTПорт Redis6379server
REDIS_USERNAMEПользователь Redisserver
REDIS_PASSWORDПароль Redisserver
REDIS_DBINDEXИндекс БД Redis0server
информация

Все переменные REDIS_ должны быть предоставлены всем воркерам Immich, включая api и microservices.

REDIS_URL должен начинаться с ioredis://, и далее включать JSON-строку в кодировке base64 для конфигурации. Больше информации можно найти в [документации ioredis].

Когда определены переменные REDIS_URL или REDIS_SOCKET, переменные REDIS_HOSTNAME, REDIS_PORT, REDIS_USERNAME, REDIS_PASSWORD и REDIS_DBINDEX игнорируются.

Пример URL для Redis (Sentinel) в формате JSON до кодирования:

JSON
{
"sentinels": [
{
"host": "redis-sentinel-node-0",
"port": 26379
},
{
"host": "redis-sentinel-node-1",
"port": 26379
},
{
"host": "redis-sentinel-node-2",
"port": 26379
}
],
"name": "redis-sentinel"
}

Машинное обучение

ПеременнаяОписаниеЗначение по умолчаниюКонтейнеры
MACHINE_LEARNING_MODEL_TTLВремя бездействия (с), после которого модель выгружается (выключено, если <= 0)300машинное обучение
MACHINE_LEARNING_MODEL_TTL_POLL_SИнтервал проверки (с) для времени жизни модели (выключено, если <= 0)10машинное обучение
MACHINE_LEARNING_CACHE_FOLDERДиректория, куда скачиваются модели/cacheмашинное обучение
MACHINE_LEARNING_REQUEST_THREADS*1Количество потоков в пуле запросов (выключено, если <= 0)количество ядер процессорамашинное обучение
MACHINE_LEARNING_MODEL_INTER_OP_THREADSКоличество параллельных операций модели1машинное обучение
MACHINE_LEARNING_MODEL_INTRA_OP_THREADSКоличество потоков для каждой операции модели2машинное обучение
MACHINE_LEARNING_WORKERS*2Количество создаваемых рабочих процессов1машинное обучение
MACHINE_LEARNING_HTTP_KEEPALIVE_TIMEOUT_S*3Время HTTP Keep-alive в секундах2машинное обучение
MACHINE_LEARNING_WORKER_TIMEOUTМаксимальное время (с) отсутствия ответа, после которого рабочий процесс завершается120 (300 при использовании OpenVINO)машинное обучение
MACHINE_LEARNING_PRELOAD__CLIP__TEXTUALСписок (текстовых) моделей CLIP для предварительной загрузки и кэширования, разделенный запятымимашинное обучение
MACHINE_LEARNING_PRELOAD__CLIP__VISUALСписок (визуальных) моделей CLIP для предварительной загрузки и кэширования, разделенный запятымимашинное обучение
MACHINE_LEARNING_PRELOAD__FACIAL_RECOGNITION__RECOGNITIONСписок (распознавания) моделей распознавания лиц для предварительной загрузки и кэширования, разделенный запятымимашинное обучение
MACHINE_LEARNING_PRELOAD__FACIAL_RECOGNITION__DETECTIONСписок (детекции) моделей распознавания лиц для предварительной загрузки и кэширования, разделенный запятымимашинное обучение
MACHINE_LEARNING_ANNВключить аппаратное ускорение ARM-NN, если поддерживаетсяTrueмашинное обучение
MACHINE_LEARNING_ANN_FP16_TURBOВыполнять операции в точности FP16: увеличение скорости, снижение точности (применяется только к ARM-NN)Falseмашинное обучение
MACHINE_LEARNING_ANN_TUNING_LEVELУровень настройки GPU ARM-NN (1: быстро, 2: нормально, 3: тщательно)2машинное обучение
MACHINE_LEARNING_DEVICE_IDS*4ID устройств для использования в средах с несколькими GPU0машинное обучение
MACHINE_LEARNING_MAX_BATCH_SIZE__FACIAL_RECOGNITIONУстановить максимальное количество лиц, которые будут обработаны одновременно моделью распознаванияNone (1 при использовании OpenVINO)машинное обучение
MACHINE_LEARNING_PING_TIMEOUTВремя ожидания (мс) ответа PING при проверке доступности сервера ML2000сервер
MACHINE_LEARNING_AVAILABILITY_BACKOFF_TIMEВремя игнорирования отключенных серверов ML перед повторной попыткой30000сервер
MACHINE_LEARNING_RKNNВключить аппаратное ускорение RKNN, если поддерживаетсяTrueмашинное обучение
MACHINE_LEARNING_RKNN_THREADSКоличество потоков RKNN, которые должны быть запущены во время выполнения инференса1машинное обучение

*1: Рекомендуется начинать с этого параметра при изменении уровня параллелизма службы машинного обучения, а затем настраивать остальные.

*2: Поскольку каждый процесс дублирует модели в памяти, изменение этого параметра не рекомендуется, если только у вас нет достаточного объема памяти.

*3: Для сценариев, таких как HPA в K8S. https://github.com/immich-app/immich/discussions/12064

*4: Использование нескольких GPU требует установки MACHINE_LEARNING_WORKERS больше 1. Каждое устройство назначается одному рабочему процессу в порядке приоритетов round-robin.

информация

Хотя модель textual является единственной, необходимой для интеллектуального поиска, некоторые пользователи могут столкнуться с медленным первичным поиском из-за загрузки, инициирующей загрузку других моделей в память, что блокирует другие запросы до завершения. Чтобы избежать этого, вы можете предварительно загрузить другие модели (visual, recognition и detection), если у вас достаточно оперативной памяти.

Дополнительные параметры машинного обучения можно настроить из пользовательского интерфейса администратора.

Prometheus

ПеременнаяОписаниеЗначение по умолчаниюКонтейнерыРабочие процессы
IMMICH_TELEMETRY_INCLUDEСобирать эти телеметрии. Список host, api, io, repo, job. Примечание: Вы также можете указать all, чтобы включить всесерверapi, микросервисы
IMMICH_TELEMETRY_EXCLUDEНе собирать эти телеметрии. Список host, api, io, repo, jobсерверapi, микросервисы

Секреты Docker

Следующие переменные поддерживают использование секретов Docker для повышения безопасности.

Чтобы использовать любую из них, замените обычную переменную окружения на эквивалентную переменную окружения _FILE. Значение переменной _FILE должно быть установлено в путь файла, содержащего значение переменной.

Обычная переменнаяЭквивалентная переменная из секретов Docker '_FILE'
DB_HOSTNAMEDB_HOSTNAME_FILE*1
DB_DATABASE_NAMEDB_DATABASE_NAME_FILE*1
DB_USERNAMEDB_USERNAME_FILE*1
DB_PASSWORDDB_PASSWORD_FILE*1
DB_URLDB_URL_FILE*1
REDIS_PASSWORDREDIS_PASSWORD_FILE*2

*1: См. официальную документацию для подробностей об использовании секретов Docker в образе Postgres.

*2: См. этот комментарий, чтобы узнать пример использования секрета Docker для пароля в контейнере Redis.