快轉到主要內容

PhotoPrism,用Docker架設Google相簿替代品

· 民國112年癸卯年
·
切換繁體/簡體
分類 Linux系統 Self-hosting自架
標籤 Photo Gallery Google Photos Media Server
目錄

PhotoPrism是開源免費的相簿服務軟體,介面跟Google相簿類似,用於瀏覽電腦上的相片影片。在搜尋時會使用臉孔偵測、AI辨識、地點給圖片分類和上標籤,就像Google相簿自動整理的功能。

PhotoPrism主要特點是自架雲端相簿服務,照片資料都是在本機處理,不會給第三方偷看。如果說自架的NextCloud專精文件,Jellyfin專精影片的話,PhotoPrism就是專精在相片處理這一塊。

經過幾年開發,PhotoPrism現在已經很好上手了,Docker設定後是開箱即用。應用程式介面靠網頁端存取,手機會自動變換UI,且載入速度接近Google相簿。

這篇文章將會介紹PhotoPrism的特色功能,再簡介如何用Docker在自己電腦部署,取代Google相簿。

1. PhotoPrism功能特色
#

PhotoPrsim可以讀取硬碟現有資料夾,分類後直接顯示在網頁界面的,無需重新「上傳」照片。

使用PhotoPrsim讓你同時保有資料夾分類相片與雲端上傳的操作習慣。

跟同類型的Immich相簿比起來,PhotoPrism提供更多結構化的資料,讓你更清楚的檢視圖庫裡面的照片。

PhotoPrism主介面是相片影片總覽,按照圖片拍攝時間排序。可用搜尋語法過濾圖片。

為方便網頁檢視,PhotoPrism會自動將圖片影片轉碼成快速載入的格式,並會隨螢幕大小自動變化版面。另有非官方開發的手機APP。

點選相片查看/編輯詳細資料,自訂關鍵字。

相片會按照AI辨識的結果打上標籤,我個人覺得辨識最準的就是相片中的小動物了吧。

有標示地點的相片,PhotoPrism會將其彙整並繪製成地圖。

相片搜尋支援用地點和圖片種類過濾,也可以用「顏色」當關鍵字。

最後是我個人最喜歡的功能。除了一次看全部照片外,PhotoPrism能混合硬碟目錄結構管理相片,所以檔案目錄一有變更,PhotoPrism就會重新掃描。當然從PhotoPrism的界面刪除相片,硬碟上的檔案也會跟著刪除。

PhotoPrism支援另一部裝置從網頁端「上傳」到相簿中,還可以使用WebDAV上傳相片。

不過,雖然PhotoPrism是開源專案,有些進階功能是隱藏的,參見這個表格,付費成為贊助者他們才會開放給您使用。要使用完整功能,你要嘛自己編譯改原始碼,要嘛乖乖付費,就醬子。

如果你已經準備好,那就在你的電腦上安裝PhotoPrism吧。

2. 開始安裝PhotoPrism
#

以下內容參考自PhotoPrism官方說明文件,PhotoPrism支援x86和ARM架構的機器。

  1. 於Linux系統安裝Docker,如果需要GPU加速再安裝Nvidia顯示卡驅動及Nvidia Container Toolkit

  2. 建立儲存目錄

mkdir ~/photoprism

cd ~/photoprism
  1. 下載PhotoPrism提供的docker-compose:
wget https://dl.photoprism.app/docker/docker-compose.yml
  1. 編輯docker-compose.yml
vim docker-compose.yml
  1. 首先找到這一段,設定admin的密碼:
services:
  photoprism:
    environment:
      PHOTOPRISM_ADMIN_USER: "admin"
      PHOTOPRISM_ADMIN_PASSWORD: "八位數以上密碼"
  1. 然後設定要掛載到容器內部的目錄。PhotoPrism會從自身originals目錄匯入相片,格式為硬碟相片目錄:容器內部originals目錄,如下所示,將硬碟目錄掛載後PhotoPrism就會直接取用硬碟的相片。
services:
  photoprism:
 ## 冒號左邊是硬碟路徑,右邊是容器內部的路徑。例如將硬碟目錄"TOSHIBA1TB"掛載作為PhotoPrism的"originals"目錄,等同二邊檔案同步
    volumes:
      - "/run/media/ivon/TOSHIBA1TB:/photoprism/originals"
      - "/run/media/ivon/TOSHIBA1TB/DCIM:/photoprism/originals/DCIM"
      - "/run/media/ivon/TOSHIBA1TB/Pictures:/photoprism/originals/Pictures"

 ## storage是存放縮圖資料的路徑,不改的話預設就是存在docker-compose.yml所在的目錄
      - "./storage:/photoprism/storage"

  mariadb:
 ## database是存放資料庫的路徑,不改的話預設就是存在docker-compose.yml所在的目錄
    volumes:
      - "./database:/var/lib/mysql"
  1. 接著設定轉碼器。PhotoPrism會把影片用ffmpeg轉碼以提昇播放效率,這裡不設定的話預設就是軟解。按照官方文件說明,將docker-compose修改成使用Nvidia顯示卡加速轉碼:
services:
  photoprism:
    environment:
      PHOTOPRISM_FFMPEG_ENCODER: "nvidia"
      PHOTOPRISM_INIT: "gpu tensorflow"
      NVIDIA_VISIBLE_DEVICES: "all"
      NVIDIA_DRIVER_CAPABILITIES: "compute,video,utility"
      ...
    volumes:
      - ...
    deploy:
      resources:
        reservations:
          devices:
            - driver: "nvidia"
              count: 1
              capabilities: [gpu]
  1. 在三個service下方加上restart: 'unless-stopped'設定開機自動啟動容器。
