SSD Nodes Learn 🎉 VPS $5.50/月起
指南 Matt Connor作者: Matt Connor · 更新于 2026-08-07

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

对比 PhotoPrism 与 Immich 的实际内存下限、手机自动备份、地图与文件管理方式,并给出 VPS 部署所需的准确备份命令。

PhotoPrism 与 Immich:简短结论

PhotoPrism 与 Immich 面向的是两种不同的需求,而不是同一产品的两个版本。Immich 用于替代 Google Photos:手机应用会自动备份相机胶卷,生成的时间线对离开手机图库的用户来说很熟悉。PhotoPrism 用于整理已有的照片库:它会索引磁盘上的文件目录,读取文件元数据,将照片显示在地图上,同时保持文件原有位置不变。

如果问题是“我的手机存储空间已满,而且我想停止使用 Google Photos”,请选择 Immich。如果问题是“我的硬盘上有 400 GB 照片,但我找不到需要的内容”,请选择 PhotoPrism。两者都是开源软件,都可以作为 Docker 容器运行在普通 VPS 上,也都能在不将数据发送给第三方的情况下索引和搜索您的照片库。

理念分歧,以及它为何决定一切

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

PhotoPrism 读取文件。您挂载一个自己已经管理的 originals 文件夹,PhotoPrism 在其上建立索引。目录树仍由您控制。如果您明天移除 PhotoPrism,照片仍会保留在原来的文件夹中,文件名也不会改变;PhotoPrism 还会在照片旁写入描述其分析结果的 sidecar YAML 文件。

这一项差异解释了其余大部分区别。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 的机器上,内核会终止该容器。你会看到它以退出码 137 退出,这是 Docker 中内存不足终止的表现。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 是存放原始照片的位置,DB_PASSWORD 必须使用 A-Za-z0-9 中的字符修改默认值,因为特殊字符会破坏连接字符串。然后启动服务。

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相同。

哪个项目的手机应用更好

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

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

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

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

机器学习实际带来的功能

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

PhotoPrism 使用 TensorFlow 将图像分类为标签,检测人脸并将其归入人物,还会读取位置元数据来生成地点地图。地点地图是用户持续使用该功能的主要原因:按拍摄地点建立索引,为浏览二十年来的照片提供了完全不同的方式。免费 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 sidecar 文件,即使索引丢失,也可以仅根据文件重建索引。对于计划保存数十年的归档数据,这是一个实际优势。

无论选择哪个应用,都应按计划将备份发送到服务器之外,使用加密、去重的 restic 备份远程存储。与照片库位于同一块磁盘上的备份不是真正的备份。

应运行哪个

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

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

同时运行两者也是合理的选择。Immich 负责每天从手机导入照片;每年整理一次需要保留的照片,将它们归档,再让 PhotoPrism 为存档建立索引。两者不会冲突,因为 PhotoPrism 读取文件夹,而 Immich 管理自己的数据。

FAQ

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

不建议让两个应用双向安全地共享。PhotoPrism 读取 originals 文件夹,并在图像旁写入 YAML 伴随文件;Immich 则要求独占其上传位置中的内容。您可以将 Immich 的 library 文件夹设置为只读副本,并让 PhotoPrism 浏览其中的内容,但不要让两个应用管理同一批文件。因为 Immich 建立索引时,其存储模板可能会移动或重命名 PhotoPrism 正在使用的资源。

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

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

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

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

PhotoPrism 需要 MariaDB,还是使用 SQLite 也可以?

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

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

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