自己搭私有云相册这事,我前后折腾了快两个多月。最开始用的 Nextcloud,后来又装了一套 Immich,两个系统并行跑了将近一个月,把 1.2 万张照片、几百个视频全部导进去反复测。今天就拿真实体验说话,从部署、日常使用、性能消耗到坑点,把这两个东西彻底对比一遍,帮你决定自建私有云相册到底该选谁。
先说结论:如果你是纯粹为了相册备份和浏览,Immich 的体验接近白月光;如果你还想兼顾文件管理、日历、笔记、同步盘这些东西,那 Nextcloud 才是正经的家庭私有云底座。但两者真正跑起来之后,差异远不止“相册”两个字这么简单,下面展开讲。
1. 两个选手的血统差异:为什么它们本来就不该直接比
1.1 Immich 到底是什么
Immich 是一个开源的自托管相册服务,设计目标非常简单直接:让自己搭一套类似 Google Photos 的东西。它原生支持手机自动备份、AI 人脸识别、按地点/时间线浏览、自动生成回忆、关键词搜索,还有多用户支持。说得直白点,它就是一门心思要做“私人 Google Photos”,没有文件管理、笔记、日历这类五花八门的功能,整个 UI 和交互都在围绕照片这件事打磨。
技术栈上一眼就能看出来它很现代:后端是 Node.js + TypeScript,有独立的机器学习服务做物体识别和人脸聚类,数据库用 PostgreSQL,缓存用 Redis,存储底层直接落盘到文件系统。前端走的是响应式 Web + 成熟移动端 App,整体设计语言非常接近主流云相册。
1.2 Nextcloud 到底是什么
Nextcloud 则完全不同。它的定位是“自托管生产力平台”,文件同步只是基本功,在这个基础上还能装日历、联系人、笔记、在线 Office、聊天空、表单、甚至 RSS 阅读器。照片只是其中的一个模块,官方默认带一个 Photos 应用,能按时间线展示、能做人脸识别(依赖机器学习组件),但从交互精细度来看,它显然不是核心主业。
技术栈上 Nextcloud 是 PHP 的老江湖,数据库可选 MySQL/MariaDB 或 PostgreSQL,扩展靠海量应用市场,存照片的方式就是普通文件目录。它更像一个什么都干的家庭私有云服务器,而不是专业相册工具。
这两款产品的血统差异决定了它们在照片管理上的表现天然不对等。拿 Immich 和 Nextcloud 的相册体验对比,就像拿专业相机和全能手机比拍照效果——后者能干很多事,但单论摄影这件事,它确实有差距。如果 Nextcloud 在你的规划里只是用来管照片,那它实际是在“大材小用加扬短避长”。
2. 实测环境与部署细节回顾
2.1 测试机配置与网络环境
先交代一下我用什么机器来测,避免大家看数据时没有参照物。测试机是一台旧办公电脑:
- CPU:Intel i5-6500,四核四线程
- 内存:32GB DDR4(对相册服务来说有点过剩,但能同时跑两套服务对比)
- 存储:512GB SSD 系统盘 + 4TB HDD 存照片
- 系统:Ubuntu Server 22.04 LTS
- 网络:家庭千兆内网 + 公网 frp 映射用于测试外网访问
为什么用这台机器?因为很多人在家里自建服务,用的也就是淘汰下来的旧电脑或者小主机,性能不会太夸张。这样的环境下测出来的感受,对你日常使用更有参考价值。
2.2 Immich 的 Docker Compose 部署
Immich 官方推荐用 Docker Compose 部署,安装过程非常简单。这里我补充说明一下,Immich 的官方仓库提供了完整的 docker-compose.yml 和 .env 模板,基本是“拉下来改下路径就能跑”的流程。我用的是当时的最新版本,整体分了五个容器:
| 容器 | 作用 |
|---|---|
| immich-server | 主服务,处理 API、上传、缩略图生成等 |
| immich-machine-learning | 机器学习模块,负责物体识别、人脸聚类、搜索向量 |
| immich-postgres | PostgreSQL 数据库 |
| immich-redis | Redis 缓存 |
| immich-web | 前端静态页面服务(新版本已合入 server 镜像) |
比较关键的几个环境变量是:
UPLOAD_LOCATION=/mnt/data/immich DB_PASSWORD=yourpassword DB_USERNAME=immich DB_DATABASE_NAME=immich MACHINE_LEARNING_ENABLED=true我修改了UPLOAD_LOCATION,把它指到 4TB 的 HDD 上。在版本较新的版本中,上传文件会按年/月自动归档目录,这个后面再说。部署完之后,浏览器打开http://服务器IP:2283就能进入管理界面,创建管理员账号后直接开用。
2.3 Nextcloud 的 Docker 部署
Nextcloud 的部署方式有很多,大多数人选的是直接拉官方镜像跑容器,再用宿主机目录挂载数据。我的 Nextcloud 用的是 docker-compose,包含了:
| 容器 | 作用 |
|---|---|
| nextcloud | 主应用,Apache + PHP |
| mariadb | 数据库 |
| redis | 缓存 |
docker-compose.yml里把 Nextcloud 的数据目录挂到了 HDD 上,数据库文件放在 SSD。官方推荐把数据库放到独立容器,避免数据和应用耦合。启用 Redis 做缓存后,页面响应速度会明显提升,尤其是相册列表这种需要大量 IO 的场景。
volumes: - /mnt/data/nextcloud/html:/var/www/html - /mnt/data/nextcloud/data:/var/www/html/data第一次打开网页会跳安装向导,填好数据库账号密码、管理员账号就行。装完之后记得去应用商店装Photos、Memories这两个应用——Photos是官方默认相册,Memories是社区里口碑最好的第三方相册应用,后面详细说。
2.4 两个系统部署难度实际对比
单从安装角度看,两个都有完善的 Docker 官方模板,Immich 的 compose 文件更省心,因为机器学习和 Redis 这些依赖它自己编排好了,拉下来就能跑。Nextcloud 需要自己调整数据库、Redis 配置,如果还要让 PHP 的 opcache、内存限制配合好,手动调优的工序多一些。
但 Nextcloud 的文档、社区帖子、教程数量远超 Immich,随手一搜就是各种搭建教程,包括 Ubuntu 下配置、WSL2 环境折腾、虚拟机里搭建等都有很详细的图文指南。Immich 起步晚一些,官方文档质量很高,但因为版本迭代快,社区不少老教程会频繁失效,尤其是配置项变动频繁。如果是第一次接触 Docker 的小白,Nextcloud 的入门门槛反而更低一些。
3. 日常使用体验对比:核心功能逐个过招
3.1 照片上传与自动备份
自动备份是我自建相册第一优先级的功能。手机里拍了照片如果还要手动导到电脑上,那私有云的优势就没了。
Immich 的移动端做得非常完善。安装 App 后,登录服务器地址,开启“备份”开关,它会自动把相机胶卷的新照片上传到服务器。可以设置备份目录、是否只连 Wi-Fi 时备份、是否包含视频等。实测在家庭千兆内网下,上传速度能跑满带宽,100 张 12MP 的照片大约 20 秒内完成。它还有一个很贴心的设计:备份进度会以通知形式实时推送,我随时能知道还有多少张没传完。
Nextcloud 的自动备份其实也成熟,官方 App 里也有“自动上传”功能,可以新建一个“相机上传”规则,指定目录、文件类型、上传触发条件。但它的上传更像“文件同步”,而不是“相册备份”。文件传上去后,在 Photos 应用里能看到,但如果你用的是“外部存储”挂载的目录,可能会遇到索引丢失或权限问题,需要再去做扫描和重建索引。
实测体验上的核心差别在于:Immich 是把整件事当作“照片流”在做,上传后在 App 里立刻看到时间线;Nextcloud 更像“我把文件放到服务器了”,需要等后台任务扫描、生成缩略图,才能流畅看照片。首次上传大量照片时,Nextcloud 的缩略图生成依赖 cron 定时任务,有时要等好几分钟甚至更久,用户体验会差一些。
3.2 时间线浏览与回忆功能
照片管理的日常操作就是“翻照片”。时间线是否顺滑、缩略图加载是否快,直接决定日常使用频率。
Immich 的时间线交互非常接近现代手机相册。它的缩略图是预生成的,前端会懒加载,滚动时很流畅。时间线支持按天、按月分组,可以双指缩放日期条快速跳到某一天。还有一个惊喜点是“回忆”功能,它会自动把你去年今天的照片推送到首页,配合下面要讲的 AI 聚类,它甚至能按“人物”“地点”生成智能相册。
Nextcloud 的 Photos 应用也能按时间线排,缩略图加载速度依赖内存和 PHP 性能。直接跑默认设置时,大目录下滚动的卡顿感明显比 Immich 大。后来我装了社区应用 Memories,体验提升非常大——它的缩略图预加载、时间线布局和整体手感非常接近 Immich。但 Memories 依赖后台预处理,需要把preview的进程调度调对,不然首次打开一个包含几千张照片的文件夹,会等很久。
坦率地讲,如果让我只评价“翻相册”这个场景,Immich 默认就赢了大半。Nextcloud 需要额外装对应用、调对参数,才能接近它在时间线浏览方面的体验。
3.3 AI 能力:人脸识别、物体搜索与地点聚类
这是我前后折腾时间最长、差距也最明显的一个部分。
Immich 的机器学习服务是内置的,一旦打开“智能搜索”开关,后台会自动对已上传的照片做物体识别,生成特征向量。人脸识别可以自动聚类人物,你在设置里为每个人脸起名字后,就能在首页看到“人物”相册。物体搜索也很有意思,我在搜索框打“cat”,包含猫的照片会全部出来,准确率相当高。地点聚类则是基于照片的 GPS 信息,自动生成“我去过的地方”时间线。
这套 AI 链路如果用一句话评价,就是“已经达到 Google Photos 的七八成功力”。人脸识别的准确率在同一个人的多角度照片上表现得不错,只有在侧脸、戴口罩时会漏。处理 1.2 万张照片,机器学习服务在 i5-6500 上跑了大约 5 个小时才完成任务,期间 CPU 持续高负载。如果照片量更大,建议在部署时给机器学习配置独立的 GPU 或者更强的 CPU。
Nextcloud 的人脸识别不是默认功能,需要额外安装Face Recognition应用,然后命令行执行识别任务。这个应用的识别效果取决于训练集和模型,实测比 Immich 弱一截。至于物体搜索、按地点聚类这些功能,Nextcloud 生态里基本没有体验相近的应用,只能用关键词搜索文件名,没什么智能可言。
如果你的相册管理需求里有“搜猫”“搜狗”“按人找人”这种智能化操作,Immich 是唯一能在自托管环境里给你接近商业云相册体验的方案。Nextcloud 在这个环节基本被完爆。
3.4 移动端与跨平台使用
软件的最终交互阵地是手机 App。Immich 的 Android 和 iOS 客户端都做得很不错,界面干净,支持触控缩放、滑动浏览、多选、分享、下载,体验很像 Google Photos。它甚至允许在 App 内直接把照片分享到其他应用,不需要额外中转。
Nextcloud 官方 App 是功能型选手,它优先保证的是“文件操作”,比如网盘同步、文件分享、查看 Office 文档,相册浏览只是其中一个 Tab。打开照片后能看到缩略图大图,但操作手感和流畅度比不上 Immich。好消息是第三方的PhotoSync或Les Pas等 App 可以作为曲线方案,其中比较主流的是配合 Memories 应用来获得更好的相册体验,但配置和授权比较折腾。
这里有一个重要提醒:如果你希望 50 多岁的爸妈也能在自己手机上直接看相册,Immich 的 App 点击最少、上手最快。Nextcloud 的 App 对长辈来说操作路径长,比较容易歇菜。
3.5 多用户与分享机制
家庭私有云往往得照顾多人使用。Immich 支持多用户,可以给家人开账号,每个账号有自己的独立时间线。共享方式是把照片或相册“共享给”指定用户或生成一个公开链接。不过要注意,Immich 的多用户模型侧重于“各自备份各自的照片”,如果你想让家人看到你备份的照片,需要主动共享,这个操作路径有点深。
Nextcloud 的分享机制天生更完善,毕竟文件系统出身。你可以把任意文件夹共享给用户/群组,也可以生成带密码、带有效期的外部分享链接。它对“家庭成员间共享整个照片目录”这个场景非常友好。比如我按月建的旅行照片目录,直接把整个目录共享给家人,他们就能在网页上浏览下载,权限控制也比 Immich 更细。
所以这一轮,Nextcloud 稳稳拿回一分。
4. 系统资源、性能与运维对比
4.1 内存与 CPU 占用实测
很多家庭用户拿旧电脑或 NAS 跑服务,资源占用是特别要关注的点。我分别测了两套系统在“空闲 + 每分钟几张照片增量备份”场景下的资源占用:
| 指标 | Immich | Nextcloud(含Redis) |
|---|---|---|
| Docker 容器数 | 约 4-5 个 | 约 3 个 |
| 空闲内存占用 | 约 2.5GB | 约 1.2GB |
| 空闲 CPU 占用 | 0-2%(后台任务触发时波动) | 0-1% |
| 增量备份时 CPU | 短时上升,缩略图生成后回落 | 取决于 cron 任务,可能持续波动 |
| 首次机器学习扫描时 CPU | 满载数小时 | 不支持同等能力 |
从内存看,Immich 明显更“重”。因为 Node.js、机器学习和 PostgreSQL 都是吃内存大户。如果只有 2GB 内存的小主机,跑 Immich 会比较吃力,建议至少 4GB 内存起步,8GB 才舒服。Nextcloud 默认状态其实可以压在 1.5GB 以内,但装了 Memories、Face Recognition 这类组件后也会往上走。
4.2 存储结构与备份策略
Immich 的存储很有意思,新版本默认按“年/月/日”目录存储,并且可选“按用户分目录”。这意味着底层文件是整齐的时间树,但如果你自己手动往里塞文件,它不会自动识别,必须走它的入库链路。所以 Immich 的文件目录是“服务管理”,不适合用人肉方式直接操作。
Nextcloud 就是纯正的文件系统思维:你的照片就是数据目录里的普通文件,目录结构完全可以自定义。随便拖一个文件夹进去,再把文件夹共享出去,就能当网盘用。这种自由度在照片管理之外是非常大的优势,备份也简单——直接 rsync 整个 data 目录即可。
备份策略上,我建议两个系统都做两层备份:数据库 + 文件目录。Immich 的数据库迁移需要先备份 PostgreSQL 再恢复,文件目录直接同步;Nextcloud 因为文件不依赖数据库索引也能直接浏览,紧急时把目录拷走就能抢救大部分数据。这一点 Nextcloud 的容灾能力更好,也更适合手残党。
4.3 升级迭代与长期维护成本
Immich 最大的“隐性问题”是版本迭代极快,并且 API、存储结构、数据库 schema 经常变。官方强烈建议“先看发布说明再升级”,因为有些版本需要数据库迁移或重新生成缩略图。我中途升级过一次,缩略图全部重新生成,4TB 机械盘跑得吱吱响,整整两三个小时才完成。如果你没有定期备份、不看 release notes 的习惯,追新版本容易翻车。
Nextcloud 更新则四平八稳,大版本升级时有内置检查,插件兼容性也做得比较保守,整体更适合“不想咋折腾”的人。它的缺点反过来是“旧”,有些新的 Web 特性和 AI 能力它吸收得很慢,想体验新东西往往得靠第三方应用。
5. 常见问题与避坑实录
5.1 常见问题速查表
下面这些问题是我在折腾过程中遇到并且反复查过资料的,整理成表直接用。
| 问题 | 表现 | 原因 | 解决方法 |
|---|---|---|---|
| Immich 上传后缩略图一直没有 | 时间线里有些图片是空白 | 后台任务没跑或缩略图存储权限不对 | 检查管理后台 Job 状态,给UPLOAD_LOCATION目录加正确权限 |
| Immich 升级后照片“丢”了 | 时间线变空,但磁盘文件还在 | 新版本数据库 schema 迁移未完成 | 先看升级文档,必要时手动执行迁移;千万别删库 |
| Nextcloud 上传照片后相册不更新 | 网页端看到照片,Photos 里没有 | 后台扫描任务没有配置 cron | 在 config 里设置backgroundjobs_mode为 cron,并配置系统定时任务 |
| Nextcloud 预览图全黑白 | 缩略图无法生成 | PHP 缺少 imagick 或 GD 支持 | 容器内安装php-imagick模块并重启 |
| Memories 应用加载慢 | 滚动相册明显卡顿 | 没有启用 Redis 做大图缓存 | 在 config.php 里配置 Redis,并设置memories.video_cache相关参数 |
| Immich 外网访问上传很慢 | 公网传输速率只有几百 KB/s | 未开启上传分片或服务器带宽受限 | 检查反向代理是否支持大文件上传,确认客户端开“分片上传” |
5.2 几条掏心窝的避坑建议
第一,不要把 Immich 装在有动态 IP 又没有反向代理的环境里就直接暴露到公网。Immich 目前没有非常细粒度的访问控制,建议用 Nginx/Caddy 转发,并在外层加一层认证或者至少用强密码 + 二次验证。另外它的机器学习服务需要暴露一个端口,如果直接公网裸奔,风险比较大。
第二,Nextcloud 装 Memories 后千万别忽略缩略图预生成。Memories 虽然体验好,但它依赖系统在后台提前生成预览图。如果图片太多,一次性导入后立即打开应用会卡到怀疑人生。正确姿势是:导入一批就跑一次occ files:scan,然后让 cron 慢慢生成预览图,再让用户去看。
第三,数据库别放机械盘。不管是 Immich 的 PostgreSQL 还是 Nextcloud 的 MariaDB,数据库文件请放到 SSD 上。机械盘读数据库会让相册加载明显变慢,响应时间能差好几倍。如果只有机械盘,建议至少做一层内存缓存(Redis / 系统 page cache),能把体验救回来一部分。
第四,如果你用 VMware 虚拟机跑 Nextcloud,默认配置下来虚拟磁盘扩容操作非常不直观,容易在扩容时出幺蛾子。建议从一开始就把数据目录挂载为独立虚拟磁盘,后续备份和迁移会省事很多。同样的,WSL2 环境下如果走 Docker,需要注意 WSL2 的磁盘性能默认打折扣,用映射目录时大文件写入会明显慢,必要时把数据放在 WSL2 自己的虚拟磁盘里。
5.3 我对两套系统长期稳定性的感受
连续跑了一个多月两个服务,每天定时备份手机照片。Immich 整体很稳,但升级过程让人揪心,有一次小版本升级后机器学习模型需要重下,外网下载模型文件时断时续,最终手动放进去才恢复。Nextcloud 则是在“能干很多事”的前提下表现出了极强的可靠性,重装过几次新实例,旧数据目录直接挂进去也能恢复,这点让我很放心。
6. 最终选择:需求决定一切,别被参数带偏
做了这么多对比,最后还是要回归到你的实际需求上。我建议按下面的思路做选择:
如果满足以下任一条件,优先选 Immich:
- 你只想要一个“能用的、体验像 Google Photos 的自托管相册”
- 你有足够的机器内存(8GB 以上)
- 你不介意经常看 release notes、搞定期备份
- 你希望手机端体验足够好,甚至打算给不太会用电子设备的家人用
- 你比较依赖 AI 搜索、人脸聚类这类智能能力
如果你符合以下几个特点,优先选 Nextcloud:
- 你想要的是一台“家庭私有云服务器”,文件同步、日历、笔记都要用
- 你的 NAS/小主机的内存有限
- 你更重视数据可控性和迁移容灾能力
- 你不追求 AI 花活,只要稳定地存取照片就行
- 你已经在用 Nextcloud,只是纠结要不要再装一套 Immich
我自己的最终方案是“两者共存”:Nextcloud 承担文件备份和家庭共享主力,Immich 充当专业的手机照片入口,两个服务的照片目录最终通过定时任务同步。因为 Immich 的目录是按年月组织的,而 Nextcloud 那边是自由的文件夹结构,我做了一层单向同步,把 Immich 上传的照片定期拷到 Nextcloud 的一个固定目录里。这样既能享受 Immich 的智能体验,又能保住 Nextcloud 的文件管理灵活性,算是一个比较贪心的平衡方案。
最后再分享一个小技巧:不论你最终选了哪套,照片管理这件事的命根子永远是“备份”。哪怕你用的是再专业的相册服务,硬盘挂了就一切归零。我现在的做法是每晚将 Immich 和 Nextcloud 两个数据目录增量同步到一台离线备份机器上,每个月再做一次冷备份。自建私有云不是把数据搬到家里就万事大吉,真正可靠的自托管,是能让你随时“从废墟里把照片捞回来”的那种部署。