折腾自建私有云照片管理这事,我从群晖Drive开始,中间换到手工部署的Nextcloud,最近又重度使用了一阵子Immich,算是把两条主流路线都扫了一遍。先给结论:如果只想让全家人的手机照片自动备份、按时间线翻着看、还能搜人脸搜关键词,Immich是目前开源方案里最接近商业云相册的;如果除了照片,你还需要一个能同步文件、管理日程、多人协作的私有云盘,那Nextcloud才是该上的那一个。这篇文章就围绕实测展开,适合正在为家里的NAS或小主机纠结装哪个的人,不管你是程序员还是小白,看完应该能心里有数。
我自己的测试环境是一台三年前的X86小主机,8核CPU、16GB内存,系统Ubuntu Server,所有服务都跑在Docker Compose里,上游用Caddy做了HTTPS访问。照片数据约3.5万张、2000多个视频,总体量约260GB,里面既有iPhone的HEIC和4K视频,也有相机导出的RAW和无人机素材,基本接近普通家庭两三年积累下来的真实状态。接下来所有结论都基于这套环境实测,不玩虚的。
1. 先看清楚两个项目的定位,再谈对比才有意义
很多人一上来就问“哪个更好”,这个问题本身就不太对。Immich和Nextcloud虽然都出现在“自建私有云照片管理”这个搜索词下面,但它们的出发点完全不同,一个是专职做相册的,一个是顺带做相册的。把定位搞清楚,很多选择就自然清楚了。
1.1 Immich:为相册而生的专用方案
Immich最初就是冲着替代商业云相册去的,项目作者把Google Photos的体验当成默认标准来做,所以你能在Immich里看到很多熟悉的影子:时间线滑动、人脸聚类、地点地图、回忆推送、自动备份、多设备同步、相册分享。它以“照片/视频”作为核心数据模型,服务端围绕图片元数据、缩略图、转码、机器学习识别来设计,数据库也是专门为照片时间线检索做了优化的schema。
这意味着它的优势非常明显:照片功能深度好,从上传到展示全链路都为照片服务。但短板同样清晰,它不是一个通用文件管理工具,你没法像用云盘一样在Immich里管理几十种类型的文件,整体功能边界非常聚焦。说白了,Immich就是一把专门切肉的刀,切肉的时候无比顺手,但你别指望它还能劈柴。
1.2 Nextcloud:能放照片的私有云盘
Nextcloud的定位是完整的私有云协作平台,文件、日历、通讯录、笔记、在线编辑、甚至视频通话都可以通过应用商店装进去。照片管理只是其中一个应用形态,官方提供Photos应用,社区还做了Memories、Recognize这类第三方应用来补强照片体验。
这就决定了Nextcloud的底层架构是“文件系统优先”,照片本质上是data目录下的普通文件,相册应用做的事情是给这些文件建立索引、提取元数据、生成预览图。它并不像Immich那样从第一天起就按照片数据模型来设计,所以照片功能的深度和顺滑度会打折扣,但你换来的是远超相册的灵活性和扩展性。拿工具箱来类比的话,Nextcloud是一整套工具墙,相册只是其中一把用得顺手的螺丝刀。
1.3 我这次实测的具体范围和测试标准
为了避免“云评测”,我给自己定了几条硬标准:
- 手机端日常备份:iPhone、安卓各一台,模拟一个月真实拍摄、后台自动上传、断断续续的网络
- 照片库体量:3.5万张照片加2000个左右视频,约260GB
- 功能覆盖:自动备份、时间线浏览、人脸识别、文字搜索、地图相册、外部链接分享、多用户隔离
- 维护成本:部署时间、升级时间、日常内存CPU占用、崩溃次数、备份恢复难度
在这个基础上,两个方案我都实际跑了至少两周,每天的增量照片大概几十到上百张,视频也不少。下面说的所有数据和感受,都是这段周期内的真实结果。
2. 部署与基础配置实测
部署是自建服务的第一道门槛,也是很多人劝退的地方。我尽量把关键细节写清楚,尤其是那些不亲自踩一遍很难发现的坑。
2.1 Immich的Docker部署和关键参数
Immich官方直接给Docker Compose方案,上手难度在同类里算低的。我当时用的是官方推荐的组合,包含immich-server、immich-machine-learning、redis、postgres四个核心服务。其中machine-learning负责跑人脸识别、图片语义识别这些AI任务,是吃CPU和内存的大户。
部署时最重要的几个参数:
- UPLOAD_LOCATION:所有照片、视频的存储根目录,务必放到容量足够且做了定期备份的磁盘上
- DB_USERNAME / DB_PASSWORD / DB_DATABASE:PostgreSQL连接参数,提前想好,后期改起来比较麻烦
- 端口映射:宿主机端口映射到容器内端口,前面再做反向代理
下面是我简化过的配置片段,具体以官方仓库为准:
services: immich-server: image: ghcr.io/immich-app/immich-server:release ports: - "2283:3001" volumes: - ${UPLOAD_LOCATION}:/usr/src/app/upload - ${EXTERNAL_PATH}:/usr/src/app/external environment: - DB_HOSTNAME=immich-db - DB_USERNAME=postgres - DB_PASSWORD=postgres - DB_DATABASE=immich restart: always我第一次踩的最大的坑,是没给machine-learning设内存上限。机器只有16G内存,machine-learning一跑起来就疯狂吃内存,直接把PostgreSQL挤到没内存,整个服务像死机一样。后面我在docker-compose里对machine-learning单独加了mem_limit参数,才稳定下来。如果你是低配机器,建议先不考虑它,或者干脆在管理后台把机器学习的自动识别关掉,只用缩略图和时间线功能。
Immich还有一个很实用的external library功能,可以直接把已经存在磁盘上的照片文件夹挂载进来,相当于不搬迁数据也能被Immich索引。我一开始就是把旧NAS上老的PhotoStation目录直接挂载过来,省去了海量数据的物理迁移。这个功能对老用户非常友好,但要注意外部库目录的读写权限必须让容器内有权限访问,否则索引会一直报错。
2.2 Nextcloud的部署方式和常见环境适配
Nextcloud的部署方式比Immich多很多,官方有AIO镜像、Snap包、裸机安装、手动Docker Compose等。热词里提到“wsl2安装nextcloud”“vmware搭建nextcloud”“ubuntu nextcloud”,说明很多朋友是在Windows环境里尝试的。我在这里把几个常见环境的注意事项一起说清楚,免得大家走弯路。
如果你是Windows用户,用WSL2跑Docker再装Nextcloud是可以的,但有几件事必须先搞清楚:
- WSL2的跨文件系统性能很差,数据目录不要放在/mnt/c下面,要放在WSL2自己的ext4虚拟磁盘里,否则照片一多,IO会成为瓶颈
- 重启Windows之后WSL2里的服务不会自动启动,需要配合systemd或者写一个启动脚本
- WSL2的IP会变,直接用localhost映射访问更省心,别用宿主机IP去访问后台,否则每次重启都要改配置
如果你用VMware虚拟机来搭,情况就简单一些,但要注意给虚拟机预留足够磁盘空间,之后扩容比实体机麻烦,而且要把数据库和data目录分开存放,方便单独备份。用Ubuntu Server裸机装Docker是最省心的路线,没有虚拟机这一层性能损耗,我最终就是用这种方式跑的。
我自己在Ubuntu Server上用Docker Compose部署的Nextcloud,结构是nextcloud容器、postgres容器、redis容器,前面再用Caddy做HTTPS反向代理。为了让照片体验好一点,我额外安装了官方Photos应用,以及社区非常出名的Memories应用。这里有个小建议:如果你主要目的是相册,官方Photos加Memories基本够了,不要贪多装一堆应用,每个应用都会吃掉一些内存和后台任务时间。
2.3 资源占用与稳定性横向对比
部署完成之后,我记录了空闲状态下的资源占用和整体稳定性:
| 项目 | Immich | Nextcloud(含Photos+Memories) |
|---|---|---|
| 核心容器数量 | 4个左右 | 3个左右 |
| 空闲内存占用 | 约2.1GB | 约600MB |
| 首次全量索引CPU峰值 | 长时间跑满所有核心 | 预览图生成时短时间高占用 |
| 日常空闲CPU | 几乎为0 | 基本为0 |
| 版本升级频率 | 更新很频繁 | 大约每季度一个主要版本 |
| 升级是否容易翻车 | 需要关注数据库迁移 | 相对稳定 |
从这个表能看出,Immich功能强是有代价的,它更吃资源,尤其是内存;Nextcloud本身很轻,但装上照片增强应用之后,占用也会慢慢上去。稳定性方面,Immich还在快速迭代期,升级前必须看changelog,我在测试期间遇到过两次升级后需要手工跑数据库迁移命令的情况;Nextcloud整体稳很多,适合不想频繁折腾的人。
3. 照片管理核心体验对比
部署只是开始,日常用得顺不顺手才是关键。这一部分我只聊照片管理本身,尽量不掺杂其他云盘功能的干扰。
3.1 手机自动备份:Immich完胜,Nextcloud也不是不能用
自动备份是自建相册最基本的需求,也是日常使用频率最高的功能。Immich的手机App做得相当完整:可以设置只在WiFi下备份、仅在充电时备份、按目录选择、备份后自动清理本地已上传的相册等等。实测下来后台保活能力很好,App被杀掉之后还能靠系统的后台任务恢复上传。安卓端我测了两台机器,断点续传也没有问题,网络中断后重新连接会继续补齐未上传的照片。
Nextcloud的手机App也能自动上传照片,安卓端有“自动上传”设置,iOS也有相关的后台上传选项,但实际体验会粗糙一些。它更多是“把照片传到你的云盘某个文件夹里”,而不会像Immich那样为照片生成时间线、地点、人脸等维度。如果你只要求“把照片备份走了就行”,Nextcloud也能胜任,但你大概率不会把它当作每天翻相册的入口,因为照片在Nextcloud里更像一堆按文件夹归类的文件,而不是一个可滑动的记忆流。
3.2 人脸识别与智能分类:差距最大的地方
这是Immich和Nextcloud拉开差距最明显的领域。Immich的机器学习服务支持人脸识别、物体识别、场景分类、OCR文字识别。3.5万张照片全量跑一遍人脸识别,在纯CPU、没有GPU的机器上用了大约十几个小时。跑完之后,搜索“海边”“生日”“猫”这类关键词都能出来结果,人脸聚类也基本准确,这种体验已经很接近商业云相册了。
Nextcloud这边,原生应用不提供人脸识别,想实现类似功能要装社区的Recognize应用,或者用Memories自带的AI能力。我实测Recognize的准确率和速度都明显不如Immich,CPU占用还很高,跑完一轮之后发现一堆误聚类,把同一个人分成了好几个不相干的人像。Memories本身更专注在“时间线体验”上,把缩略图和虚拟相册做得非常顺滑,但在AI识别方面仍然不是Immich的对手。
如果你很在意“搜图”这个动作,比如经常靠关键词去找某次旅行、某个节日、某个人的照片,那Immich目前没有悬念地胜出。我自己在测试过程中,越来越习惯直接在Immich搜索框里敲文字而不是去翻相册,这在Nextcloud上是很难实现的体验。
3.3 时间线、搜索和地图:Immich的细节打磨更深
Immich的时间线是按照片拍摄时间轴来排的,滚动非常顺滑;点开照片之后左右滑动切换,操作逻辑和主流商业相册几乎一致。搜索支持类型、文件大小、有没有人脸、拍摄地点等维度,还支持比较自由的关键词搜索,在照片量大的时候,这个效率优势很明显。
Nextcloud的Photos应用按日期分组的体验一般,用Memories能获得接近Immich的时间线观感,但Memories的部署和缓存配置有一定学习成本,尤其是缩略图的生成需要额外任务队列支持。地图相册方面,Immich原生支持地图视图,能按拍摄位置在地图上聚合照片;Nextcloud则需要额外折腾位置相关应用,质量和其他功能集成度都弱一些。
我个人的实际感受是,如果你像我一样,经常翻几个月甚至几年之前的照片,时间线的顺滑程度和搜索的命中率直接决定了你会不会长期用这个系统。Immich在这两点上的打磨,明显比Nextcloud更下功夫,这也是它能在短时间内吸引大量自建用户的原因。
3.4 多用户与分享:Nextcloud的权限管理依然是主场
Immich支持多用户,也支持创建共享相册、投递给其他用户、生成外部分享链接。但它的分享模型还是“照片优先”,适合家庭内部每人一个账号,或者几个人共同维护一个相册。内容权限深度有限,不能精细地控制某个用户能不能下载原图、能不能上传、有没有过期时间之类的配置。
Nextcloud在这方面是绝对强项,文件级、文件夹级的读写权限、密码保护、链接有效期、禁止下载、限制上传、只读分享等等都能做到。如果你不是单纯想要相册,而是要把照片分享给同事、客户、家人,同时对权限有细粒度要求,那么Nextcloud会更合适。拿我爸我妈这种不太会用电脑的长辈来说,我给他们开一个只有查看权限的分享链接,他们点开就能看相册,比教他们装App方便得多。
4. 长期维护、扩展生态和备份策略
自建服务不是装完就完事,它更像是养一盆植物,日常照顾得好才能一直活。这一部分说说我长期维护下来的体会。
4.1 大相册性能与低配机器能不能跑
很多人关心低配机器跑不跑得动的问题。我用8核16G的机器测试下来,Immich的稳定资源占用偏高,UI和API响应快,但一次全家人的照片同时上传触发转码和机器学习时,CPU会长时间拉满。如果你的机器少于4核8G内存,优先考虑降低机器学习的任务强度,或者把转码策略改成仅兼容模式,甚至关掉视频转码。
Nextcloud本身对硬件要求很低,2核4G也能跑,但如果你给它装了一堆增强照片应用,那资源紧张的问题就一样会出现。尤其是Memories这类应用,预览图生成和视频转码同样会占用大量CPU。所以不要以为Nextcloud天生就是低配神器,具体还是要看你怎么配置。我测过一台2核4G的迷你主机,只跑Nextcloud加Photos,照片量小的时候完全没问题,但一放大批量导入就会卡顿,缩略图生成要排队很久。
4.2 升级、备份与灾难恢复
自建服务的核心问题永远是升级和备份。Immich升级频率高,好在官方提供了一键备份数据库的命令,也有从备份恢复的文档。我的习惯是:升级前先跑一次数据库备份,再停掉服务,拉取新镜像,启动后立刻看日志,最后用健康检查接口确认一切正常。我遇到过的两次升级问题都和数据库迁移有关,万幸有备份在手,恢复起来不难。
Nextcloud升级相对平稳,但它的目录结构复杂,data目录、数据库、配置文件、应用目录都要纳入备份范围。另外Nextcloud升级后经常要求运行occ命令做升级和清理操作,这个步骤不能跳过,否则会出现版本不一致导致各种诡异问题。我建议把备份脚本做成自动化,每天定时把关键数据打包到另一台机器或者移动硬盘,不要每次都手动操作。
4.3 生态扩展:Nextcloud赢在全面,Immich赢在专注
Nextcloud的应用商店里有一堆东西:文件同步、在线文档、日历、通讯录、任务、网页剪辑、RSS阅读器、表单、甚至有人用前端技术做3D旋转相册之类花哨展示的挂件。它能成为一台“私有云工作台”,而不仅仅是相册。如果你的需求是全家共享文件、同步办公文档、管理日程,Nextcloud确实不可替代。
Immich的路线是精而专,项目方几乎把全部精力放在照片和视频相关的体验上,也在逐步加入家庭分享、活动相册、回忆推送等功能。但它的开放API和第三方生态,目前远没有Nextcloud丰富。换句话说,Immich是一个正在快速长大的相册专家,而Nextcloud已经是一个很成熟的云平台。所以如果你除了照片之外,还有文件同步、团队协作、日程管理这些需求,建议你把Nextcloud作为平台,再考虑让Immich专注负责照片和视频的体验;如果你只需要一个能和商业云相册叫板的私有相册,其他花活一概不急,那直接上Immich,省心得多。
5. 常见问题与排查技巧实录
这一部分是我实际使用中整理出来的问题清单,可以当作速查表来收藏。
5.1 Immich高频问题速查表
| 现象 | 可能原因 | 解决办法 |
|---|---|---|
| 上传照片后很长时间没有缩略图 | 缩略图队列积压,CPU资源不足 | 在设置里限制并发转码任务,或给缩略图服务加CPU配额 |
| 手机App连不上服务器 | 端口未映射、防火墙拦截、地址写错 | 先在局域网用内网IP加2283端口测试,再排查反向代理 |
| 人脸识别进度一直不动 | 机器学习容器内存不足或模型下载失败 | 查看machine-learning日志,调大内存限制,确认模型能正常下载 |
| 视频播放卡顿 | 原视频码率太高或转码策略不当 | 在管理后台把转码策略改为兼容优先,并给转码进程限流 |
| 磁盘快满了 | 数据库临时文件加转码中间文件积累 | 定期清理旧的转码缓存,监控Docker卷大小 |
5.2 Nextcloud高频问题速查表
| 现象 | 可能原因 | 解决办法 |
|---|---|---|
| 网页经常掉登录 | Redis缓存和session配置不对 | 检查config.php里redis配置,确认前后端session一致性 |
| 上传大文件失败 | PHP限制或反向代理缓存限制 | 设置upload_max_filesize、post_max_size、client_max_body_size |
| 照片预览图不生成 | preview_generator未配置Cron | 启用Cron任务,让后台定期生成预览图 |
| Memories时间线照片顺序乱 | 依赖EXIF时间和文件名识别顺序 | 在Memories设置中切换排序元数据来源为拍摄时间 |
| 安装应用时提示权限不足 | data目录权限被改动 | 用occ命令或chown把目录owner改回运行用户 |
5.3 我踩过的几个大坑
第一个坑是Immich升级后数据库服务起不来。原因是升级脚本用了一个新版本的PostgreSQL,而我的旧数据目录不兼容,最终靠官方文档里的数据库备份恢复命令才救回来。从此之后我再没敢跳过升级前的备份,宁可多花几分钟,也不赌自己运气好。
第二个坑是Nextcloud的data目录权限。有一次我在系统里直接用root改了Nextcloud data文件夹的owner,结果整个相册全部变成“未授权”状态,折腾了半天才用occ命令把所有文件重新扫回索引。后来我给自己定了规矩:Nextcloud的文件操作一律用occ或者Web界面,不直接去碰data目录里的文件。
第三个坑发生在跨设备导入上。Immich有官方推荐的immich-go工具,可以从Google Photos导出包、Lightroom元数据或者本地大批量文件夹快速导入。一开始我不知道这个工具,直接拿文件复制进外部库目录,导致时间线混乱,后来重新用immich-go整理了一遍才正常。强烈建议要批量迁移旧照片的人先研究这个工具再动手。
版权、隐私这些事也要多说一句:自建私有云相册的数据完全在自己手里,好处是隐私安全可控,坏处是所有责任也都在自己身上。建议每天坚持服务器异地备份,千万别拿“自建=永不丢失”这种想法麻痹自己。
说实话,等到我把两者都跑顺之后,心里反而没有最初的纠结了。Immich和Nextcloud不是“二选一”的竞争关系,更像是“术业有专攻”,各管一段。Immich负责把照片和视频体验做到顶级,Nextcloud负责把文件协作和日常办公这一摊子稳住。两台服务在我那台小主机上已经和平共处很久了,如果你也正在犹豫,我建议你先想清楚自己最不能忍受什么:是忍受一份不智能但全能的云盘,还是忍受一台专业但边界明确的相册服务器。想清楚这一点,选择自然就出来了。