Ir para o conteúdo principal

Variáveis de Ambiente

cuidado

Para alterar as variáveis de ambiente, é necessário recriar os containers do Immich. Apenas reiniciar os containers não substituirá o ambiente dentro do container!

Para recriar o container usando o docker compose, execute docker compose up -d. Na maioria dos casos, o Docker reconhecerá que o arquivo .env foi alterado e recriará os containers afetados. Se isso não funcionar, tente executar docker compose up -d --force-recreate.

Docker Compose

VariávelDescriçãoPadrãoContainers
IMMICH_VERSIONTags da imagemreleaseserver, machine learning
UPLOAD_LOCATIONCaminho de host para uploadsserver
DB_DATA_LOCATIONCaminho de host para o banco de dados Postgresdatabase
dica

Essas variáveis de ambiente são utilizadas pelo arquivo docker-compose.yml e NÃO afetam diretamente os containers.

Geral

VariávelDescriçãoPadrãoContainersWorkers
TZFuso horário*1servermicroservices
IMMICH_ENVAmbiente (produção, desenvolvimento)productionserver, machine learningapi, microservices
IMMICH_LOG_LEVELNível de log (verbose, debug, log, warn, error)logserver, machine learningapi, microservices
IMMICH_MEDIA_LOCATIONLocal de mídia dentro do container ⚠️Provavelmente você não deve definir isso*2⚠️/usr/src/app/uploadserverapi, microservices
IMMICH_CONFIG_FILECaminho para o arquivo de configuraçãoserverapi, microservices
NO_COLORDefina como true para desativar saída de log coloridafalseserver, machine learning
CPU_CORESNúmero de núcleos disponíveis para o servidor Immichnúmero de núcleos detectadoserver
IMMICH_API_METRICS_PORTPorta para as métricas OTEL8081serverapi
IMMICH_MICROSERVICES_METRICS_PORTPorta para as métricas OTEL8082servermicroservices
IMMICH_PROCESS_INVALID_IMAGESQuando true, gerar miniaturas para imagens inválidasservermicroservices
IMMICH_TRUSTED_PROXIESLista de IPs separados por vírgulas definidos como proxies confiáveisserverapi
IMMICH_IGNORE_MOUNT_CHECK_ERRORSVeja Integridade do Sistemaserverapi, microservices

*1: TZ deve ser configurado para um identificador TZ da lista. Por exemplo, TZ="Etc/UTC". TZ é usado pelo exiftool como um fallback caso o fuso horário não possa ser determinado a partir dos metadados da imagem. Também é usado para timestamps de arquivos de log e execução de tarefas cron.

*2: Este caminho é onde o código Immich busca os arquivos, que é interno ao container Docker. Configurá-lo para um caminho no host certamente irá causar problemas; você deve usar a variável UPLOAD_LOCATION em vez disso.

Workers

VariávelDescriçãoPadrãoContainers
IMMICH_WORKERS_INCLUDEExecute apenas esses workers.server
IMMICH_WORKERS_EXCLUDENão execute esses workers. Corresponde aos workers padrão ou IMMICH_WORKERS_INCLUDE, se especificado.server
informação

Informações sobre os workers atuais podem ser encontradas aqui.

Portas

VariávelDescriçãoPadrão
IMMICH_HOSTHost de escuta0.0.0.0
IMMICH_PORTPorta de escuta2283 (server), 3003 (machine learning)

Banco de Dados

VariávelDescriçãoPadrãoContainers
DB_URLURL do banco de dadosserver
DB_HOSTNAMEHost do banco de dadosdatabaseserver
DB_PORTPorta do banco de dados5432server
DB_USERNAMEUsuário do banco de dadospostgresserver, database*1
DB_PASSWORDSenha do banco de dadospostgresserver, database*1
DB_DATABASE_NAMENome do banco de dadosimmichserver, database*1
DB_SSL_MODEModo SSL do banco de dadosserver
DB_VECTOR_EXTENSION*2Extensão de vetor do banco de dados (uma entre [vectorchord, pgvector, pgvecto.rs])server
DB_SKIP_MIGRATIONSIgnorar a execução de migrações na inicialização (uma entre [true, false])falseserver
DB_STORAGE_TYPEOtimize I/O concorrente em SSDs ou I/O sequencial em HDs ([SSD, HDD])*3SSDserver

