跳到主要内容

環境變數

提示

要更改環境變數,您必須重新建立 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_LOCATIONPostgres 資料庫的主機路徑database
提示

這些環境變數由 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_CORESImmich 服務器可用的 CPU 核心數量自動檢測的 CPU 核心數server
IMMICH_API_METRICS_PORTOTEL 指標的端口8081serverapi
IMMICH_MICROSERVICES_METRICS_PORTOTEL 指標的端口8082servermicroservices
IMMICH_PROCESS_INVALID_IMAGES設為 true 時,為無效圖像生成縮略圖servermicroservices
IMMICH_TRUSTED_PROXIES可信代理的逗號分隔的 IP 列表serverapi
IMMICH_IGNORE_MOUNT_CHECK_ERRORS查看 系統完整性serverapi, microservices

*1: TZ 應設置為 這個清單 中的一個 TZ 標識符。例如,TZ="Etc/UTC"TZexiftool 用作後備選項,以防無法從圖像元資料中確定時區。它也被用於日誌文件的時間戳和定時任務執行。

*2: 該路徑是 Immich 程式查找檔案的位置,它是 Docker 容器的內部路徑。將其設置為主機上的路徑很可能會導致問題,您應該使用 UPLOAD_LOCATION 變數。

工作者

變數描述預設值容器
IMMICH_WORKERS_INCLUDE僅運行這些工作者。server
IMMICH_WORKERS_EXCLUDE不運行這些工作者。匹配默認工作者,或者如果指定則匹配 IMMICH_WORKERS_INCLUDEserver
信息

有關當前工作者的資訊,可以在 這裡 找到。

埠配置

變數描述預設值
IMMICH_HOST監聽主機0.0.0.0
IMMICH_PORT監聽埠號2283 (server), 3003 (machine learning)

資料庫

變數描述預設值容器
DB_URL資料庫 URLserver
DB_HOSTNAME資料庫主機databaseserver
DB_PORT資料庫埠5432server
DB_USERNAME資料庫用戶postgresserver, database*1
DB_PASSWORD資料庫密碼postgresserver, database*1
DB_DATABASE_NAME資料庫名稱immichserver, database*1
DB_SSL_MODE資料庫 SSL 模式server
DB_VECTOR_EXTENSION*2資料庫向量擴展([vectorchord, pgvector, pgvecto.rs] 中的一個)server
DB_SKIP_MIGRATIONS是否在啟動時跳過執行遷移([true, false] 之一)falseserver
DB_STORAGE_TYPE優化 SSD 並發 IO 或 HDD 順序 IO([SSD, HDD])*3SSDserver

*1: DB_USERNAMEDB_PASSWORDDB_DATABASE_NAME 的值分別通過 docker-compose.yml 傳遞給 Postgres 容器作為 POSTGRES_USERPOSTGRES_PASSWORDPOSTGRES_DB

*2: 如果未提供,啟動時會透過檢查資料庫自動檢測要使用的適當擴展。如果同時安裝了多個擴展,優先順序為 VectorChord、pgvecto.rs 和 pgvector。

*3: 使用 postgresql.ssd.confpostgresql.hdd.conf,主要通過控制 Postgres 的 effective_io_concurrency 設定來支援 SSD 並發 IO 或 HDD 順序 IO。

信息

所有 DB_ 變數必須提供給所有 Immich 工作者,包括 apimicroservices

DB_URL 必須格式化為 postgresql://immichdbusername:immichdbpassword@postgreshost:postgresport/immichdatabasename。 您可以通過在 DB_URL 字符串末尾添加 ?sslmode=require 要求 SSL,或者添加 ?sslmode=require&sslmode=no-verify 要求 SSL 並跳過證書驗證。

DB_URL 被定義時,DB_HOSTNAMEDB_PORTDB_USERNAMEDB_PASSWORDDB_DATABASE_NAME 資料庫變數將被忽略。

Redis

變數描述預設值容器
REDIS_URLRedis URLserver
REDIS_SOCKETRedis socketserver
REDIS_HOSTNAMERedis 主機redisserver
REDIS_PORTRedis 埠6379server
REDIS_USERNAMERedis 用戶名server
REDIS_PASSWORDRedis 密碼server
REDIS_DBINDEXRedis 資料庫索引0server
信息

所有 REDIS_ 變數必須提供給所有 Immich 工作者,包括 apimicroservices

REDIS_URL 必須以 ioredis:// 開頭,然後包含一個 base64 編碼的 JSON 組態。 更多資訊可在上游 ioredis 文檔中找到。

當定義了 REDIS_URLREDIS_SOCKET 時,REDIS_HOSTNAMEREDIS_PORTREDIS_USERNAMEREDIS_PASSWORDREDIS_DBINDEX 變數將被忽略。

