Umgebungsvariablen
Um Umgebungsvariablen zu ändern, müssen die Immich-Container neu erstellt werden. Ein einfaches Neustarten der Container ersetzt nicht die Umgebung innerhalb des Containers!
Um den Container mithilfe von docker compose neu zu erstellen, führen Sie docker compose up -d aus.
In den meisten Fällen erkennt Docker, dass sich die .env-Datei geändert hat, und erstellt die betroffenen Container neu.
Falls dies nicht funktioniert, versuchen Sie docker compose up -d --force-recreate auszuführen.
Docker Compose
| Variable | Beschreibung | Standard | Container |
|---|---|---|---|
IMMICH_VERSION | Image-Tags | release | server, machine learning |
UPLOAD_LOCATION | Host-Pfad für Uploads | server | |
DB_DATA_LOCATION | Host-Pfad für PostgreSQL-Datenbank | datenbank |
Diese Umgebungsvariablen werden von der docker-compose.yml-Datei verwendet und beeinflussen die Container NICHT direkt.
Allgemein
| Variable | Beschreibung | Standard | Container | Worker |
|---|---|---|---|---|
TZ | Zeitzone | *1 | server | microservices |
IMMICH_ENV | Umgebung (production, development) | production | server, machine learning | api, microservices |
IMMICH_LOG_LEVEL | Log-Level (verbose, debug, log, warn, error) | log | server, machine learning | api, microservices |
IMMICH_MEDIA_LOCATION | Medienspeicherort innerhalb des Containers ⚠️Dieser Wert sollte wahrscheinlich nicht gesetzt werden*2⚠️ | /usr/src/app/upload | server | api, microservices |
IMMICH_CONFIG_FILE | Pfad zur Konfigurationsdatei | server | api, microservices | |
NO_COLOR | Setzen Sie true, um farbige Log-Ausgaben zu deaktivieren | false | server, machine learning | |
CPU_CORES | Anzahl der CPU-Kerne, die dem Immich-Server zur Verfügung stehen | Auto-Erkennung der CPU-Kerne | server | |
IMMICH_API_METRICS_PORT | Port für die OTEL-Metriken | 8081 | server | api |
IMMICH_MICROSERVICES_METRICS_PORT | Port für die OTEL-Metriken | 8082 | server | microservices |
IMMICH_PROCESS_INVALID_IMAGES | Wenn true, generieren Sie Miniaturansichten für ungültige Bilder | server | microservices | |
IMMICH_TRUSTED_PROXIES | Liste von durch Kommas getrennten IPs, die als vertrauenswürdige Proxies festgelegt sind | server | api | |
IMMICH_IGNORE_MOUNT_CHECK_ERRORS | Siehe Systemintegrität | server | api, microservices |
*1: TZ sollte auf einen TZ-Identifier aus dieser Liste gesetzt werden. Zum Beispiel: TZ="Etc/UTC".
TZ wird von exiftool als Fallback verwendet, wenn die Zeitzone nicht aus den Bildmetadaten abgeleitet werden kann. Es wird außerdem für Zeitstempel in Logdateien und die Ausführung von Cron-Jobs verwendet.
*2: Dieser Pfad ist der Ort, an dem Immich nach Dateien sucht und ist innerhalb des Docker-Containers intern. Das Festlegen auf einen Pfad Ihres Hosts wird sicherlich Probleme verursachen; verwenden Sie stattdessen die Variable UPLOAD_LOCATION.
Worker
| Variable | Beschreibung | Standard | Container |
|---|---|---|---|
IMMICH_WORKERS_INCLUDE | Führen Sie nur diese Worker aus. | server | |
IMMICH_WORKERS_EXCLUDE | Führen Sie diese Worker nicht aus. Abgleiche mit Standard-Workern oder IMMICH_WORKERS_INCLUDE, falls angegeben. | server |
Informationen zu den aktuellen Workern finden Sie hier.
Ports
| Variable | Beschreibung | Standard |
|---|---|---|
IMMICH_HOST | Listening-Host | 0.0.0.0 |
IMMICH_PORT | Listening-Port | 2283 (server), 3003 (machine learning) |
Datenbank
| Variable | Beschreibung | Standard | Container |
|---|---|---|---|
DB_URL | Datenbank-URL | server | |
DB_HOSTNAME | Datenbank-Host | database | server |
DB_PORT | Datenbank-Port | 5432 | server |
DB_USERNAME | Datenbank-Benutzer | postgres | server, datenbank*1 |
DB_PASSWORD | Datenbank-Passwort | postgres | server, datenbank*1 |
DB_DATABASE_NAME | Name der Datenbank | immich | server, datenbank*1 |
DB_SSL_MODE | Datenbank-SSL-Modus | server | |
DB_VECTOR_EXTENSION*2 | Datenbank-Vektorerweiterung (eine von [vectorchord, pgvector, pgvecto.rs]) | server | |
DB_SKIP_MIGRATIONS | Ob das Ausführen von Migrationen beim Start übersprungen werden soll (eine von [true, false]) | false | server |
DB_STORAGE_TYPE | Optimieren Sie gleichzeitiges IO auf SSDs oder sequentielles IO auf HDDs ([SSD, HDD])*3 | SSD | server |
*1: Die Werte von DB_USERNAME, DB_PASSWORD und DB_DATABASE_NAME werden an den PostgreSQL-Container als Variablen POSTGRES_USER, POSTGRES_PASSWORD und POSTGRES_DB in der docker-compose.yml weitergegeben.
*2: Wenn nicht angegeben, wird die passende Erweiterung beim Start automatisch erkannt, indem die Datenbank inspiziert wird. Sind mehrere Erweiterungen installiert, lautet die Präferenzreihenfolge VectorChord, pgvecto.rs, pgvector.
*3: Verwendet entweder postgresql.ssd.conf oder postgresql.hdd.conf, die hauptsächlich die Postgres-Einstellung effective_io_concurrency steuern, um gleichzeitiges IO auf SSDs und sequentielles IO auf HDDs zu ermöglichen.
Alle DB_-Variablen müssen allen Immich-Workern zur Verfügung gestellt werden, einschließlich api und microservices.
DB_URL muss im Format postgresql://immichdbusername:immichdbpassword@postgreshost:postgresport/immichdatabasename sein.
Sie können SSL verlangen, indem Sie ?sslmode=require an das Ende der DB_URL-Zeichenfolge anfügen, oder SSL verlangen und die Zertifikatsüberprüfung überspringen, indem Sie ?sslmode=require&sslmode=no-verify anfügen.
Wenn DB_URL definiert ist, werden die Datenbankvariablen DB_HOSTNAME, DB_PORT, DB_USERNAME, DB_PASSWORD und DB_DATABASE_NAME ignoriert.
Redis
| Variable | Beschreibung | Standard | Container |
|---|---|---|---|
REDIS_URL | Redis-URL | server | |
REDIS_SOCKET | Redis-Socket | server | |
REDIS_HOSTNAME | Redis-Host | redis | server |
REDIS_PORT | Redis-Port | 6379 | server |
REDIS_USERNAME | Redis-Benutzername | server | |
REDIS_PASSWORD | Redis-Passwort | server | |
REDIS_DBINDEX | Redis-DB-Index | 0 | server |
Alle REDIS_-Variablen müssen allen Immich-Workern zur Verfügung gestellt werden, einschließlich api und microservices.
REDIS_URL muss mit ioredis:// beginnen und dann eine base64-kodierte JSON-Zeichenfolge für die Konfiguration enthalten.
Weitere Informationen finden Sie in der ioredis-Dokumentation.
Wenn REDIS_URL oder REDIS_SOCKET definiert sind, werden die Variablen REDIS_HOSTNAME, REDIS_PORT, REDIS_USERNAME, REDIS_PASSWORD und REDIS_DBINDEX ignoriert.
Beispiel-JSON für Redis (Sentinel)-URL vor der Kodierung:
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"
}
Maschinelles Lernen
| Variable | Beschreibung | Standard | Container |
|---|---|---|---|
MACHINE_LEARNING_MODEL_TTL | Inaktivitätsdauer (s), bevor ein Modell entladen wird (deaktiviert, wenn <= 0) | 300 | Maschinelles Lernen |
MACHINE_LEARNING_MODEL_TTL_POLL_S | Intervall (s) zwischen den Überprüfungen der Modell-TTL (deaktiviert, wenn <= 0) | 10 | Maschinelles Lernen |
MACHINE_LEARNING_CACHE_FOLDER | Verzeichnis, in dem Modelle heruntergeladen werden | /cache | Maschinelles Lernen |
MACHINE_LEARNING_REQUEST_THREADS*1 | Anzahl der Threads des Anfrage-Threadpools (deaktiviert, wenn <= 0) | Anzahl der CPU-Kerne | Maschinelles Lernen |
MACHINE_LEARNING_MODEL_INTER_OP_THREADS | Anzahl paralleler Modelloperationen | 1 | Maschinelles Lernen |
MACHINE_LEARNING_MODEL_INTRA_OP_THREADS | Anzahl der Threads für jede Modelloperation | 2 | Maschinelles Lernen |
MACHINE_LEARNING_WORKERS*2 | Anzahl der zu startenden Arbeitsprozesse | 1 | Maschinelles Lernen |
MACHINE_LEARNING_HTTP_KEEPALIVE_TIMEOUT_S*3 | HTTP-Keep-Alive-Zeit in Sekunden | 2 | Maschinelles Lernen |
MACHINE_LEARNING_WORKER_TIMEOUT | Maximale Zeit (s) der Antwortlosigkeit, bevor ein Arbeiter beendet wird | 120 (300 bei OpenVINO) | Maschinelles Lernen |
MACHINE_LEARNING_PRELOAD__CLIP__TEXTUAL | Kommagetrennte Liste der CLIP-Modelle (textuell), die vorab geladen und zwischengespeichert werden | Maschinelles Lernen | |
MACHINE_LEARNING_PRELOAD__CLIP__VISUAL | Kommagetrennte Liste der CLIP-Modelle (visuell), die vorab geladen und zwischengespeichert werden | Maschinelles Lernen | |
MACHINE_LEARNING_PRELOAD__FACIAL_RECOGNITION__RECOGNITION | Kommagetrennte Liste der Gesichtserkennungsmodelle (Erkennung), die vorab geladen und zwischengespeichert werden | Maschinelles Lernen | |
MACHINE_LEARNING_PRELOAD__FACIAL_RECOGNITION__DETECTION | Kommagetrennte Liste der Gesichtserkennungsmodelle (Erkennung), die vorab geladen und zwischengespeichert werden | Maschinelles Lernen | |
MACHINE_LEARNING_ANN | ARM-NN-Hardware-Beschleunigung aktivieren, falls unterstützt | True | Maschinelles Lernen |
MACHINE_LEARNING_ANN_FP16_TURBO | FP16-Gleitkomma-Operationen ausführen: erhöht Geschwindigkeit, verringert Präzision (betrifft nur ARM-NN) | False | Maschinelles Lernen |
MACHINE_LEARNING_ANN_TUNING_LEVEL | ARM-NN-GPU-Tuning-Level (1: schnell, 2: normal, 3: ausführlich) | 2 | Maschinelles Lernen |
MACHINE_LEARNING_DEVICE_IDS*4 | Geräte-IDs für den Einsatz in Multi-GPU-Umgebungen | 0 | Maschinelles Lernen |
MACHINE_LEARNING_MAX_BATCH_SIZE__FACIAL_RECOGNITION | Legt die maximale Anzahl der Gesichter fest, die gleichzeitig vom Gesichtserkennungsmodell verarbeitet werden | Keine (1 bei OpenVINO) | Maschinelles Lernen |
MACHINE_LEARNING_PING_TIMEOUT | Wartezeit (ms) für eine PING-Antwort beim Überprüfen der Verfügbarkeit eines ML-Servers | 2000 | Server |
MACHINE_LEARNING_AVAILABILITY_BACKOFF_TIME | Wartezeit, bevor Offline-ML-Server erneut getestet werden | 30000 | Server |
MACHINE_LEARNING_RKNN | RKNN-Hardware-Beschleunigung aktivieren, falls unterstützt | True | Maschinelles Lernen |
MACHINE_LEARNING_RKNN_THREADS | Anzahl der RKNN-Laufzeit-Threads, die für Inferencing gestartet werden. | 1 | Maschinelles Lernen |
*1: Es wird empfohlen, mit diesem Parameter zu beginnen, wenn man die Parallelitätsstufen des Services für maschinelles Lernen anpassen möchte, und anschließend die anderen Parameter zu optimieren.
*2: Da jeder Prozess Modelle im Speicher dupliziert, wird eine Änderung dieses Parameters nicht empfohlen, es sei denn, es steht ausreichend Speicher zur Verfügung.
*3: Für Szenarien wie HPA in K8S. https://github.com/immich-app/immich/discussions/12064
*4: Die Nutzung mehrerer GPUs erfordert, dass MACHINE_LEARNING_WORKERS auf einen Wert > 1 gesetzt wird. Ein einzelnes Gerät wird jedem Arbeiter im Round-Robin-Prioritätsmodus zugewiesen.
Während das textual Modell das einzige ist, das für die intelligente Suche erforderlich ist, könnten einige Benutzer langsame erste Suchen erleben
wegen Backups, die das Laden der anderen Modelle in den Speicher auslösen, was andere Anfragen blockiert, bis abgeschlossen.
Um dies zu vermeiden, können Sie die anderen Modelle (visual, recognition und detection) vorab laden, wenn Sie über genügend RAM verfügen.
Zusätzliche Parameter für maschinelles Lernen können über die Admin-UI angepasst werden.
Prometheus
| Variable | Beschreibung | Standard | Container | Arbeiter |
|---|---|---|---|---|
IMMICH_TELEMETRY_INCLUDE | Diese Telemetrien sammeln. Liste von host, api, io, repo, job. Hinweis: Sie können auch all angeben, um alle zu aktivieren | Server | API, Microservices | |
IMMICH_TELEMETRY_EXCLUDE | Diese Telemetrien nicht sammeln. Liste von host, api, io, repo, job | Server | API, Microservices |
Docker Secrets
Die folgenden Variablen unterstützen die Verwendung von Docker Secrets für zusätzliche Sicherheit.
Für die Nutzung einer dieser Variablen ersetzen Sie die reguläre Umgebungsvariable durch die entsprechende _FILE-Umgebungsvariable. Der Wert der
_FILE-Variable sollte auf den Pfad einer Datei gesetzt werden, die den Variablenwert enthält.
| Reguläre Variable | Äquivalente Docker Secrets _FILE Variable |
|---|---|
DB_HOSTNAME | DB_HOSTNAME_FILE*1 |
DB_DATABASE_NAME | DB_DATABASE_NAME_FILE*1 |
DB_USERNAME | DB_USERNAME_FILE*1 |
DB_PASSWORD | DB_PASSWORD_FILE*1 |
DB_URL | DB_URL_FILE*1 |
REDIS_PASSWORD | REDIS_PASSWORD_FILE*2 |
*1: Siehe die offizielle Dokumentation für Details zur Verwendung von Docker Secrets im Postgres-Image.
*2: Siehe diesen Kommentar für ein Beispiel zur Verwendung eines Docker Secrets für das Passwort im Redis-Container.