*1: Os valores de DB_USERNAME, DB_PASSWORD e DB_DATABASE_NAME são passados ao container Postgres como variáveis POSTGRES_USER, POSTGRES_PASSWORD e POSTGRES_DB em docker-compose.yml.

*2: Se não fornecido, a extensão apropriada será detectada automaticamente na inicialização por introspecção do banco de dados. Quando várias extensões estão instaladas, a ordem de preferência é VectorChord, pgvecto.rs, pgvector.

*3: Utiliza postgresql.ssd.conf ou postgresql.hdd.conf, que controla principalmente a configuração effective_io_concurrency do Postgres para permitir I/O concorrente em SSDs e I/O sequencial em HDs.

informação

Todas as variáveis DB_ precisam ser fornecidas para todos os workers do Immich, incluindo api e microservices.

DB_URL deve estar no formato postgresql://usuariodb:senhadb@hostdobanco:portadobanco/nomedobanco. Você pode exigir SSL adicionando ?sslmode=require ao final da string DB_URL, ou exigir SSL e ignorar a verificação de certificado adicionando ?sslmode=require&sslmode=no-verify.

Quando DB_URL está definido, as variáveis DB_HOSTNAME, DB_PORT, DB_USERNAME, DB_PASSWORD e DB_DATABASE_NAME são ignoradas.

Redis

VariávelDescriçãoPadrãoContainers
REDIS_URLURL do Redisserver
REDIS_SOCKETSocket do Redisserver
REDIS_HOSTNAMEHost do Redisredisserver
REDIS_PORTPorta do Redis6379server
REDIS_USERNAMEUsuário do Redisserver
REDIS_PASSWORDSenha do Redisserver
REDIS_DBINDEXÍndice do DB Redis0server
informação

Todas as variáveis REDIS_ devem ser fornecidas para todos os workers do Immich, incluindo api e microservices.

REDIS_URL deve começar com ioredis:// e depois incluir uma string JSON codificada em base64 para a configuração. Mais informações podem ser encontradas na documentação ioredis upstream.

Quando REDIS_URL ou REDIS_SOCKET são definidos, as variáveis REDIS_HOSTNAME, REDIS_PORT, REDIS_USERNAME, REDIS_PASSWORD e REDIS_DBINDEX são ignoradas.

Exemplo de JSON de URL do Redis (Sentinel) antes da codificação:

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"
}

Aprendizado de Máquina

