探索Immich:Windows下高效的相片备份整理工具

发表时间: 2024-06-04 10:43

#理想家生活#

本内容来源于@什么值得买APP,观点仅代表作者本人 |作者:瞎折腾的地产狗



最近某新发售的成品NAS好像系统评价不是那么好,想用好还是得自己折腾,不如从现在就开始折腾。

之所以首先是选择要说的项目Immich,是因为对于很多人来说存储相片也算他们购买NAS的一个重要原因,特别是那些有娃的家庭。正如项目作者所说,他做这个是因为他老婆想要一个方便易用免费的的与一个不愿透露姓名的应用程序功能相当的相片备份管理工具(我也不知道这个
App-Which-Must-Not-Be-Named到底是何方神圣)。而且你只要不是大量储存RAW图片和长的不行的视频,硬盘占用空间也不大,你甚至可以不着急去添置硬盘,非常适合于不太付出额外成本的前期体验,也可以帮助你自己确定自己到底有没有相关的存储需求。

本项目用docker部署后续想要转移到其他机器也提供方便,只需要将挂载的文件夹和配置文件复制一份就行了。

简单介绍一下Immich,一个开源免费的照片备份管理工具,有手机app和网页端两个客户端来访问后端的服务端。网页端目前只有英文,但是因为是网页,可以用浏览器翻译。app可以选择中文语言。

官方网址如下:https://immich.app/

github地址:
https://github.com/immich-app/immich

网页版的示例图在上一篇文章讲NAS的时候提到过。主要的功能有上传备份后按时间线排列相片,自动按照时间线分文件夹及命名,自动转码视频(可以设置硬件加速),自动机器学习标注图片标签(可以设置硬件加速),分享相册(需要你分享的人也能访问到你的相册网页,比如你有公网ip或者进行内网穿透),多用户管理等等。

当前项目还是在快速的迭代更新当中,所以一是注意你部署的服务端版本和你的客户端app版本要匹配,二是作者不建议用来作为唯一的照片备份位置,你可以在上传备份后前往项目的照片文件夹里面复制出来再备份一份,这样也更满足多次备份保障数据安全性的要求。

安装需要使用到docker,Windows下安装docker的方法可以参考前一篇文章。

本文主要内容:

  1. 以Immich为例走一遍docker compose的流程
  2. 提供一点网络访问问题的解决思路

一、前置准备

按照Immich项目网站的推荐,本次使用docker compose文档来进行部署。首先保证我们打开了docker desktop,然后我们以管理员身份运行powershell。同时我们再做一些准备工作,在你准备统一管理docker的盘创建一个docker文件夹,例如我的就在D:docker,然后再在docker文件夹下新建一个文件夹immich,然后我们进入powershell,输入以下命令,进入这个文件夹。


cd D:dockerimmich # 注意换成你自己的路径,不知道这个斜杠为什么显示不出来

然后下载最新的docker compose.yml以及环境配置文件.env

可以使用命令下载

wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml

wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.env

也可以从后面这个网址用浏览器下载下来,然后将example.env重命名为.env

硬件加速的两个插件目前也是实验性的,有需求可以自行看看文档,不过实话说我intel8500分了4个核出来能跑到大概1秒5张图左右的人脸识别,其实不用加速也行。

下载后首先我们编辑.env文件,打开方式选择文本文档,注意取消勾选始终用该程序打开,默认的应该如下,注释里面我改了一下中文,请根据需要编辑

# 上传文件存储的路径,可以考虑放到你的机械硬盘去

UPLOAD_LOCATION=./library

# 数据库文件存放地址,看你具体相片多少,默认也行,或者改到你的机械盘

DB_DATA_LOCATION=./postgres

# immich版本号,一般默认用release就行

IMMICH_VERSION=release

# 可以修改一个密码,不需要记住,因为记录在这个文件里面,忘了打开看就行

DB_PASSWORD=postgres

# 以下不用改

###################################################################################

DB_USERNAME=postgres

DB_DATABASE_NAME=immich

如果想看更多的设置变量,可以参阅下面的网址

https://immich.app/docs/install/environment-variables

然后是编辑docker compose.yml文件,如果需要硬解可以考虑阅读文档中的这两个部分,注意硬解暂时不支持核显,由于我部署的机器只有核显,所以我跳过了这个部分。

https://immich.app/docs/features/ml-hardware-acceleration

https://immich.app/docs/features/hardware-transcoding

