Immich 是什么:开源相册方案

一个对标 Google Photos 的开源项目

Immich 是一个活跃在 GitHub 上的开源相册项目,定位非常明确:做一个可以自托管的相册,体验对标 Google Photos。从功能清单上看,它几乎覆盖了云相册的核心体验:手机自动备份、按时间线浏览、人脸识别聚类、地图轨迹、智能搜索、共享相册,以及一个设计得相当现代的网页端。

让 Immich 在一众自建相册中脱颖而出的,是它的完成度。很多开源相册项目只实现了图片展示,一到人脸识别、机器学习这类需要模型支持的功能就止步于概念,或者需要用户自己找模型、配环境。Immich 把机器学习做成了服务栈的一部分:部署时自动带起一个独立的机器学习微服务,人脸识别和智能搜索开箱即用。这一点对没有算法背景的普通用户来说至关重要——你不需要理解什么是向量化、什么是模型推理,部署完它已经会认人了。

项目的迭代速度也值得一提。Immich 的版本发布相当频繁,几乎每隔一段时间就有新版本,功能补齐和问题修复都在持续推进。活跃的社区意味着遇到问题更容易搜到答案,也意味着这个项目在可预见的未来不会突然停更。当然,频繁迭代也带来了运维上的要求——升级前要备份、大版本别急着追第一天升级,相关内容在后面的运维章节会展开。

它能做什么:功能地图

拆开看,Immich 的功能可以分为四层,下面从下往上理解。

第一层是备份与存储。手机 App 后台自动备份照片和视频,网页端可以批量上传,文件按拍摄日期规整存放。备份是增量式的——删过的照片不会重复上传,同一张照片在多个相册里也只占一份空间。备份策略可以细到按网络区分:家里 Wi-Fi 下备份原片,移动网络下备份压缩版,流量和空间都由你控制。

第二层是浏览与查找。时间线按日期组织所有照片,搜索框支持按地点、人物、场景关键词查找。你可以在搜索框里输入一个城市名字,所有在那里拍的照片都会列出来;配合地图视图,一次旅行可以沿着轨迹在地图上重走一遍。这种体验正是云相册用户最舍不得的部分。

第三层是智能能力。人脸识别自动把同一个人物的照片聚在一起,给每个人物起个名字就能点击查看;机器学习微服务还提供语义搜索,用描述性的语言找照片,比如搜索傍晚、海边这类词语也能命中相关照片。人物分组、重复检测、相似照片整理都由这一层承担。

Immich 功能的四层结构

第四层是共享与协同。共享相册可以让家人加入,外链分享可以把照片发给没有账号的朋友,权限粒度可以收到只读或仅特定相册。共享相册里的成员可以上传照片,也可以只看不动,由管理员决定。

功能 Immich 云相册典型形态
手机自动备份 有,官方 App 有
时间线浏览 有 有
人脸识别 有,本地运行 有,云端运行
地图轨迹 有,读取 EXIF 有
语义搜索 有,本地模型 有,云端模型
共享相册与外链 有 有
数据存储位置 自己的硬盘 平台服务器
费用 免费 订阅制

还有一点容易被忽略:Immich 的网页端不仅是管理后台,它本身就是完整的浏览界面。在没有手机的情况下,任何一台能开浏览器的电脑都是你的相册入口。对偶尔需要在电脑上整理照片、或者给不装 App 的家人演示照片的场景,这一点比想象中实用。

从结果上看,它也确实是目前最接近云相册体验的开源方案:打开网页端你会感到熟悉,时间线、地图、人物分组的位置都和主流云相册接近。对从云端迁移过来的人,熟悉的界面本身就能降低迁移的心理门槛——操作直觉还在,换的只是数据放在谁手里。加上开源协议下没有功能墙、不按人头收费,它对家庭用户而言是一种确定性很高的选择。

架构速览:为什么是全家桶

用过单文件相册软件的人可能会好奇:为什么 Immich 的 Docker Compose 文件里排着五六个服务?这是它把功能做完整的代价,也是它架构清晰的地方。

核心是 server 服务,负责所有业务逻辑和接口;web 是网页前端,界面文件由它提供;machine-learning 是机器学习微服务,人脸识别和搜索向量都在这里计算;redis 做缓存,让时间线滑动足够流畅;postgres 数据库存照片元数据、用户信息、人脸分组结果。几个服务各司其职,互相协作,这正是 Docker Compose 最典型的用法——一个命令把整组服务拉起来,一起停,一起起。

