用 Immich 自架我的照片
對於我使用的每一項雲端服務,我都希望能在本地保留一份資料,用於備份並保持自主性。不幸的是,gphotos-sync 工具在 Google 限縮 OAuth 範圍後,於 2025 年 3 月停止運作,因此我必須為現有的 Google Photos 設定尋找替代方案。在這篇文章中,我將說明如何架設 Immich,這是一套可自行託管的相片管理工具。
成果如下:幾張來自 NixCon 2025 的(Live)照片:

步驟 1. 硬體
我在我的 Ryzen 7 Mini PC(ASRock DeskMini X600) 上執行 Immich,它在閒置時耗電不到 10 W,且擁有充足的資源可供 VM 使用(64 GB RAM、1 TB 磁碟)。你可以在我 2024 年 7 月的部落格文章中閱讀更多相關內容:
我安裝了 Proxmox,這是一套開放原始碼的虛擬化平台,用來將這台迷你伺服器切分成多個 VM,不過你當然也可以直接在任何伺服器上安裝 Immich。
步驟 2. 安裝 Immich
我建立了一台名為「photos」的 VM,配置 500 GB 磁碟空間、4 個 CPU 核心以及 4 GB 記憶體。
若要進行初次匯入,你可以配置更多的 CPU 和記憶體,但就一般使用而言,這樣的資源已經足夠。
我依照這篇部落格文章的說明,在該 VM 上(以宣告式)安裝了 NixOS:
接著,我啟用了 Immich,設定如下:
services.immich = {
enable = true;
};此時 Immich 已可在 localhost 上使用,但由於 NixOS 預設會啟用防火牆,因此無法透過網路存取。我可以啟用 services.immich.openFirewall 選項,但我實際上希望 Immich 僅能透過我的 Tailscale VPN 存取,這樣就不需要開放防火牆——相反地,我使用 tailscale serve 將流量轉送至 localhost:2283:
photos# tailscale serve --bg http://localhost:2283由於我已啟用 Tailscale 的 MagicDNS 與 TLS 憑證自動佈建,現在我可以在電腦、筆電或手機的瀏覽器上開啟 https://photos.example.ts.net。
步驟 2. 初次匯入照片
一開始,我嘗試使用官方的 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 Photos 的 Google Takeout 封存檔會將中繼資料存放在原始圖片檔旁邊的獨立 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步驟 3. 安裝 Immich iPhone App
我的新照片主要來源是手機,因此我在 iPhone 上安裝了 Immich App,透過 Tailscale 網址登入我的 Immich 伺服器,並透過右上角的圖示啟用新照片的自動備份。
我不太確定這些設定是否正確,但看起來相機拍攝的照片通常會歸到 Live Photos,而 Recent 應該會涵蓋其他檔案……?!
如果有人知道答案,煩請傳個說明(或連結!)給我,我會更新這篇文章。
我也強烈建議關閉 Immich 的通知,否則每當它在背景上傳圖片時,你都會收到通知。這些通知並非背景上傳正常運作所必需,這一點已獲 一位 Immich 開發者在 Reddit 上證實。請依序開啟 Settings → Apps → Immich → Notifications,並取消勾選通知權限:
步驟 4. 備份
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 上自動備份太難設定,這部分也可以改進。
但除了這些一開始的小障礙之外,我沒有其他抱怨。
隨機一篇部落格