用 Immich 自架相片服務
原文由 Michael Stapelberg 于 發布,訂閱此部落格
我使用的每一項雲端服務,我都希望能在本地保留一份資料,以確保備份與自主性。可惜的是,gphotos-sync 這個工具在 2025 年 3 月停止運作,原因是 Google 限縮了 OAuth 授權範圍,因此我必須為現有的 Google Photos 環境尋找替代方案。在這篇文章中,我將說明我是如何架設 Immich 這套可自行架設的相片管理工具的。
成果如下:幾張來自 NixCon 2025 的(實況)相片:

步驟一:硬體
我把 Immich 跑在我的 Ryzen 7 迷你電腦(ASRock DeskMini X600)上,它在閒置時耗電不到 10 瓦,而且擁有充裕的資源可供虛擬機使用(64 GB 記憶體、1 TB 硬碟)。你可以在我 2024 年 7 月的部落格文章中看到更詳細的介紹:
我在這台迷你伺服器上安裝了 Proxmox 這套開源虛擬化平台,將它切分成多台虛擬機,不過你當然也可以直接在任何伺服器上安裝 Immich。
步驟二:安裝 Immich
我建立了一台名為「photos」的虛擬機,配置了 500 GB 硬碟空間、4 核心 CPU 與 4 GB 記憶體。
如果是初次匯入,你可以分配更多的 CPU 與記憶體,但平常使用這樣的規格就很足夠了。
我以宣告式的方式在該虛擬機上安裝了 NixOS,如這篇部落格文章所述:
接著,我用以下這段設定啟用了 Immich:
services.immich = {
enable = true;
};此時 Immich 已經可以在 localhost 上使用,但由於 NixOS 預設會啟用防火牆,所以還無法透過網路存取。我可以開啟 services.immich.openFirewall 這個選項,但我其實只希望透過 Tailscale VPN 來存取 Immich,這樣就不需要開放防火牆——取而代之,我使用 tailscale serve 將流量轉送到 localhost:2283:
photos# tailscale serve --bg http://localhost:2283因為我已經啟用了 Tailscale 的 MagicDNS 和 TLS 憑證自動配置,所以現在我可以在電腦、筆電或手機的瀏覽器上直接開啟 https://photos.example.ts.net。
步驟二:初次匯入相片
一開始,我嘗試使用官方的 Immich CLI 來匯入相片:
% nix run nixpkgs#immich-cli -- login https://photos.example.ts.net secret
% nix run nixpkgs#immich-cli -- upload --recursive /home/michael/lib/photo/gphotos-takeout可惜上傳過程並不穩定,遇到逾時後必須手動重啟好幾次。後來我才發現,這是因為 Immich 伺服器會在背景執行縮圖產生、中繼資料擷取或人臉辨識等工作,這些背景工作會拖慢上傳速度,甚至導致上傳逾時失敗。
另一個問題是,即使上傳完成後我才發現,Google Takeout 匯出的 Google Photos 檔案,會把中繼資料放在與原始圖片檔並列的獨立 JSON 檔案中:

可惜 immich-cli 並不會處理這些檔案。
幸好,有一套很棒的第三方工具叫做 immich-go,正好解決了這兩個問題!它會在上傳前暫停背景工作、上傳後再重新啟動,運作起來穩定許多,而且它也能盡可能地解析 Google Takeout 的匯出檔。
我用以下方式執行 immich-go,效果非常好:
% immich-go \
upload \
from-google-photos \
--server=https://photos.example.ts.net \
--api-key=secret \
~/Downloads/takeout-*.zip步驟三:安裝 Immich iPhone App
我主要的相片來源是手機,所以我在 iPhone 上安裝了 Immich App,透過 Tailscale 網址登入我的 Immich 伺服器,並透過右上角的圖示開啟新相片的自動備份功能。
我不是百分之百確定這些設定是否正確,但看起來用相機拍的照片通常會歸到 Live Photos,而 Recent 應該會涵蓋其他檔案……?!
如果有人知道正確的設定方式,歡迎傳個說明(或連結!)給我,我會更新這篇文章。
我也強烈建議關閉 Immich 的通知,否則它每次在背景上傳圖片時都會跳出通知。其實背景上傳並不需要靠這些通知才能運作,這點已有一位 Immich 開發者在 Reddit 上確認過。請開啟 Settings → Apps → Immich → Notifications 並取消勾選權限:
步驟四:備份
Immich 關於備份的文件中有一些不錯的建議。Immich 開發者建議備份 UPLOAD_LOCATION 的全部內容,在 NixOS 上這個路徑是 /var/lib/immich。其中 backups 子目錄存放的是 SQL 備份檔,而 upload、library 和 profile 這三個目錄則包含了所有使用者上傳的資料。
因此,我設定了一個 systemd timer,定期執行 rsync 將 /var/lib/immich 複製到我的電腦上,而我的電腦本身已納入 3-2-1 備份策略中。
還缺少什麼?
Immich(目前?)還沒有內建相片編輯功能,所以如果要旋轉或裁切圖片,我會先下載圖片再用 GIMP 處理。
至於分享圖片,我還是會(視分享對象而定)上傳到 Google Photos。
為什麼選擇 Immich 而不是……?
在自行架設的影像管理工具領域中,看起來最有前景的兩個選項是 Immich 和 Ente。
我感覺在我的同溫層裡 Immich 比較受歡迎,而 Ente 給我的印象是,它的範疇遠比我需要的還要大:
Ente 是一項服務,提供完全開源、端對端加密的平台,讓你無需信任服務供應商就能將資料儲存在雲端。在此平台之上,我們目前已打造了兩款應用程式:Ente Photos(Apple 和 Google Photos 的替代方案)和 Ente Auth(已停止維護的 Authy 的雙重驗證替代方案)。
我不需要端對端加密的平台。我在傳輸層(Tailscale)和磁碟層(LUKS)就已經有加密了,不需要再增加複雜度。
結論
Immich 是一款令人愉快的應用程式!速度非常快,整體運作也很順暢。
初次匯入的過程很順暢,但前提是要用對工具。理想上,官方的 immich-cli 可以再改進一下。或者,也許可以直接讓 immich-go 成為官方工具。
我覺得在 iPhone 上自動備份的設定有點太難,這部分也可以再改進。
但除了這些一開始的小障礙之外,我沒有其他抱怨。
隨機一篇部落格
留言
登入後參與討論