Immich 是什么:开源相册方案
一个对标 Google Photos 的开源项目
Immich 是一个活跃在 GitHub 上的开源相册项目,定位非常明确:做一个可以自托管的相册,体验对标 Google Photos。从功能清单上看,它几乎覆盖了云相册的核心体验:手机自动备份、按时间线浏览、人脸识别聚类、地图轨迹、智能搜索、共享相册,以及一个设计得相当现代的网页端。
让 Immich 在一众自建相册中脱颖而出的,是它的完成度。很多开源相册项目只实现了图片展示,一到人脸识别、机器学习这类需要模型支持的功能就止步于概念,或者需要用户自己找模型、配环境。Immich 把机器学习做成了服务栈的一部分:部署时自动带起一个独立的机器学习微服务,人脸识别和智能搜索开箱即用。这一点对没有算法背景的普通用户来说至关重要——你不需要理解什么是向量化、什么是模型推理,部署完它已经会认人了。
项目的迭代速度也值得一提。Immich 的版本发布相当频繁,几乎每隔一段时间就有新版本,功能补齐和问题修复都在持续推进。活跃的社区意味着遇到问题更容易搜到答案,也意味着这个项目在可预见的未来不会突然停更。当然,频繁迭代也带来了运维上的要求——升级前要备份、大版本别急着追第一天升级,相关内容在后面的运维章节会展开。
它能做什么:功能地图
拆开看,Immich 的功能可以分为四层,下面从下往上理解。
第一层是备份与存储。手机 App 后台自动备份照片和视频,网页端可以批量上传,文件按拍摄日期规整存放。备份是增量式的——删过的照片不会重复上传,同一张照片在多个相册里也只占一份空间。备份策略可以细到按网络区分:家里 Wi-Fi 下备份原片,移动网络下备份压缩版,流量和空间都由你控制。
第二层是浏览与查找。时间线按日期组织所有照片,搜索框支持按地点、人物、场景关键词查找。你可以在搜索框里输入一个城市名字,所有在那里拍的照片都会列出来;配合地图视图,一次旅行可以沿着轨迹在地图上重走一遍。这种体验正是云相册用户最舍不得的部分。
第三层是智能能力。人脸识别自动把同一个人物的照片聚在一起,给每个人物起个名字就能点击查看;机器学习微服务还提供语义搜索,用描述性的语言找照片,比如搜索傍晚、海边这类词语也能命中相关照片。人物分组、重复检测、相似照片整理都由这一层承担。

第四层是共享与协同。共享相册可以让家人加入,外链分享可以把照片发给没有账号的朋友,权限粒度可以收到只读或仅特定相册。共享相册里的成员可以上传照片,也可以只看不动,由管理员决定。
| 功能 | Immich | 云相册典型形态 |
|---|---|---|
| 手机自动备份 | 有,官方 App | 有 |
| 时间线浏览 | 有 | 有 |
| 人脸识别 | 有,本地运行 | 有,云端运行 |
| 地图轨迹 | 有,读取 EXIF | 有 |
| 语义搜索 | 有,本地模型 | 有,云端模型 |
| 共享相册与外链 | 有 | 有 |
| 数据存储位置 | 自己的硬盘 | 平台服务器 |
| 费用 | 免费 | 订阅制 |
还有一点容易被忽略:Immich 的网页端不仅是管理后台,它本身就是完整的浏览界面。在没有手机的情况下,任何一台能开浏览器的电脑都是你的相册入口。对偶尔需要在电脑上整理照片、或者给不装 App 的家人演示照片的场景,这一点比想象中实用。
从结果上看,它也确实是目前最接近云相册体验的开源方案:打开网页端你会感到熟悉,时间线、地图、人物分组的位置都和主流云相册接近。对从云端迁移过来的人,熟悉的界面本身就能降低迁移的心理门槛——操作直觉还在,换的只是数据放在谁手里。加上开源协议下没有功能墙、不按人头收费,它对家庭用户而言是一种确定性很高的选择。
架构速览:为什么是全家桶
用过单文件相册软件的人可能会好奇:为什么 Immich 的 Docker Compose 文件里排着五六个服务?这是它把功能做完整的代价,也是它架构清晰的地方。
核心是 server 服务,负责所有业务逻辑和接口;web 是网页前端,界面文件由它提供;machine-learning 是机器学习微服务,人脸识别和搜索向量都在这里计算;redis 做缓存,让时间线滑动足够流畅;postgres 数据库存照片元数据、用户信息、人脸分组结果。几个服务各司其职,互相协作,这正是 Docker Compose 最典型的用法——一个命令把整组服务拉起来,一起停,一起起。

