前段时间在群晖上折腾immich,查了一堆在线的文档,跟AI也讨论了不少,发现一件本来很简单的事情被搞得过于复杂了。

简单来说,immich本身是很易于安装和配置的,在国内的环境下,主要困难在于:

  1. 需要hf镜像以下载大模型
  2. 需要docker-hub镜像以下载immich

接下来以普通的群晖 DS220+这款家用 2-bay NAS 为例,简单记一下如何从头开始配置 immich 。

环境配置

DSM版本		7.3.2
设备型号		Synology DS220+
设备CPU		Intel(R) Celeron(R) J4025
MemTotal:	10031252 kB (10GB)

注:Immich 比较吃内存,建议加过内存的机型折腾,我这里加到了 10GB。

然后:

  • 群晖上需要安装 Container Manager
  • 打开 Container Manager / 镜像仓库 / 设置,添加一个镜像地址。我用的是轩辕,充一点钱可以用好久,除了这个以外,网上的所谓免费镜像都用不起来。
  • 在群晖的控制面板里,新增一个文件夹,我这里用的是docker作为名称。
  • docker下新建immich文件夹,后续所有的操作都在这个文件夹下进行。

下载和编辑immich的示例配置

前往 immich 的发布页,下载最新版的以下文件:

  • docker-compose.yml
  • example.env
  • hwaccel.ml.yml (如果你有独立显卡,本例不涉及)
  • hwaccel.transcoding.yml (如果你有独立显卡,本例不涉及)

编辑.env

打开 example.env,原始内容如下:

1
2
UPLOAD_LOCATION=./library
DB_DATA_LOCATION=./postgres

按照这个配置,在群晖/docker/immich下,新建librarypostgrescache文件夹。

文件夹结构如下:

1
2
3
4
/docker/immich (你的 immich 根目录)
└── library
└── postgres
└── cache

现在把example.env重命名为.env,放到群晖/docker/immich下。

编辑docker-compose

打开docker-compose.yml

  • 如果你跟我一样使用了轩辕的镜像,那把image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}这一行,替换为你的url。如:image: {key}-ghcr.xuanyuan.run/immich-app/immich-server:${IMMICH_VERSION:-release}
  • 在immich-server节点下的volumes配置中,添加一行 - /volume1/photo:/usr/src/app/external,注意缩进和对齐
  • ports下默认的2283:2283端口映射不需要改,当然也可以改成如9527:2283,这样就可以通过9527端口来访问。
  • immich-machine-learningimmich_redis, immich_postgres的image路径也改为轩辕的镜像地址,其他的不需要变。
  • immich-machine-learning 下的 volumes 改为:- ./cache:/cache

如果你可以正常拉取docker镜像的话就不需要配置轩辕镜像了。这种情况下只需要配置一下volumes就行。

完成后将docker-compose.yml也放到群晖/docker/immich下。

构建项目

打开Container Manager / 项目 / 新建项目,项目名称随便填,“路径”选择我们之前放.env/docker-compose.yml的地方,也就是 /docker/immich ,“使用现有的 docker-compose.yml 来创建项目”,然后按向导说的做,一路下一步就行。

暂时不需要配置web station

等构建完成后,就可以通过LAN输入 ds220主机名称:2283 来访问了。

不能访问?

先在 Container Manager 里看一下 immich_server 的 ip地址,如172.20.0.5

打开群晖【控制面板】/【安全性】/【防火墙】/【编辑规则】,添加一条规则,【端口】写2283,来源写全部,【允许】。应该就可以了。

下载大模型

immich 支持文字识别和人脸识别功能,在纯CPU模式下,我打算用最小的模型来凑合。

  • 打开huggingface,创建一个新的token。
  • Token Type选择Read
  • 复制 hf_ 开头的一长串token,以下称之为 {token}

找个本地磁盘的位置打开终端,然后运行以下命令(需要安装有python)

1
2
3
4
5
6
7
pip install hf_cli
pip install hf_transfer
$env:HF_ENDPOINT = "https://hf-mirror.com"
$env:HF_TOKEN = "{token}"
$env:HF_XET_HIGH_PERFORMANCE = "1"
hf download immich-app/buffalo_s --local-dir ./buffalo_s
hf download immich-app/ViT-B-32-SigLIP2-256__webli --local-dir ./ViT-B-32-SigLIP2-256__webli

将下载好的2个模型文件夹放到 docker/immich/cache 下,目录结构:

1
2
3
4
5
/docker/immich/cache
└── facial-recognition
└── buffalo_s
└── clip
└── ViT-B-32-SigLIP2-256__webli

然后打开immich的系统管理后台,在机器学习设置里配置一下两个模型的名称。

智能搜索:CLIP模型使用`ViT-B-32-SigLIP2-256__webli`
人脸识别:模型使用`buffalo_s`

外部库

因为我的immich是作为Synology Photos的并行方案,所以我是通过外部库挂载的方式导入图像的。

在immich系统管理的外部库中,新建一个外部库,文件夹设置为 /usr/src/app/external ,其他使用默认值即可。

完成。