services:
  photoprism:
    restart: 'unless-stopped'
  1. 啟動容器,等待image下載完成。第一次啟動可能要等個幾分鐘才能開啟網頁端登入。
sudo docker compose up -d
  1. 用瀏覽器開啟http://localhost:2342,就會進到PhotoPrism網頁端介面。你也可以透過http://區域IP:2342來存取。

  2. 登入admin帳號,到左下角的系統設定調成中文

  3. 點選左側的收藏庫,開始掃描新相片影片建立資料庫。

  4. 初次索引的時候會狂吃系統資源,RAM不足4GB的電腦記得要給大一點SWAP。1000張相片大約需要幾個小時索引和分類,中間如果有移除目錄,建議也是讓PhotoPrism重新掃描變更。

  5. 如果要停止容器,執行此指令:

cd "docker-compose.yml所在目錄"

sudo docker compose down
  1. 現在本機能存取PhotoPrism了,那麼外部網路要怎麼連線到PhotoPrism呢?我採用內網穿透方式,看這裡瞭解如何將電腦和手機加入至虛擬區域網路。記得防火牆要開啟2342 TCP通訊埠:
sudo ufw allow 2342/tcp

sudo ufw reload

3. 匯入Google相簿照片至PhotoPrism
#

將Google相簿的相片搬家到PhotoPrism,在那之前要先用第三方程式整理一下。

  1. 使用GooglePhotosTakeoutHelper整理照片。

  2. 照片整理完後,先將PhotoPrism容器停止

cd ~/photoprism

 docker compose down
  1. 編輯docker-compose.yml,加入Google相簿的目錄到PhotoPrism。目錄名稱隨意取,下面只是範例。
  volumes:
      - "/run/media/ivon/TOSHIBA1TB/DCIM:/photoprism/originals/DCIM"
      - "/run/media/ivon/TOSHIBA1TB/GooglePhotos:/photoprism/originals/GooglePhotos"
  1. 再啟動容器。登入PhotoPrism網頁,開始掃描新相片。
sudo docker compose up -d

4. PhotoPrism相片管理機制
#

  1. PhotoPrism的主目錄是originals,但在Docker容器內部不好存取。硬碟有個目錄叫做Pictures,你將它掛載到PhotoPrism,PhotoPrism就會將Pictures當作originals目錄使用。

  2. 這樣一來PhotoPrism就會開始處理originals資料夾下的相片,轉檔成較小的格式並寫入到資料庫,也就是網頁端主畫面所看到的那樣。而originals目錄下的相片檔案保持不變。因此你可以建立子目錄,像是originals/family這樣,方便在PhotoPrism的主界面以「資料夾」模式檢視相片。而PhotoPrism的「相簿」功能並不會在硬碟上建立任何目錄,只有PhotoPrism網頁端能看到。

  3. 未來要新增相片,有二種方法:一:把相片傳到硬碟Pictures目錄,再由PhotoPrism掃描新增。二:從PhotoPrism的網頁端上傳相片。

  4. 從PhotoPrism網頁端上傳的相片會跑去哪?PhotoPrism會將其放到originals目錄,以拍攝日期建立目錄。例如foo.webp11/1拍攝的,它就會在originals目錄下建立「11」、「01」的目錄,再把相片檔案放進去。

  5. 由此可見,習慣用「資料夾」分類相片的人,還是採用方法一新增相片到硬碟較好,你可以手動把檔案傳到電腦,或是用Syncthing這類軟體無線同步。

  6. 在PhotoPrism網頁端刪除相片,硬碟目錄的相片也會刪除,反之亦然。不過PhotoPrism網頁端要刪除相片是選取相片,點選「封存」,進到左側選單的「封存」頁面才能將相片刪除。

  7. 用WebDAV放相片到PhotoPrism的originals目錄後,PhotoPrism每15分鐘會自動索引新相片。

5. 分享PhotoPrism相片 & 用WebDAV上傳相片
#

如果PhotoPrism是架在有網域的伺服器上,選取「相簿」點選分享,別人就可以透過該連結查看相簿。

你可以從網頁端直接下載多張相片。

分享「單張相片」是分享原始畫質的檔案,會得到一個WebDAV連結。

PhotoPrism內建WebDAV伺服器功能,點選分享相片後,用GNOME的Nautilus這類軟體掛載WebDAV,就能存取originals目錄下的檔案。

6. PhotoPrism手機APP
#

手機遠端存取PhotoPrism請記得使用內網穿透軟體,看這裡

PhotoPrism官方沒有開發APP,僅提供PWA網頁程式,也就是在手機開網頁版,網址為http://電腦虛擬區域IP:2443

不過手機還是有APP用起來比較爽吧,這裡有第三方開發的PhotoPrism Gallery,界面清爽許多,支援搜尋相簿和標籤。

可惜的是PhotoPrism並沒有直覺的手機備份方案,如果要自動將手機相片備份到電腦目錄,建議使用開源的Syncthing同步到硬碟目錄,這樣就能給PhotoPrism掃描新相片。

相關文章


此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。

(留言板載入中)這是Giscus留言板,需要Github帳號才能留言。支援Markdown語法,若要上傳圖片請善用外部圖床。您的留言會在Github Discussions向所有人公開。

Click here to edit your comments.

(留言板載入中)這是Disqus留言板,您可能會看到Disqus強制投放的廣告。為防止垃圾內容,有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請善用外部圖床網站。