Redis (Sentinel) URL 示例 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 則禁用)300machine learning
MACHINE_LEARNING_MODEL_TTL_POLL_S檢查模型 TTL 的間隔時間(秒)(若 <= 0 則禁用)10machine learning
MACHINE_LEARNING_CACHE_FOLDER模型下載的目錄/cachemachine learning
MACHINE_LEARNING_REQUEST_THREADS*1請求線程池的線程數量(若 <= 0 則禁用)CPU 核心數量machine learning
MACHINE_LEARNING_MODEL_INTER_OP_THREADS模型並行操作的數量1machine learning
MACHINE_LEARNING_MODEL_INTRA_OP_THREADS每個模型操作的線程數2machine learning
MACHINE_LEARNING_WORKERS*2要生成的工作進程數量1machine learning
MACHINE_LEARNING_HTTP_KEEPALIVE_TIMEOUT_S*3HTTP Keep-alive 的時間(以秒計算)2machine learning
MACHINE_LEARNING_WORKER_TIMEOUT工作進程無響應的最大時間(秒),超過該時間後將其終止120(使用 OpenVINO 時為 300machine learning
MACHINE_LEARNING_PRELOAD__CLIP__TEXTUAL預加載並緩存的(文本)CLIP 模型的逗號分隔列表machine learning
MACHINE_LEARNING_PRELOAD__CLIP__VISUAL預加載並緩存的(視覺)CLIP 模型的逗號分隔列表machine learning
MACHINE_LEARNING_PRELOAD__FACIAL_RECOGNITION__RECOGNITION預加載並緩存的(識別)面部識別模型的逗號分隔列表machine learning
MACHINE_LEARNING_PRELOAD__FACIAL_RECOGNITION__DETECTION預加載並緩存的(檢測)面部識別模型的逗號分隔列表machine learning
MACHINE_LEARNING_ANN在支持的情況下啟用 ARM-NN 硬件加速Truemachine learning
MACHINE_LEARNING_ANN_FP16_TURBO使用 FP16 精度運行操作:在 ARM-NN 中提高速度但降低精度Falsemachine learning
MACHINE_LEARNING_ANN_TUNING_LEVELARM-NN GPU 調整級別(1: 快速,2: 正常,3: 全面)2machine learning
MACHINE_LEARNING_DEVICE_IDS*4在多GPU環境中使用的設備 ID0machine learning
MACHINE_LEARNING_MAX_BATCH_SIZE__FACIAL_RECOGNITION設定面部識別模型一次處理的最大人臉數量無(使用 OpenVINO 時為 1machine learning
MACHINE_LEARNING_PING_TIMEOUT檢查機器學習服務器是否可用時等待 PING 響應的時間(以毫秒計算)2000server
MACHINE_LEARNING_AVAILABILITY_BACKOFF_TIME機器學習服務器離線後多久再次嘗試連接30000server
MACHINE_LEARNING_RKNN在支持的情況下啟用 RKNN 硬件加速Truemachine learning
MACHINE_LEARNING_RKNN_THREADS啟動 RKNN 運行時進行推理的線程數量1machine learning

*1: 建議先調整此參數以改變機器學習服務的並發級別,然後再調整其他參數。

*2: 由於每個進程會在內存中複製模型,因此除非擁有充足的內存,否則不建議更改此值。

*3: 用於 K8S 中像 HPA 這樣的場景。例如 https://github.com/immich-app/immich/discussions/12064

*4: 使用多GPU需要將 MACHINE_LEARNING_WORKERS 設定為大於 1。每個工作進程按輪詢優先順序分配一個設備。

信息

雖然智慧搜索功能僅需要 textual 模型,但部分用戶可能會遇到首次搜索速度較慢的情況 這是由於備份過程觸發了其他模型載入到內存中,從而在完成之前阻止了其他請求。 為了避免這種情況,如果擁有足夠的內存,您可以預加載其他模型(visualrecognitiondetection)。

可通過管理界面調整其他機器學習參數。

Prometheus

變數描述預設值容器工作者
IMMICH_TELEMETRY_INCLUDE收集這些遙測數據。可以是 hostapiiorepojob 列表。注意:您也可以指定 all 來啟用全部serverapi, microservices
IMMICH_TELEMETRY_EXCLUDE不收集這些遙測數據。可以是 hostapiiorepojob 列表serverapi, microservices

Docker Secrets

以下變數支持使用 Docker secrets 以提高安全性。

要使用這些變數,需將常規環境變數替換為相應的 _FILE 環境變數。_FILE 變數的值應設為包含變數值的文件路徑。

常規變數相應 Docker Secrets _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: 請參閱 官方文檔 獲取 有關如何在 Postgres 映像中使用 Docker Secrets 的詳細信息。

*2: 請參閱 該評論 獲取在 Redis 容器中使用密碼的 Docker secret 示例。