自托管 · Docker
Immich 自建相册:跑了一个月,说点真实的
Google Photos 的免费额度早就用完了,每年续费一百多,说贵不贵,但照片放在别人服务器上这件事一直让我不太舒服。 于是找了个周末,把大概 1.2 万张照片从 Takeout 导出来,装了一套 Immich。
现在跑了整整一个月,两台手机自动备份,家里三个人都在用。结论先放这儿:能替代,但别指望零维护。
先说结论
- 安装确实简单,一个 compose 文件搞定,二十分钟能用
- 人脸识别和以图搜图是同类里最好用的,比 PhotoPrism 明显强
- 手机端自动备份稳定,但第一次全量上传很吃 CPU
- 升级要小心,两个大版本之间改过数据库结构
我的环境
| 项目 | 配置 |
|---|---|
| 机器 | N100 小主机,16G 内存 |
| 系统 | Debian 12 |
| 存储 | 2T SSD + 4T 机械盘(照片放机械盘) |
| 照片量 | 约 12000 张,共 68G |
怎么装的
官方给了一份 compose 模板,我把用不到的部分删了,实际上就三个服务:
services:
immich-server:
image: ghcr.io/immich-app/immich-server:release
volumes:
- ./library:/data
- /mnt/photos:/mnt/photos:ro
env_file: .env
ports:
- "2283:2283"
database:
image: tensorchord/pgvecto-rs:pg15-v0.2.0
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- ./pgdata:/var/lib/postgresql/data
redis:
image: redis:7-alpine
前面的反向代理我用 Caddy 加的,证书自动签,这段配置只有两行:
photos.example.com {
reverse_proxy 127.0.0.1:2283
}
用下来好的地方
最满意的是搜索。直接在搜索框里打「海边」「猫」「身份证」,它能把对应的照片翻出来,中文识别也没问题——这一点上国内几个自建方案都不太行。
另一个是「回忆」和相册共享。把家庭相册共享出去以后,家里老人手机上看照片的体验和 Google Photos 差不多, 他们完全不知道后端是我那台小主机。
踩到的坑
1. 第一次备份把 CPU 打满了
两台手机同时上传一万多张,缩略图生成和机器学习任务一起跑,N100 直接满载了一个晚上,风扇声一直在。 后来在设置里把「机器学习」的并发调到 1,又限制了任务时间窗口,才恢复正常。
2. 半夜挂过一次
有天早上发现所有图都裂了,容器起不来。翻日志发现是数据库容器被 OOM 杀了,原因是照片库变大以后
默认的内存限制不够。给 compose 加了 mem_limit 和 swap 之后没再出现。
如果你的照片超过一万张,先把内存留够再谈稳定性。这是我这次最大的教训。
3. 升级别跨太多版本
官方 release 之间偶尔会有数据库迁移,我一般先看 release notes 里的 breaking changes,
然后 docker compose pull && docker compose up -d。备份数据库这件事别偷懒。
值不值得
对我来说值得。一年省下的订阅费刚好覆盖一块硬盘,更重要的是照片在自己手里,随时能打包带走。 代价是要接受「它偶尔会坏」这个事实,并且愿意花半个小时修。
如果你只是想找个地方存照片、不想碰命令行,那还是继续用云服务吧,别为难自己。
下篇打算写 Immich 的备份策略:数据库、原图、缩略图分别怎么备,以及我踩过的恢复失败。