SSD Nodes Learn Hosting plans →
指南 Matt Connor作者: Matt Connor · 更新于 2026-10-28

PhotoPrism 与 Immich 怎么选:哪个照片服务器更好?

对比 PhotoPrism 与 Immich 的真实内存下限、手机应用、地图功能和备份命令,了解 4 GB VPS 为何必须关闭 Immich 机器学习,以及两者的文件管理差异。

PhotoPrism 与 Immich:简短结论

PhotoPrism 与 Immich 的区别在于它们解决的是两类不同的问题,而不是同一产品的两个版本。Immich 用于替代 Google Photos:手机应用会自动备份相机胶卷,生成的时间线对从手机图库迁移过来的用户来说很熟悉。PhotoPrism 用于整理已有的照片库:它会为磁盘上的文件夹建立索引,读取文件元数据,将照片显示在地图上,同时完全保留文件原来的位置。

如果你的问题是“手机存储空间已满,我想停止使用 Google Photos”,请选择 Immich。如果你的问题是“我有一个包含 400 GB 照片的硬盘,但找不到需要的照片”,请选择 PhotoPrism。两者都是开源软件,都可以作为 Docker 容器运行在普通 VPS 上,并且都能为你的照片库建立索引和提供搜索功能,而不会将任何内容发送给第三方。

理念差异,以及它为什么决定一切

Immich 管理文件。您为它指定上传位置,手机应用或 Web 上传器将原始文件上传到该位置,Immich 再使用自己的路径和命名方式存储这些文件。数据库保存相册、人脸和搜索索引的真实状态。正是这种设计带来了良好的手机端体验,因为服务器始终掌握每个资源的完整状态。

PhotoPrism 读取文件。您挂载一个自己已经管理的 originals 文件夹,PhotoPrism 在其上建立索引。目录树仍由您管理。如果您明天移除 PhotoPrism,照片仍会保留在原来的文件夹中,文件名也不会改变。PhotoPrism 写入的、用于描述其分析结果的 YAML sidecar 文件则位于 PhotoPrism 自己的存储文件夹中,默认情况下也会保存在那里。

这一项差异解释了后续的大部分区别。Immich 由于控制文件导入流程,因此移动端支持更强。PhotoPrism 从不改变您现有的目录结构,因此更适合整理和维护媒体库。对于照片主要存储在手机上的家庭,Immich 是更合适的选择。对于存储在磁盘上的归档,PhotoPrism 是更合适的选择。

硬件需求:Immich 要求更高

两者记录的内存最低要求相差很大。在小型 VPS 上,这通常是决定性因素。

图表Documented minimum memory, as of October 2026
此图表背后的数据
[
  {
    "label": "Immich",
    "min_ram_gb": 6
  },
  {
    "label": "PhotoPrism",
    "min_ram_gb": 3
  }
]

Immich 将 6 GB RAM 列为最低要求,并建议使用 8 GB;文档还注明,只有关闭机器学习后,4 GB 的机器才能运行它。PhotoPrism 要求 3 GB 物理内存和两个 CPU 核心,并表示超过这一最低要求后,RAM 容量应与核心数匹配。

差距确实存在,原因在于机器学习容器。Immich 在单独的 immich-machine-learning 服务中运行模型。该服务会将 CLIP(对比语言-图像预训练)和人脸检测模型加载到内存中。在 2 GB 的机器上,内核会终止该容器。您会看到它以退出码 137 退出。该状态表示进程被信号 9 终止,也是 Docker 中内存不足终止的表现。PhotoPrism 的内置模型基于 ONNX。其文档称,这些模型通常能在各种硬件上良好运行。PhotoPrism 还针对内存紧张的情况提供了明确的回退机制:在内存不超过 1 GB 的机器上,它会禁用 RAW 转换和人脸识别。但这并不代表一定稳定。项目警告称,低于其 3 GB 的最低要求时可能出现稳定性和性能问题,因此应将该要求视为最低标准。

PhotoPrism 的文档明确要求服务器至少有 4 GB swap。Immich 的要求页面没有提到 swap,但在小型机器上,swap 可以为其机器学习容器提供额外空间。安装任一应用前,先添加 swap。

sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
free -h

现在,free -h 应输出一行 Swap:,其中显示 4.0Gi。如果输出 0B,则表示 swapon 失败,通常是因为文件系统不支持 fallocate,而 sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 是回退方案。这里还要注意容器的内存上限。通过 在 Docker Compose 中设置内存限制,可以防止某个高耗能服务耗尽整台机器的资源。PhotoPrism 本身是例外:其文档建议不要为该容器设置硬性内存限制,因为索引大文件时会短暂需要更多内存,限制可能导致意外重启。

还有一项要求容易被忽略。Immich 的 Postgres 数据库必须位于具有实际所有权和权限的普通 Unix 文件系统上,并使用本地存储,不能使用网络共享。PhotoPrism 也警告不要将其数据库文件存储在共享网络文件夹中,并称本地 SSD 是存放数据库文件的最佳位置。两种应用都不适合将数据库放在已挂载的对象存储上运行。

