Immich 深度解析:自架相片庫的架構、備份與隱私邊界
從手機自動備份、REST 服務與 Redis 工作佇列,到 PostgreSQL、機器學習服務和原始檔保護,說明 Immich 的實際部署成本。
定位與受關注原因
Immich 是針對相片和影片的自架管理系統,重點在手機備份、瀏覽、搜尋、分享與多人使用。本次抓取時程式庫有 108,332 個 Star,最近 30 天主分支約有 193 次提交,v3.0.3 在一週內發佈。它處理的不只是相簿介面,而是把行動用戶端、媒體處理、詮釋資料、搜尋和長期儲存放到使用者控制的伺服器。
使用情境與關鍵能力
常見情境包括家庭手機相簿自動備份、多人共享圖庫、依地點與詮釋資料搜尋、公開連結分享,以及 RAW、Live Photo 和影片的集中管理。系統也提供人臉分群、CLIP 搜尋、重複項目處理、外部圖庫與 API。價值在於日常體驗接近託管相簿服務,同時保留自有基礎設施的控制;可用性責任也因此轉到管理者身上。
架構與運作原理
官方架構採用用戶端與伺服器分離。Android、iOS、Web 和 CLI 透過 REST API 存取伺服器;伺服器再經由儲存介面連接 PostgreSQL、Redis、機器學習服務和檔案系統。Redis 承載縮圖、轉碼與辨識等背景工作,PostgreSQL 保存使用者、資產路徑和詮釋資料,原始相片與衍生檔案則位於上傳目錄。人臉流程產生向量並寫入資料庫,再用近鄰搜尋和分群整理人物。
技術棧與資料邊界
主程式庫以 TypeScript 為主,Web 用戶端使用 SvelteKit,行動端使用 Flutter,伺服器依賴 PostgreSQL 與 Redis,機器學習工作則拆成獨立服務。Docker Compose 通常負責多個容器和持久卷。資料庫記錄檔案路徑與關係,卻不會自動重掃媒體目錄來重建所有狀態,所以資料庫與原始檔必須視為同一組資產,不能只備份其中一項。
最小部署路徑
官方建議在支援 Docker 的 Linux 主機使用 Docker Compose。管理者下載目前版本的 `docker-compose.yml` 和範例 `.env`,設定 `UPLOAD_LOCATION`、資料庫目錄與憑證,再執行 `docker compose up -d`。首次啟動後建立管理員帳號,行動端則指向伺服器 URL。正式使用前仍要設定 TLS 反向代理、固定資料目錄、容量告警和備份,不應把範例配置視為完整正式方案。
優點、限制與維護成本
優點是功能範圍完整、用戶端成熟、更新頻繁,也支援硬體轉碼與機器學習加速。限制是元件多且升級節奏快,影片轉碼和辨識會消耗 CPU、GPU、記憶體與磁碟。行動端備份也會受到作業系統背景政策和網路影響。管理者要閱讀版本說明、預留資料庫遷移時間、監控佇列,並避免縮圖或模型重建占滿原始媒體所需空間。