
折腾自建私有云照片管理这事我从群晖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_DATABASEPostgreSQL连接参数提前想好后期改起来比较麻烦端口映射宿主机端口映射到容器内端口前面再做反向代理下面是我简化过的配置片段具体以官方仓库为准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_HOSTNAMEimmich-db - DB_USERNAMEpostgres - DB_PASSWORDpostgres - DB_DATABASEimmich 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 资源占用与稳定性横向对比部署完成之后我记录了空闲状态下的资源占用和整体稳定性项目ImmichNextcloud含PhotosMemories核心容器数量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的准确率和速度都明显不如ImmichCPU占用还很高跑完一轮之后发现一堆误聚类把同一个人分成了好几个不相干的人像。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负责把文件协作和日常办公这一摊子稳住。两台服务在我那台小主机上已经和平共处很久了如果你也正在犹豫我建议你先想清楚自己最不能忍受什么是忍受一份不智能但全能的云盘还是忍受一台专业但边界明确的相册服务器。想清楚这一点选择自然就出来了。