PhotoPrism 與 Immich 怎麼選?需求與備份比較
比較 PhotoPrism 與 Immich 的真實 RAM 最低需求、手機應用程式、地圖功能,以及 VPS 上各自必須執行的精確備份指令。
PhotoPrism 與 Immich:簡短結論
PhotoPrism 與 Immich 的差異,在於兩者解決的是不同問題,而不是同一產品的不同版本。Immich 用來取代 Google Photos:手機應用程式會自動備份相機膠卷,而時間軸的使用方式對離開手機圖庫的使用者而言相當熟悉。PhotoPrism 則用來整理既有的相片庫:它會索引磁碟上的檔案資料夾、讀取中繼資料、將相片標示在地圖上,並讓檔案維持原本的位置。
如果你的問題是「手機容量已滿,而且我想離開 Google Photos」,請選擇 Immich。如果你的問題是「磁碟上有 400 GB 的相片,但我找不到需要的內容」,請選擇 PhotoPrism。兩者都是開放原始碼軟體,都能在一般 VPS 上以 Docker 容器執行,也都能在不將資料傳送給第三方的情況下,索引並搜尋你的相片庫。
理念分歧,以及它為何決定一切
Immich 管理檔案。您將它指向上傳位置,手機應用程式或 Web 上傳工具會將原始檔案傳入,Immich 再依自己的路徑與命名方式儲存檔案。資料庫保存相簿、人臉與搜尋功能的實際狀態。這種設計讓手機使用體驗良好,因為伺服器隨時掌握每個資產的完整狀態。
PhotoPrism 讀取檔案。您掛載一個已由自己管理的 originals 資料夾,PhotoPrism 會在其上建立索引。目錄結構仍由您管理。即使明天移除 PhotoPrism,照片仍會以相同名稱保留在相同資料夾中,而 PhotoPrism 會在照片旁寫入 sidecar YAML 檔案,記錄它所分析出的資訊。
這項差異可以解釋其餘大部分特性。Immich 能提供完善的行動裝置支援,因為它控制檔案匯入流程。PhotoPrism 能提供完善的媒體庫整理功能,因為它不會改變您現有的結構。對於照片主要存放在手機上的家庭,Immich 是較適合的選擇。對於保存於磁碟上的檔案庫,PhotoPrism 是較適合的選擇。
硬體需求:Immich 的需求較高
文件列出的記憶體最低需求差距很大。在小型 VPS 上,這通常是決定因素。
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 的機器只有在關閉 machine learning 時才能執行。PhotoPrism 文件列出 3 GB 實體記憶體與 2 個 CPU 核心,並表示 RAM 容量應與核心數相符。
這項差距確實存在,原因在於 machine learning 容器。Immich 會在獨立的 immich-machine-learning 服務中執行模型,並將 CLIP(對比式語言影像預訓練)與臉部偵測模型載入記憶體。在 2 GB 的主機上,kernel 會終止該容器;你會看到它以代碼 137 結束,這是 Docker 顯示 out of memory 終止的方式。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 -hfree -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 plugin。
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 必須使用 A-Za-z0-9 中的字元,將預設值變更為其他值,因為特殊字元會破壞連線字串。完成後再啟動服務。
docker compose up -d
docker compose psWeb 介面會在 port 2283 回應。透過該頁面註冊的第一個帳戶會成為 administrator,因此請立即開啟頁面並完成註冊,不要讓未受保護的執行個體直接暴露在網際網路上。
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 volume 設定為存放相片的資料夾。
docker compose up -d
docker compose logs -f photoprismPhotoPrism 會以使用者 admin 在 port 2342 回應。這兩項應用程式都不應直接暴露在網際網路上。請在前方設定具備 TLS(transport layer security)的反向代理,配置方式與使用 Docker、TLS 與備份自架 Nextcloud相同。
哪一個的手機 App 較好
這是兩個專案差異最大的地方,也是多數人最後選擇 Immich 的原因。
Immich 提供 Android 和 iOS 的官方 App。這些 App 能在背景備份相機膠卷,因此新照片不必開啟任何 App 就會離開手機。App 需要 HTTPS 端點,因此如果要在家中以外的地方使用,反向代理不是選配項目。
PhotoPrism 沒有官方原生 App。它提供漸進式 Web App,可從瀏覽器新增至主畫面;文件則將 WebDAV(web distributed authoring and versioning)列為從手機同步的方式。專案建議使用名為 PhotoSync 的第三方 App,透過 WebDAV 指向 /import/ 或 /originals/ 目錄。這種方式可運作,但需要付費的第三方 App 才能完成 Immich 在自有用戶端中處理的工作。
如果需求是為多位家庭成員自動備份手機照片,選擇就很明確:Immich。
機器學習實際提供的功能
Immich 使用 CLIP 對相片庫執行語意搜尋,因此像「雪地中的紅色自行車」這類查詢,也能找到從未有人加上標籤的相片。它也能進行臉部偵測、分群及重複項目偵測。在 CPU 上為大型匯入建立索引時,背景作業可能會執行數小時,這是正常情況,不需要 GPU(graphics processing unit)。
PhotoPrism 使用 TensorFlow 將影像分類為標籤、偵測臉部並將其分組為人物,也會讀取位置中繼資料來建立地點地圖。地圖是使用者持續使用 PhotoPrism 的主要功能:依拍攝地點建立索引,提供了瀏覽二十年相片的不同方式。免費的 Community 版本包含臉部辨識。付費的 Essentials 和 Plus 會員方案則提供更豐富的地圖圖層、更多使用者角色及使用者管理介面等額外功能;截至 July 2026,每月費用從數歐元起。
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 dump。接著複製 originals 資料夾和 storage 資料夾。PhotoPrism 也會寫入描述各張相片的 sidecar YAML 檔案,因此即使索引遺失,也能只依靠檔案重新建立索引。對於計畫保存數十年的封存資料,這是很大的優勢。
無論選擇哪一個應用程式,都應依排程將備份傳送到伺服器之外,使用 加密且去重複的 restic 備份,儲存至遠端儲存空間。與相片庫位於同一顆磁碟上的備份不算備份。
應該選哪一個
如果照片主要來自手機、需要讓不只一個人備份相機膠卷,且伺服器可提供 6 GB 以上的 RAM,請使用 Immich。它是最接近可自行託管的 Google Photos 方案,重點在於行動裝置體驗。我們的 Immich 逐步安裝指南詳細說明記憶體不足終止程序的問題與升級時常見的陷阱。
如果磁碟上已經有照片封存資料、重視地圖與中繼資料及保留自己的資料夾結構,或 VPS 只有 4 GB RAM,且希望使用可正常運作而非持續交換的圖庫,請使用 PhotoPrism。它是較適合整理照片的工具,對硬體需求較低。
同時執行兩者也很合理。Immich 負責每日匯入手機照片;每年再將要保留的照片整理到封存資料夾,讓 PhotoPrism 為其建立索引。兩者不會互相衝突,因為 PhotoPrism 讀取資料夾,而 Immich 使用自己的資料儲存空間。
FAQ
PhotoPrism 和 Immich 能共用相同的相片資料夾嗎?
不建議讓兩者雙向共用。PhotoPrism 會讀取 originals 資料夾,並在影像旁寫入 sidecar YAML 檔案;Immich 則預期由自己管理上傳位置的內容。你可以將 Immich 的 library 資料夾設為唯讀副本,提供給 PhotoPrism 瀏覽,但不要讓兩個應用程式管理相同檔案,因為 Immich 在建立索引時,可能依據 storage template 移動或重新命名 PhotoPrism 正在使用的資產。
Immich 穩定到可以保存相片的唯一副本嗎?
任何自架應用程式都不應保存任何資料的唯一副本。Immich 經常發布會造成不相容變更的版本,而不慎執行 docker compose pull 可能導致資料庫無法啟動。因此,請固定版本,並在升級前閱讀 release notes。只要將原始檔案備份到伺服器之外,風險就能維持在較低程度。
為什麼 Immich machine learning 容器一直重新啟動?
因為使用過多記憶體而被終止。執行 docker compose ps,尋找 machine learning 服務以 code 137 結束的訊息;這表示遭到 kernel 的 out of memory killer 終止。你可以加入 swap,或為容器設定 memory limit,讓它受到節流而不是被終止;在 4 GB 的機器上,也可以完全停用 machine learning。停用後搜尋會無法運作,但 Immich 的其他功能仍可正常執行。
PhotoPrism 需要 MariaDB,還是使用 SQLite 即可?
SQLite 可以運作,對個人相片庫也已足夠;但 PhotoPrism 使用 SQLite 時會將 worker 數量限制為 4 個。文件建議改用 MariaDB,因為它能更妥善處理高並行量。專案發布的 compose file 已包含 MariaDB,因此建議做法也是預設做法。
應在相片庫大小之外預留多少磁碟空間?
在原始檔案大小之外,為任一應用程式再預留 10 到 20 percent。這可容納產生的縮圖與轉碼後的影片預覽。一個 200 GB 的相片庫,在為資料庫、本機備份副本及後續成長預留空間後,約需要 300 GB 的 volume。