只提几个我个人觉得需要改的点吧,machine learning这个容器里面会有涉及到去huggingface下模型,这网站访问不了的建议把我下面写的使用镜像站的环境变量解除注释。同时建议把model-cache直接映射出来,实在下不动就用别人下好的或者自己去镜像站下,但是我对比了一下几个文件的metadata的最后一行还是不一样,没有测试是不是能正常运行。

同时我建议删掉的redis和postgres的镜像指定通过hub.docker的注册表来获取镜像,至少在当前版本没啥问题。

目前是v1.105.1这个版本的,其他版本有可能文件会不一样,全文太长,所以我只写我觉得要改的地方的进行了注释,其他地方就用省略号代替了。

# 如果说有数据库读取不了的问题,或者说部署成功了但是确打不开网站,多半是用户权限的问题

# 尝试解决办法,直接每个容器在container name下面增加一行user:"你的用户名" 或者user: "0:0",windows上应该不会出这个问题,但是群晖和PVE的lxc里面可能会有

name: immich

services:

immich-server:

......

ports:

- 2283:3001 #可以修改2283到你主机不冲突的任意你喜欢的端口

......

immich-microservices:

......

immich-machine-learning:

......

volumes:

- model-cache:/cache # 这里使用的是后面增加的一个卷,但是又不用共用数据,我是把它直接映射到了./model-cache

# 如果你的网络环境不能直连huggingface,可以尝试写入以下环境变量,删除前面额#就行,但是要注意缩进对齐

# environment:

# - HF_ENDPOINT: https://hf-mirror.com

......

redis:

container_name: immich_redis

image: registry.hub.docker.com/library/redis:6.2-alpine@sha256:84882e87b54734154586e5f8abd4dce69fe7311315e2fc6d67c29614c8de2672

# 这个镜像指定了去hub.docker找,但是这个网站访问不了,要么你想办法访问,要么就把前面的registry.hub.docker.com/删了,当前版本应该不会出问题

restart: always

database:

container_name: immich_postgres

image: registry.hub.docker.com/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0

# 这个镜像指定了去hub.docker找,但是这个网站访问不了,要么你想办法访问,要么就把前面的registry.hub.docker.com/删了,当前版本应该不会出问题

........

volumes: # 如果你前面跟我一样没用这个卷而是直接映射,那就把这两排全删了

model-cache:

我们可以看到一般的配置文件而言我们需要重点修改的地方有以下几处,一是ports这个字段下面的端口映射(只用修改主机的端口,即冒号前面那个),二是volumes这个字段下面的本地磁盘挂载(同样也是只用修改冒号前面那个,而且要记得在主机里提前创建好。当然这个项目他的挂载是在.env这个文件里面调整的,yml文件中只是读取.env里面的变量),三是environment这个字段下的环境变量设置,这个需要阅读项目的文档。

从以上这两个文件他总共挂载了至少两个文件夹,一个是上传文件夹,一个是数据库文件夹,需要你在.env文件中输入的这两个文件夹路径的地方新建这两个文件夹,例如默认的就是在immich文件夹中新建library和postgres这两个文件夹。如果你和我部署的一样把model-cache直接映射了,那还需要新建一个model-cache文件夹。如果你的路径设置的是其他地方,那就在你设置的地方新建这几个文件夹。

按照默认的.env设置的话我们目前的目录结构应该是这样的

docker/

├── immich/

├── docker-compose.yml

├── .env

├── library/

├── postgres/

└── model-cache/ # 如果你改了要挂载这个文件夹就新建,没改就不用

二、安装和设置Immich

完成上述配置文件设置和文件夹创建之后回到powershell界面,输入以下命令即可启动

docker compose up -d

成功运行的标志就是在浏览器输入127.0.0.1:2283(如果你没改端口号,改了就是你改了的那个)就可以访问项目了。这个时候docker desktop显示项目已经运行,有5个容器。

网页端现在就可以输入邮箱密码进行注册,第一个注册的就是管理员账户

然后就可以登录并开始一些基础设定,第一页主题可选白色还是黑色,第二页是文件存储模板,点击enable最后的滑块可以启动,然后就可以自己设定储存文件名的模板,你可以在preset里面去选他预设的,也可以自己根据上面的variables变量在template行直接输入,文件名的预览会在preview下面显示,之后选择done则可以

然后就可以进入相册界面了,如图