Immich 服务架构:请求如何流转

这种拆分带来三个直接好处。第一是隔离,网页端更新不会影响核心服务;第二是可替换,机器学习服务可以单独配置,显存不够就换小模型;第三是可扩展,照片多了之后每个服务可以单独调整资源配额。部署时所有的卷映射都列在同一个 Compose 文件里,改的就是路径和密码这种参数。

值得一提的是各组件之间的耦合被刻意做得很松。数据库里只存元数据和向量,照片文件始终是独立的普通文件;缓存挂了只是慢一点,服务之间不会互相拖死。这种设计在出问题时会救你:某一环日志里报了错,你可以单独重启那一个服务,而不必整套推倒重来。对还在学习曲线上的新用户而言,这意味着犯错的成本被摊薄到了单个服务级别。

服务 职责 出问题时的表现
server 业务逻辑与接口 页面打不开
web 网页前端文件 界面样式异常
machine-learning 识别与搜索 人脸分组不更新
redis 缓存 时间线变慢
postgres 元数据存储 登录与读取失败

对没接触过 Docker Compose 的读者,推荐先翻一翻《自建 NAS 完全指南》 里的容器章节,理解了容器、镜像、卷映射这几个概念,后面的部署操作就是照着改参数而已。如果你的 NAS 是群晖,也可以参考《群晖 DSM 实用指南》 中关于套件与容器并存的章节,那里的经验同样适用。

从零开始的部署体感

很多人对自建相册的顾虑停留在操作层面。这里先给个大致的轮廓,后面的章节会逐步拆开讲。整个流程概括起来是四步:拉取官方的 Compose 文件、改几个路径和密码、启动服务、完成初始账号设置。没有需要编译的源码,没有需要手动配置的依赖,全程跟着官方文档走,大多数人可以在一个下午之内完成。

部署之后需要投入的日常精力同样有限。第一次全库扫描完成、家人手机都装上 App 之后,剩下的事就只有偶尔的版本升级。升级也是一条命令的事,只是要点出备份这个前置动作。换句话说,自建的折腾集中在前期的学习曲线,进入稳态之后,它和套件的使用体验没有本质差别。

阶段 大致耗时 是否一次性
前期规划 一个小时 是
首次部署 两到四个小时 是
全库扫描 视机器和照片量而定 是
日常增量 无感 持续自动
版本升级 每次十几分钟 周期性

从零上手的五个阶段

谁在维护,能放心用吗

一个自建方案值不值得投入时间,很大程度上取决于项目的可持续性。Immich 是社区驱动的开源项目,代码公开,问题跟踪公开,任何功能的实现和走向都看得见。它的社区相当活跃,贡献者不少,文档也比较完整,这种透明度本身就是一种保障——和闭源产品相比,你不必担心某天它被改成一个你不认识的样子,也不必担心某个功能被悄悄下架。

开源不等于可以盲目信任,几件事情仍然要自己上心。首先是数据备份——软件是免费的,数据是自己的,硬盘坏了没有任何客服能帮你找回照片,这部分在数据库与备份一章会给出可照做的方案。其次是升级节奏——版本更新频繁是好事,但每次动手前都该先备份再升级。最后是合理预期——它是软件就会有不足,个别功能不如商业产品细致是常态,但它换来了完全的控制权和零订阅费。

另一个常被问到的顾虑是没人兜底。客服确实没有,但开源社区提供了一种不同形式的保障:你遇到的每个坑几乎都有人先踩过,搜索一下就能找到解法。而且因为代码公开,安全问题是由公开讨论、公开修复的方式推进的,漏洞修了就修了,不存在捂着不说的动机。

选型时的考量维度

小结

Immich 是一个完成度相当高的开源相册方案:功能上覆盖了云相册的核心体验,架构上用 Docker Compose 全家桶把各部分拆得清晰可替换,项目本身迭代活跃、社区健康。它不省心,但它在控制权、成本和功能三个维度上同时站住了。下一章我们把它和成品方案正面对比一下,看看你的情况更适合哪一条路。

延伸阅读