这种拆分带来三个直接好处。第一是隔离,网页端更新不会影响核心服务;第二是可替换,机器学习服务可以单独配置,显存不够就换小模型;第三是可扩展,照片多了之后每个服务可以单独调整资源配额。部署时所有的卷映射都列在同一个 Compose 文件里,改的就是路径和密码这种参数。
值得一提的是各组件之间的耦合被刻意做得很松。数据库里只存元数据和向量,照片文件始终是独立的普通文件;缓存挂了只是慢一点,服务之间不会互相拖死。这种设计在出问题时会救你:某一环日志里报了错,你可以单独重启那一个服务,而不必整套推倒重来。对还在学习曲线上的新用户而言,这意味着犯错的成本被摊薄到了单个服务级别。
| 服务 | 职责 | 出问题时的表现 |
|---|---|---|
| server | 业务逻辑与接口 | 页面打不开 |
| web | 网页前端文件 | 界面样式异常 |
| machine-learning | 识别与搜索 | 人脸分组不更新 |
| redis | 缓存 | 时间线变慢 |
| postgres | 元数据存储 | 登录与读取失败 |
对没接触过 Docker Compose 的读者,推荐先翻一翻《自建 NAS 完全指南》 里的容器章节,理解了容器、镜像、卷映射这几个概念,后面的部署操作就是照着改参数而已。如果你的 NAS 是群晖,也可以参考《群晖 DSM 实用指南》 中关于套件与容器并存的章节,那里的经验同样适用。
从零开始的部署体感
很多人对自建相册的顾虑停留在操作层面。这里先给个大致的轮廓,后面的章节会逐步拆开讲。整个流程概括起来是四步:拉取官方的 Compose 文件、改几个路径和密码、启动服务、完成初始账号设置。没有需要编译的源码,没有需要手动配置的依赖,全程跟着官方文档走,大多数人可以在一个下午之内完成。
部署之后需要投入的日常精力同样有限。第一次全库扫描完成、家人手机都装上 App 之后,剩下的事就只有偶尔的版本升级。升级也是一条命令的事,只是要点出备份这个前置动作。换句话说,自建的折腾集中在前期的学习曲线,进入稳态之后,它和套件的使用体验没有本质差别。
| 阶段 | 大致耗时 | 是否一次性 |
|---|---|---|
| 前期规划 | 一个小时 | 是 |
| 首次部署 | 两到四个小时 | 是 |
| 全库扫描 | 视机器和照片量而定 | 是 |
| 日常增量 | 无感 | 持续自动 |
| 版本升级 | 每次十几分钟 | 周期性 |

谁在维护,能放心用吗
一个自建方案值不值得投入时间,很大程度上取决于项目的可持续性。Immich 是社区驱动的开源项目,代码公开,问题跟踪公开,任何功能的实现和走向都看得见。它的社区相当活跃,贡献者不少,文档也比较完整,这种透明度本身就是一种保障——和闭源产品相比,你不必担心某天它被改成一个你不认识的样子,也不必担心某个功能被悄悄下架。
开源不等于可以盲目信任,几件事情仍然要自己上心。首先是数据备份——软件是免费的,数据是自己的,硬盘坏了没有任何客服能帮你找回照片,这部分在数据库与备份一章会给出可照做的方案。其次是升级节奏——版本更新频繁是好事,但每次动手前都该先备份再升级。最后是合理预期——它是软件就会有不足,个别功能不如商业产品细致是常态,但它换来了完全的控制权和零订阅费。
另一个常被问到的顾虑是没人兜底。客服确实没有,但开源社区提供了一种不同形式的保障:你遇到的每个坑几乎都有人先踩过,搜索一下就能找到解法。而且因为代码公开,安全问题是由公开讨论、公开修复的方式推进的,漏洞修了就修了,不存在捂着不说的动机。

小结
Immich 是一个完成度相当高的开源相册方案:功能上覆盖了云相册的核心体验,架构上用 Docker Compose 全家桶把各部分拆得清晰可替换,项目本身迭代活跃、社区健康。它不省心,但它在控制权、成本和功能三个维度上同时站住了。下一章我们把它和成品方案正面对比一下,看看你的情况更适合哪一条路。
延伸阅读
- 《自建 NAS 完全指南》:补一下 Docker 与存储卷的基础概念。
- 《群晖 DSM 实用指南》:群晖用户了解容器与套件生态的关系。
- 下一章《与群晖 Photos、极空间相册的对比》,讨论自建与成品方案的选择。