如何安装每个应用

两种安装方式都是供应商提供的 compose 文件加上一条命令。先按我们的 VPS Docker Compose 指南完成 Docker Engine 和 Compose 插件的安装。

Immich 会在每个版本发布时提供 compose 文件和示例环境文件。

sudo mkdir -p /opt/immich && cd /opt/immich
wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.env

开始前编辑 .env。UPLOAD_LOCATION 是存放原始照片的位置。DB_PASSWORD 自带可用的默认值,Immich 建议将其改为随机密码,但不强制要求。Postgres 未暴露到公网,因此该密码仅用于本地身份验证;但设置一个随机密码没有任何成本。只能使用字符 A-Za-z0-9,因为 Immich 文档说明,Docker 解析该值时,其他字符可能导致问题。然后启动服务。

docker compose up -d
docker compose ps

Web 界面监听端口 2283。通过该页面注册的第一个帐户会成为管理员,因此应立即访问并完成注册,不要让未配置的实例长期暴露在互联网中。

PhotoPrism 提供一个已包含 MariaDB 的 compose 文件。

sudo mkdir -p /opt/photoprism && cd /opt/photoprism
wget https://dl.photoprism.app/docker/compose.yaml

打开 compose.yaml,并在首次启动前修改 PHOTOPRISM_ADMIN_PASSWORD。文档对此说明得很明确:应用会使用该文件中的初始密码启动,密码最少需要 8 个字符,默认值绝不能用于公网服务器。同时将 originals 卷设置为存放照片的目录。

docker compose up -d
docker compose logs -f photoprism

PhotoPrism 使用用户 admin 在端口 2342 上提供服务。两个应用都不应直接暴露。应在前面配置带 TLS(传输层安全)的反向代理,采用与使用 Docker、TLS 和备份自托管 Nextcloud相同的部署方式;或者将服务器保持为私有状态,通过 VPN 访问。如果该 VPS 最终承载的不只是照片,也应对添加到其中的每项服务采取同样的限制,因为自托管 RustDesk 中继只需要开放自己的两个端口,无需开放其他端口。

哪个项目的手机应用更好

这是两个项目差距最大的地方,也是大多数人最终选择 Immich 的原因。

Immich 提供官方 Android 和 iOS 应用。它们支持在后台备份相机胶卷,也就是说,新照片无需用户打开应用即可离开手机。要在外出时访问服务,Immich 文档列出了三种方式:使用 WireGuard 或 OpenVPN 等 VPN、使用 Tailscale,或通过反向代理提供 HTTPS。反向代理可以让手机应用连接服务,而无需在每部手机上安装 VPN 应用。Immich 警告不要在未完成额外配置的情况下,直接将端口 2283 转发到互联网。

PhotoPrism 没有官方原生应用。它提供渐进式 Web 应用,您可以在浏览器中将其添加到主屏幕。PhotoPrism 文档将 WebDAV(Web 分布式创作与版本控制)列为从手机同步照片的方式。该项目建议使用名为 PhotoSync 的第三方应用,并通过 WebDAV 将其指向 /import/ 或 /originals/ 目录。它可以正常工作,但这是由付费第三方应用完成的功能,而 Immich 可在自己的客户端中直接提供该功能。

如果要求为多个家庭成员自动备份手机照片,结论就很明确:选择 Immich。

机器学习实际提供了什么

Immich 使用 CLIP 对照片库执行语义搜索。因此,像“雪中的红色自行车”这样的查询,可以找到从未被任何人添加标签的照片。它还支持人脸检测与聚类,以及重复项检测。在 CPU 上为大型导入任务建立索引可能会在后台运行数小时,这是正常现象,不需要 GPU(图形处理器)。

PhotoPrism 使用内置的 ONNX 模型将图像分类为标签,使用 ONNX 人脸模型检测人脸并将其归入人物,还会读取位置元数据来生成地点地图。在其配置文件夹中添加 vision.yml 文件后,可以改用 Ollama 或 OpenAI 生成标签和说明。地图是许多用户持续使用它的原因:按照拍摄地点建立索引,为浏览二十年的照片提供了真正不同的方式。同样的思路也适用于其他媒体集合。Halcyon 面向 Jellyfin 的 90 年代音像店前端就是电影版本,按货架而不是按列表浏览内容。免费 Community 版本包含人脸识别功能。付费的 Essentials 和 Plus 会员会增加更丰富的地图图层、更多用户角色和用户管理界面等功能。截至 October 2026,价格从每月几欧元起,按年计费。

Immich 没有付费墙功能,项目方表示今后也不会设置。它确实提供可选的永久产品密钥:按 Immich 在 July 2024 公布的价格,单用户密钥为 $25,整台服务器为 $100。但购买密钥不会解锁任何功能;即使从不付费,Immich 也可以不受限制地使用。PhotoPrism 的核心功能免费,并提供可选的付费扩展。

备份决定数据能否保留

没有备份的照片服务器只要发生一次磁盘故障,就可能丢失整个家庭的所有照片。对于这两个应用,都需要备份两类数据:数据库和文件。

