现在人们都喜欢用手机随手一拍来记录生活中的美好瞬间,聚会、美食、重要时刻、旅行中的点滴...可能对于大多数人来说,照片占了手机存储空间的大部分。在手机突然损坏、丢失或者更换手机的时候,这些照片处理起来就比较麻烦。所以手机相册备份尤为重要。
在以前用的一刻相册来备份,那会儿他号称无限空间吸引了我。但是,最后都是为了盈利:越到后面越难用,大文件备份不了,下载也受限,除非充会员,直接放弃了。
中间有一段时间,都是手机接上数据线,定期往电脑上去拷贝,平时就放在电脑。也只是偶尔翻出来浏览一下。不利于随时查看。
现在的手机相册都非常智能,支持智能识别识别,支持地图标记,支持将一段时间的照片制作成短视频。
能支持备份,又拥有手机相册这么智能的方案,这里列举几个:
对于我个人来说,商用网盘,除了付费之外,那天不知道策略又改了,增加点功能,又需要增加会员了。
而家用NAS的方案呢,对我个人来说有点臃肿了,我就想备份照片。而家用NAS带的影音中心这些,其实都用不到,而且很多NAS设备,为了更好得看扩展,增加了容器的支持,增加了虚拟化的支持,其实是把NAS当服务器了,那我为什么不在一个服务器上通过容器来部署一套相册备份的服务呢。
查了一下immich这个就是为了这个场景而生的开源产品。
immich 是一个高性能的照片和视频自托管工具,让我们能够完全掌控自己的媒体文件,支持Android和iOS的客户端。同时最关键的其强大的AI能力,支持智能识别,支持以文搜图,媲美很多商业软件了。
采用immich本地部署之后,可以方便快捷的备份手机相册。另外他的开源社区也比较活跃,功能也越来越多。
官方地址:https://immich.app/
项目地址:https://github.com/immich-app/immich
官方建议采用容器部署。硬件要求最小2核心CPU、4G内存,这完全可以安装在软路由上。
docker compose安装
wget -O docker-compose.yml https://github.com/immichapp/immich/releases/latest/download/docker-compose.yml
wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.env
以上文件名最好都保持一致,尤其.env,否则需要修改compose.yml里面的信息,里面会用有指定.env的信息。
.env里面配置了是一些配置信息,会传递到容器里面去。具体修改的地方包括
UPLOAD_LOCATION: 存储的位置,这个是运行容器的机器的位置,可以是绝对路径。这里可以指定一个容量大的磁盘路径。
DB_DATA_LOCATION:数据库文件,根据实际情况指定即可。
TZ:时区信息,这里就指定Asia/Chongqing即可。
IMMICH_VERSION:版本,当前的最新是v1.121.0,或者保持默认
DB_USERNAME:保持默认即可
DB_DATABASE_NAME:保存默认即可
这里是我修改完成后的,供参考:
# This file is auto-generated by openmediavault (https://www.openmediavault.org)
# WARNING: Do not edit this file, your changes will get lost.
# environment file for immich
#
# You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables
# The location where your uploaded files are stored
UPLOAD_LOCATION=/nasdir/DICM
# The location where your database files are stored
DB_DATA_LOCATION=/nasdir/immpgdb
# To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
# TZ=Etc/UTC
TZ=Asia/Chongqing
# The Immich version to use. You can pin this to a specific version like "v1.71.0"
IMMICH_VERSION=v1.121.0
# Connection secret for postgres. You should change it to a random password
# Please use only the characters `A-Za-z0-9`, without special characters or spaces
DB_PASSWORD=postgres
# The values below this line do not need to be changed
###################################################################################
DB_USERNAME=postgres
DB_DATABASE_NAME=immich
配置完成之后,直接启动即可
docker compose up -d
up过程中,需要拉取如下镜像:一个server端,一个机器学习的(主要用于人脸识别,以文搜图等),两个数据库redis和postgres。其中server端和机器学习的镜像tag带了个参数,从env文件获取。
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
image: docker.io/redis:6.2-alpine@sha256:eaba718fecd1196d88533de7ba49bf903ad33664a92debb24660a922ecd9cac8
image: docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0
镜像拉取比较慢,命令行,建议开个tmux,后台跑。
容器都启动正常之后,可以通过http://ip:2283
登录(端口可以自己定义,需要修改docker-compose.yml文件)
使用主要分为web端和app端。
首次登录,按照提示创建管理员用户,填写邮箱,输入密码即可创建用户了。语言也可以顺带改成中文了。
登录之后,可以进行日常的管理。
这里有一个比较有用的功能,新增账户。
在一个家庭里面多个人员都可以使用这个环境进行备份。填写邮箱,密码等信息。这里有一个比较关键的配置:配额,即限制这个用户可以使用的存储空间。
手机端支撑android和ios。可以到如下地方进行下载,根据自己的情况选择吧。
手机app首次使用需要指定服务器的地址:这里我用ddns-go绑定了ipv6,可以在外网也轻松访问。具体配置参考 OpenWrt配置和使用DDNS-GO
然后输入web端创建的用户名和密码,登录。 想要备份照片,选择上传然后选择需要备份的相册,然后开始上传。
可以设置开启后台或者前台备份任务,后续手机里面正常新增的照片,会自动同步到服务端。
上手基本没任何难度,非常友好。 上传过程中,会自动提取照片的元数据(包括什么时间、地址、什么设备照相的等),便于后面的AI能力。
至此,作为一个相册备份,基本功能就完成了。在家庭局域网内备份速度基本在40MB/s, 至此,你独享的相册空间就可以使用了。
默认带的地图是英文的,看起来不是很习惯。不过immich提供了设置地图样式的方法。 web端登录之后,右上角账户部分,点击找到管理,然后设置,地图与GPS设置
这里有深色和浅色的地图style。 这个需要到https://cloud.maptiler.com/
去创建一个地图,然后发布。具体操作如下:
maptiler这个站点需要魔法才能登录,这个自行找方法吧
登录之后创建地图,
在页面上选择右下角的【CUSTOMIZE】。进入下面的页面后,点击左侧把语言更改为中文
然后保存发布,再回到主页点击刚刚创建的地图,查看调用的链接,这里选择vector style。
填写完成保存后,在wed端或者手机端的immitch上就可以看到中文的地图了。
immich作为一个相册备份,功能还是非常全面的。部署在家庭网络环境中,可以部署在软路由上,外接一个1T或者2T的数据盘,完美满足家庭的备份需求,完全可以媲美各种商用的网盘。
作为开源方案,immich本地部署可以让我们也避免了无休止的会员。另外也避免了个人信息的泄露。
另外,其带的AI的功能,可以在极低的配置环境上,实现智能搜索,人脸识别等功能。
如果你也有需求,赶紧上手试一下吧。