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

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

осторожно

Чтобы изменить переменные окружения, необходимо пересоздать контейнеры 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.