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

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 文件。

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

硬件需求:Immich 要求更高

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

ChartDocumented memory requirement, as of July 2026
The data behind this chart
[
  {
    "label": "Immich",
    "min_ram_gb": 6,
    "recommended_ram_gb": 8
  },
  {
    "label": "PhotoPrism",
    "min_ram_gb": 3,
    "recommended_ram_gb": 4
  }
]

Immich 文档将 6 GB RAM 列为最低要求,将 8 GB 列为推荐配置,并注明只有关闭机器学习后,4 GB 内存的机器才能运行。PhotoPrism 文档要求 3 GB 物理内存和 2 个 CPU 核心,并说明 RAM 容量应与核心数匹配。

这个差距确实存在,原因在于机器学习容器。Immich 在独立的 immich-machine-learning 服务中运行模型,该服务会将 CLIP(对比语言-图像预训练)模型和人脸检测模型加载到内存中。在 2 GB 的机器上,内核会终止该容器;从 Docker 的角度看,容器会以退出码 137 退出,这表示进程因内存不足被终止。PhotoPrism 使用的 TensorFlow 模型更小,内存不足时会降级而不是退出:在内存不超过 1 GB 的机器上,它会禁用 RAW 转换和 TensorFlow,而不是直接崩溃。

两个项目都要求配置 swap。PhotoPrism 文档明确要求服务器至少有 4 GB 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 中设置内存限制,可以防止某个高内存服务拖垮整台机器。

还有一项要求容易被忽略。Immich 的 Postgres 数据库必须位于普通的 Unix 文件系统中,具备真实的所有权和权限,并使用本地存储,绝不能位于网络共享上。PhotoPrism 对其数据库文件也有相同要求。将数据库放在已挂载的对象存储上运行这两个应用都不安全。

如何安装这两个应用

这两个应用都使用供应商提供的 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

开始前编辑 .envUPLOAD_LOCATION 是存放原始照片的位置,必须使用仅包含 A-Za-z0-9 中字符的值修改 DB_PASSWORD 的默认值,否则特殊字符会破坏连接字符串。然后启动服务。

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相同的部署结构。如果该 VPS 最终还承载照片以外的服务,那么新增的每个服务也都应遵循相同的限制原则,因为自托管 RustDesk 中继只需让其自身的两个端口可访问,其他端口均不应暴露。

哪一个的手机应用更好

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

Immich 提供官方 Android 和 iOS 应用。它们支持在后台备份相机胶卷,也就是说,新照片无需打开任何应用就会离开手机。该应用要求使用 HTTPS 端点,因此如果计划在家中网络之外使用,反向代理不是可选项。

PhotoPrism 没有官方原生应用。它提供渐进式 Web 应用,您可以在浏览器中将其添加到主屏幕;项目文档则将 WebDAV(Web 分布式创作与版本控制)列为从手机同步的方式。项目建议使用名为 PhotoSync 的第三方应用执行此操作,并通过 WebDAV 将其指向 /import//originals/ 目录。它可以正常工作,但需要付费的第三方应用来完成 Immich 在自身客户端中即可完成的任务。

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

机器学习实际能为您做什么

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

PhotoPrism 使用 TensorFlow 将图像分类为不同标签,检测人脸并将其归类到人物中,还会读取位置元数据来创建地点地图。地图是用户持续使用 PhotoPrism 的主要功能:按照片拍摄地点建立索引,为浏览 20 年的照片提供了完全不同的方式。同样的思路也适用于其他媒体集合;Halcyon 为 Jellyfin 提供的 90 年代录像店前端就是电影版本,按货架而不是按列表浏览。免费 Community 版包含人脸识别功能。付费 Essentials 和 Plus 会员增加了更丰富的地图图层、更多用户角色和用户管理界面等功能。截至 2026 年 7 月,价格从每月几欧元起。

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。存放不可替代数据的目录是 uploadlibraryprofilethumbsencoded-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 目录,并在图像旁边写入 sidecar YAML 文件;Immich 则要求独占其上传位置中的内容。您可以将 PhotoPrism 指向 Immich 的 library 目录的只读副本,以便浏览其中的照片。但不要让两个应用管理同一批文件,因为 Immich 在建立索引时,可能会根据存储模板移动或重命名资源,从而影响 PhotoPrism。

Immich 稳定到可以作为照片的唯一副本吗?

不应让任何自托管应用保存某个文件的唯一副本。Immich 经常发布包含不兼容变更的版本,粗心的 docker compose pull 可能导致数据库无法启动。因此,请固定版本,并在升级前阅读发行说明。将原始文件备份到服务器之外的位置,即可将风险降至较低水平。

为什么 Immich machine learning 容器会不断重启?

因为它使用了过多内存而被终止。运行 docker compose ps,查找 machine learning 服务是否以代码 137 退出;这表示触发了内核的 out of memory killer。您可以添加 swap,或者为容器设置内存限制,使其受到限制而不是被终止;也可以在 4 GB 机器上完全禁用 machine learning。禁用后搜索将无法使用,但 Immich 的其他功能仍可正常运行。

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

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

应在照片库容量之外预留多少磁盘空间?

在原始文件总大小的基础上,额外预留 10% 到 20%,无论使用哪个应用都适用。这部分空间用于生成缩略图和转码后的视频预览。对于 200 GB 的照片库,建议准备大约 300 GB 的卷,以便为数据库、本地备份副本和后续增长预留空间。