对于 Immich,从 Postgres 容器导出数据库,并复制上传目录。

docker exec -t immich_postgres pg_dump --clean --if-exists --dbname=immich --username=postgres | gzip > /backup/immich-db.sql.gz

然后备份 UPLOAD_LOCATION。存放不可替代数据的目录是 upload、library 和 profile。thumbs 和 encoded-video 目录可以重新生成,但需要消耗数小时的 CPU 时间。单独保存数据库转储无法恢复任何内容,因为其中只有元数据。

对于 PhotoPrism,索引有专用命令。

docker compose exec photoprism photoprism backup -i -f

该命令会在 storage/backup/ 下写入 SQL 转储。然后复制 originals 目录和 storage 目录。PhotoPrism 还会写入描述每张照片的 YAML 伴随文件,因此即使索引丢失,也可以仅根据文件重新构建索引。对于计划保存数十年的档案,这是一个实际优势。

无论选择哪种方案,都应按计划将备份发送到服务器之外的存储位置,使用加密、去重的 restic 备份并存储到远程位置。与媒体库位于同一磁盘上的备份不是真正的备份。应让任务在失败时发出告警,因为3月悄然停止运行的备份,在真正需要之前看起来与昨晚刚运行过的备份完全一样;自行托管的 ntfy 服务器会在当天晚上将失败通知推送到您的手机。

应运行哪个

如果照片主要在手机上、需要为多人备份相机胶卷,并且服务器可提供 6 GB 或更多 RAM,请运行 Immich。它是最接近可自行托管的 Google Photos 的方案,重点在于移动端体验。我们的 Immich 分步安装指南详细介绍了内存不足导致的进程终止问题和升级陷阱。

如果磁盘上已有照片存档、重视地图和元数据并希望保留自己的文件夹结构,或者 VPS 只有 4 GB RAM,您更希望使用正常工作的图库而不是频繁交换内存,请运行 PhotoPrism。它更适合整理照片,对小型硬件的负担也更小。

同时运行两者也合理。Immich 负责日常从手机导入照片;每年整理一次需要保留的照片,将其归档,再让 PhotoPrism 为归档建立索引。两者不会冲突,因为 PhotoPrism 读取文件夹,而 Immich 使用自己的存储。

FAQ

PhotoPrism 和 Immich 可以共用同一个照片文件夹吗?

不能安全地双向共用。PhotoPrism 会为 originals 文件夹建立索引,并且除非以只读模式运行,否则可能向其中写入内容;而 Immich 需要独占其上传位置中的内容。您可以让 PhotoPrism 指向 Immich 的 library 文件夹的只读副本,以便浏览其中的照片,但不要让两个应用管理同一组文件。因为 Immich 建立索引时,其存储模板可能会移动或重命名 PhotoPrism 正在处理的资源。

Immich 稳定到可以保存我的照片唯一副本吗?

不可以。任何自托管应用都不应保存某项数据的唯一副本。Immich 现在遵循语义化版本控制,并表示破坏性变更仅限于大版本发布。因此,请将 IMMICH_VERSION 固定到类似 v3 的大版本标签,阅读发布说明,然后使用 docker compose pull && docker compose up -d 升级。不支持降级,即使是在同一小版本内也不支持,因此每次升级前都应导出数据库。将原始文件备份到服务器之外,风险就会保持较低。

为什么 Immich 的机器学习容器会不断重启?

通常是因为占用内存过多而被终止。运行 docker compose ps --all,因为不带该标志时,已停止的容器不会显示;然后查找机器学习服务是否以退出码 137 退出。该退出码表示进程被信号 9 终止。通常原因是内核的 out-of-memory killer,但并非唯一原因,因此请使用 sudo dmesg | grep -i 'out of memory' 确认。您可以添加 swap,或者在 4 GB 内存的机器上完全禁用机器学习。为容器设置内存限制并不会对其进行限流:达到限制后容器仍会被终止,但不会继续耗尽服务器其余部分的内存。禁用机器学习后,智能搜索和人脸识别将无法使用,但 Immich 的其他功能仍可正常运行。

PhotoPrism 必须使用 MariaDB,还是 SQLite 也可以?

SQLite 可以正常工作,适合个人照片库。但使用 SQLite 时,PhotoPrism 会将自身限制为 4 个 worker;官方文档建议切换到 MariaDB,因为 MariaDB 更适合处理高并发。项目发布的 compose 文件已经包含 MariaDB,因此推荐方案也是默认方案。

除照片库大小外,还应预留多少磁盘空间?

在原始文件大小的基础上,为任一应用额外预留 10% 到 20%。这部分空间用于生成缩略图和转码后的视频预览。一个 200 GB 的照片库,单是照片库本身就需要大约 220 到 240 GB,此外还要为数据库和后续增长预留空间。如果您还在同一卷上保存完整的本地备份副本,那么原始文件和该副本在计算其他内容前至少需要 400 GB。因此,建议预留约 450 GB,或将副本放在单独的卷上。

这篇文章对您有帮助吗?