目录与环境变量#
- 建议使用绝对路径。
- 样例目录
- /share/immich/library
- /share/immich/postgres
- 环境文件路径
- ~/.config/containers/systemd/immich/.env
mkdir -p /share/immich/{library,postgres}
mkdir -p ~/.config/containers/systemd/immich
.env 样例#
# 必填 - 改为绝对路径
UPLOAD_LOCATION=/share/immich/library
DB_DATA_LOCATION=/share/immich/postgres
# 版本标签
IMMICH_VERSION=release
# 时区
TZ=Asia/Tokyo
# 数据库
DB_PASSWORD=postgres
DB_USERNAME=postgres
DB_DATABASE_NAME=immich
Quadlet 网络与命名卷#
# ~/.config/containers/systemd/immich-network.network
[Network]
NetworkName=immich
[Install]
WantedBy=default.target
# ~/.config/containers/systemd/model-cache.volume
[Volume]
VolumeName=model-cache
[Install]
WantedBy=default.target
Valkey#
# ~/.config/containers/systemd/immich-redis.container
[Unit]
Description=Immich Redis (Valkey)
[Container]
Image=docker.io/valkey/valkey:8-bookworm
ContainerName=immich_redis
Network=immich
RestartPolicy=always
[Install]
WantedBy=default.target
Postgres#
# ~/.config/containers/systemd/immich-postgres.container
[Unit]
Description=Immich Postgres (vectorchord + pgvector)
After=network-online.target
Wants=network-online.target
[Container]
EnvironmentFile=%h/.config/containers/systemd/immich/.env
Environment=POSTGRES_PASSWORD=%E{DB_PASSWORD}
Environment=POSTGRES_USER=%E{DB_USERNAME}
Environment=POSTGRES_DB=%E{DB_DATABASE_NAME}
Environment=POSTGRES_INITDB_ARGS=--data-checksums
Image=ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0
ContainerName=immich_postgres
Volume=%E{DB_DATA_LOCATION}:/var/lib/postgresql/data
ShmSize=128m
Network=immich
RestartPolicy=always
[Install]
WantedBy=default.target
Machine Learning - CPU 基础版#
# ~/.config/containers/systemd/immich-machine-learning.container
[Unit]
Description=Immich Machine Learning
After=immich-redis.service immich-postgres.service
Wants=immich-redis.service immich-postgres.service
[Container]
EnvironmentFile=%h/.config/containers/systemd/immich/.env
Image=ghcr.io/immich-app/immich-machine-learning:%E{IMMICH_VERSION}
ContainerName=immich_machine_learning
Volume=model-cache:/cache
Network=immich
RestartPolicy=always
[Install]
WantedBy=default.target
Server - CPU 基础版#
# ~/.config/containers/systemd/immich-server.container
[Unit]
Description=Immich Server
After=immich-redis.service immich-postgres.service
Wants=immich-redis.service immich-postgres.service
[Container]
EnvironmentFile=%h/.config/containers/systemd/immich/.env
Image=ghcr.io/immich-app/immich-server:%E{IMMICH_VERSION}
ContainerName=immich_server
PublishPort=2283:2283
Volume=%E{UPLOAD_LOCATION}:/data
Volume=/etc/localtime:/etc/localtime:ro
Network=immich
RestartPolicy=always
[Install]
WantedBy=default.target
启动与管理#
systemctl --user daemon-reload
systemctl --user enable --now immich-network.network model-cache.volume
systemctl --user enable --now immich-postgres.service immich-redis.service
systemctl --user enable --now immich-machine-learning.service immich-server.service
# 查看日志
journalctl --user -u immich-server.service -f
journalctl --user -u immich-machine-learning.service -f
GPU 加速 - 总览#
- 只改两处:immich-machine-learning.container 与 immich-server.container。
NVIDIA - CUDA 推理与 NVENC 转码#
- 主机准备
- 安装专有驱动与 NVIDIA Container Toolkit(启用 OCI Hook)。
- 确认 usr/share/containers/oci/hooks.d 存在 nvidia hook。
- immich-machine-learning.container
[Container]
EnvironmentFile=%h/.config/containers/systemd/immich/.env
Image=ghcr.io/immich-app/immich-machine-learning:%E{IMMICH_VERSION}-cuda
ContainerName=immich_machine_learning
Volume=model-cache:/cache
Network=immich
Environment=NVIDIA_VISIBLE_DEVICES=all
Environment=NVIDIA_DRIVER_CAPABILITIES=compute,video,utility
Device=/dev/nvidiactl
Device=/dev/nvidia0
Device=/dev/nvidia-uvm
RestartPolicy=always
[Container]
EnvironmentFile=%h/.config/containers/systemd/immich/.env
Image=ghcr.io/immich-app/immich-server:%E{IMMICH_VERSION}
ContainerName=immich_server
PublishPort=2283:2283
Volume=%E{UPLOAD_LOCATION}:/data
Volume=/etc/localtime:/etc/localtime:ro
Network=immich
Environment=NVIDIA_VISIBLE_DEVICES=all
Environment=NVIDIA_DRIVER_CAPABILITIES=video,utility
Device=/dev/nvidiactl
Device=/dev/nvidia0
Device=/dev/nvidia-uvm
RestartPolicy=always
AMD - ROCm 推理与 VA-API 转码#
- 主机准备
- 安装 ROCm 运行时。
- 将用户加入 render 与 video 组。
sudo usermod -aG render,video "$USER"
newgrp render
- immich-machine-learning.container
[Container]
EnvironmentFile=%h/.config/containers/systemd/immich/.env
Image=ghcr.io/immich-app/immich-machine-learning:%E{IMMICH_VERSION}-rocm
ContainerName=immich_machine_learning
Volume=model-cache:/cache
Network=immich
Device=/dev/kfd
Device=/dev/dri
RestartPolicy=always
[Container]
EnvironmentFile=%h/.config/containers/systemd/immich/.env
Image=ghcr.io/immich-app/immich-server:%E{IMMICH_VERSION}
ContainerName=immich_server
PublishPort=2283:2283
Volume=%E{UPLOAD_LOCATION}:/data
Volume=/etc/localtime:/etc/localtime:ro
Network=immich
Device=/dev/dri
RestartPolicy=always
改动后重载#
systemctl --user daemon-reload
systemctl --user restart immich-machine-learning.service immich-server.service
映射目录与设备说明#
- Volume=%E{UPLOAD_LOCATION}:/data
- Immich 媒体与派生数据的根。
- 典型结构
- original/ 原始媒体
- thumbs/ 缩略图与预览
- encoded-video/ 转码缓存
- backup/ 应用内部备份
- faces/ clips/ index/ 特征与向量索引缓存
- Volume=%E{DB_DATA_LOCATION}:/var/lib/postgresql/data
- Postgres 数据目录。
- 结构
- base/ 表文件
- pg_wal/ 预写式日志
- global/ 全局元数据
- 其他系统目录
- Volume=model-cache:/cache
- Volume=/etc/localtime:/etc/localtime:ro
- Device=/dev/dri
- 暴露渲染节点给容器,开启 VA-API 或 QuickSync。
- Device=/dev/nvidiactl /dev/nvidia0 /dev/nvidia-uvm
- 直通 NVIDIA 设备,配合 OCI Hook 启用 CUDA 与 NVENC。
故障排查#
- 权限
- rootless 需加入 render、video 组。检查 ls -l /dev/dri。
- 编码失败
journalctl --user -u immich-server.service -f
- Intel 可尝试设置 LIBVA_DRIVER_NAME=iHD。
- CUDA 不可见
- 检查 NVIDIA OCI Hook 是否存在。
- 确认容器内可运行 nvidia-smi。
- 模型重复下载
- 确认 /cache 已挂载命名卷 model-cache。
感谢您的耐心阅读!来选个表情,或者留个评论吧!