然后我们点击administration先进行管理设定,主要说说用户管理,其他的可以自行尝试,虽然是英文吧,你可以点浏览器的自动翻译就行,翻译结果八九不离十。我就直接点翻译了,省得再标注一遍。

在user选项卡先点击这个编辑按钮,可以修改你自己的邮箱、密码和配额(最大总可以占用的空间),最后是存放目录的名字,默认是admin,如果你在修改之前已经上传了相片,请改完之后到旁边的jobs里面去找Storage Migration Job(存储转移工作),点击一下启动。

修改完之后点击确认,然后如果还需要其他用户,再点击create user创建用户,创建信息如下

新用户可以拿着你给他的邮箱和密码登录,你可以选择要不要他在第一次登陆的时候改密码,以及设置他的名字和配额大小。

然后就开始上传相片了,同时也可以手机上下载APP了

APP下载地址(安卓):

https://github.com/immich-app/immich/releases/download/v1.105.1/app-arm64-v8a-release.apk

或者也可以使用Google play、苹果App Store、F-droid(这个版本感觉会比较旧)等应用商店下载。

手机app使用需要连接到你这个服务器上,公网连接和内网穿透后面应该会专门写一篇文章,现在先按照局域网内同一个路由器下连接。需要你跑docker这台电脑的ip地址,并且你们要在同一个网段内,假设说你已经按照安装docker那篇文章设定了你的主机ip固定为192.168.1.10,那么你就在登录地址输入http://192.168.1.10:2283(端口号还是按你实际的来),然后就是你账号的邮箱和密码,就可以登录完成。点击app左上角那个长得就像云的按钮,进入之后先选择你要备份的文件夹,然后点击下方上传即可。同时备份页左上角的齿轮点进去可以开启前台自动和后台自动备份功能。只是说目前app上还没有释放已备份项目空间的功能,只能自己手动删除图片释放空间。

上传之后在管理设定administration里面的jobs选项卡可以看到相册正在进行的工作,比如转码,识别等等。如果识别有问题特别慢,可以进docker desktop来看看,如果下方显示的CPU占用相当低(如果不超过10%),可以点进machine_learning看logs,一般来说会发现下载失败或者下载卡住了。(如果你设置了hf镜像站那一行的环境变量,一般不会提示连接不上,只是可能就是下载卡住了,没啥特别好的办法多只有等等吧。)

实在不行你可以尝试去hf-mirror下载模型或者从我提供的网盘下,完整的model-cache的文件夹结构、模型文件和安卓apk可以到我的公众号瞎折腾的地产狗后台回复immich获取,模型名字就是
immich-app/ViT-B-32__openai和immich-app/buffalo_l,网站或者网盘下载后按照文件夹结构把对应的oonx模型文件先放进去。其他的像.huggingface文件夹里面的metadata之类的我呢减因为最后一行的数据还是有不一致(不太清楚是时间戳还是什么),暂时就不提供网盘下载了,等系统自己生成下载,因为大小很小应该不会卡住。

如果说有相片没有记录GPS信息的,网页端和手机端都可以多选批量增加地址信息,只是网页端好像不能直接输入经纬度。

另外需要注意的是你删除后的相片如果还在垃圾箱内,但是你有重新上传了,那么会被识别为重复图片。

三、更新

由于软件在快速迭代中,更新的频率可能会比较高,正常来说如果有小版本更新的话直接在immich文件夹内使用如下命令即可

docker compose pull && docker compose up -d

# 重新拉取最新镜像然后重新构建启动容器

然后可以从以下网址看看发布的breaking change的版本,这种版本的yml文件里面的端口号以及磁盘挂载逻辑这些可能会有变动,最好是下载一份最新的yml和env文件来看看有些啥变化,app的版本可能也会要跟着一起更新才能访问

https://github.com/immich-app/immich/discussions?discussions_q=sort:date_created+label:breaking-change

不过如果能正常使用,而且breaking change也不是为了修正安全问题,更不更新其实问题不算特别大。

即便是更新失败了,你的相片依然还是存放在你设置的上传文件夹里面的,而且依然保持的是图片的格式。所以不用特别紧张。平时也可以将上传文件夹在其他硬盘备份一份。

最后,Immich作为一款开源免费的照片备份管理工具,操作的便捷性和体验感在我看来至少还是可以和群晖photos持平的,AI识别上比群晖更好一点作为初步尝试NAS功能来说,Immich是一个值得体验和折腾的项目。

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~