VariávelDescriçãoPadrãoContêineres
MACHINE_LEARNING_MODEL_TTLTempo de inatividade (s) antes de um modelo ser descarregado (desabilitado se <= 0)300aprendizado de máquina
MACHINE_LEARNING_MODEL_TTL_POLL_SIntervalo (s) entre verificações para o TTL do modelo (desabilitado se <= 0)10aprendizado de máquina
MACHINE_LEARNING_CACHE_FOLDERDiretório onde os modelos são baixados/cacheaprendizado de máquina
MACHINE_LEARNING_REQUEST_THREADS*1Contagem de threads do pool de threads de requisição (desabilitado se <= 0)número de núcleos da CPUaprendizado de máquina
MACHINE_LEARNING_MODEL_INTER_OP_THREADSNúmero de operações paralelas do modelo1aprendizado de máquina
MACHINE_LEARNING_MODEL_INTRA_OP_THREADSNúmero de threads para cada operação do modelo2aprendizado de máquina
MACHINE_LEARNING_WORKERS*2Número de processos de trabalhadores a serem criados1aprendizado de máquina
MACHINE_LEARNING_HTTP_KEEPALIVE_TIMEOUT_S*3Tempo de Keep-alive HTTP em segundos2aprendizado de máquina
MACHINE_LEARNING_WORKER_TIMEOUTTempo máximo (s) de falta de resposta antes de um trabalhador ser encerrado120 (300 se usando OpenVINO)aprendizado de máquina
MACHINE_LEARNING_PRELOAD__CLIP__TEXTUALLista separada por vírgula de modelo(s) CLIP (textual) a serem pré-carregados e armazenadosaprendizado de máquina
MACHINE_LEARNING_PRELOAD__CLIP__VISUALLista separada por vírgula de modelo(s) CLIP (visual) a serem pré-carregados e armazenadosaprendizado de máquina
MACHINE_LEARNING_PRELOAD__FACIAL_RECOGNITION__RECOGNITIONLista separada por vírgula de modelo(s) de reconhecimento facial (reconhecimento) pré-carregados e armazenadosaprendizado de máquina
MACHINE_LEARNING_PRELOAD__FACIAL_RECOGNITION__DETECTIONLista separada por vírgula de modelo(s) de reconhecimento facial (detecção) pré-carregados e armazenadosaprendizado de máquina
MACHINE_LEARNING_ANNAtiva aceleração de hardware ARM-NN se suportadoTrueaprendizado de máquina
MACHINE_LEARNING_ANN_FP16_TURBOExecuta operações em precisão FP16: aumenta velocidade, reduz precisão (aplica apenas ao ARM-NN)Falseaprendizado de máquina
MACHINE_LEARNING_ANN_TUNING_LEVELNível de ajuste de GPU do ARM-NN (1: rápido, 2: normal, 3: exaustivo)2aprendizado de máquina
MACHINE_LEARNING_DEVICE_IDS*4IDs dos dispositivos para usar em ambientes com múltiplos GPUs0aprendizado de máquina
MACHINE_LEARNING_MAX_BATCH_SIZE__FACIAL_RECOGNITIONDefine o número máximo de faces que serão processadas de uma vez pelo modelo de reconhecimento facialNenhum (1 se usando OpenVINO)aprendizado de máquina
MACHINE_LEARNING_PING_TIMEOUTTempo de espera (ms) para uma resposta PING ao verificar se um servidor ML está disponível2000servidor
MACHINE_LEARNING_AVAILABILITY_BACKOFF_TIMETempo para ignorar servidores ML que estão offline antes de tentar novamente30000servidor
MACHINE_LEARNING_RKNNAtiva aceleração de hardware RKNN se suportadoTrueaprendizado de máquina
MACHINE_LEARNING_RKNN_THREADSQuantidade de threads de runtime RKNN que devem ser criadas durante inferência.1aprendizado de máquina

*1: É recomendado começar com este parâmetro ao alterar os níveis de concorrência do serviço de aprendizado de máquina e depois ajustar os outros.

*2: Como cada processo duplica modelos na memória, alterar isso não é recomendado, a menos que você tenha memória abundante disponível.

*3: Para cenários como HPA no K8S. https://github.com/immich-app/immich/discussions/12064

*4: Usar múltiplos GPUs requer que MACHINE_LEARNING_WORKERS seja definido como maior que 1. Um único dispositivo é atribuído a cada trabalhador com prioridade em round-robin.

informação

Embora o modelo textual seja o único necessário para busca inteligente, alguns usuários podem experimentar lentidão nas primeiras buscas devido a backups que acionam o carregamento dos outros modelos na memória, bloqueando outras requisições até que sejam concluídas. Para evitar isso, você pode pré-carregar os outros modelos (visual, recognition e detection) se tiver RAM suficiente para fazê-lo.

Parâmetros adicionais de aprendizado de máquina podem ser ajustados a partir da interface administrativa.

Prometheus

VariávelDescriçãoPadrãoContêineresTrabalhadores
IMMICH_TELEMETRY_INCLUDEColetar estas telemetrias. Lista de host, api, io, repo, job. Nota: Você também pode especificar all para habilitar todasservidorapi, microsserviços
IMMICH_TELEMETRY_EXCLUDENão coletar estas telemetrias. Lista de host, api, io, repo, jobservidorapi, microsserviços

Segredos do Docker

As seguintes variáveis suportam o uso de Segredos do Docker para segurança adicional.

Para usar qualquer uma dessas, substitua a variável de ambiente regular pela variável de ambiente equivalente _FILE. O valor da variável _FILE deve ser definido como o caminho de um arquivo contendo o valor da variável.

Variável RegularVariável Equivalente Segredos do 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: Veja a documentação oficial para detalhes sobre como usar Segredos do Docker na imagem do Postgres.

*2: Veja este comentário para um exemplo de como usar um segredo do Docker para a senha no contêiner Redis.