用 AI Agent 自架 Immich 相簿
手機一年比一年會拍,同樣一張照片卻一年比一年重,Google 相簿的免費空間遲早撐不住。記錄一次用自然語言完成的自架過程:設定、佈署、維運三道關卡,以及人的角色如何從執行者變成驗收者。
手機照片一直用 Google 相簿管理,但免費空間有上限。而這個上限特別容易被撞破,因為手機每年都在進步——感光元件變大、開始拍 4K、開始拍 HDR、開始存 Live Photo。
照片沒有變多,是每一張都變重了。
選項只剩兩個:開始付月費,或者搬到自己的機器上。但要搬得動,替代品不能只是「能存檔案」——你已經習慣的那些功能,少一項就會回頭。
這也是選 Immich 的原因。它是開源的自架相簿,日常會用到的功能都有:人臉辨識自動分群、直接打字搜尋照片內容(打「海邊的夕陽」就找得到,不需要事先貼標籤)、手機專屬 App 拍完自動上傳,還有時間軸、相簿與地圖。
其中自動上傳和文字搜尋是關鍵:少了自動上傳,你會忘記備份;少了搜尋,幾萬張照片等於找不到。
功能對得上之後,剩下的問題只有一個——你有辦法把它架起來、而且讓它一直活著嗎?
成果
| 項目 | 結果 |
|---|---|
| 功能完整 | 人臉辨識、文字搜尋、自動上傳、時間軸、相簿、地圖,使用習慣不必重學 |
| 資訊安全 | 整套服務只活在 Tailscale 私人網路裡,公開網際網路一個 port 都不開。實測從外部連 2283 / 443 / 80 / 22 全部進不來,雲端防火牆與主機防火牆兩層都擋 |
| 全自動維運 | 每天自動備份到另一個國家的機器,並且真的還原一次來驗證。失敗立刻寄 email;即使服務一切正常,每週也主動寄一封運作概況 |
| 全自然語言 | 從選型到維運機制都是討論出來的,不必自己查文件、寫設定檔、手刻腳本,也不必反覆試錯 |
實際互動只是幾次對話,每次十幾分鐘。
第一關:設定
| 以前:自己來 | 現在:與 Agent 協作 |
|---|---|
| 得自己讀懂安裝文件,而文件預設你什麼都懂 | 用討論的:說出你的機器條件和你在意的事 |
| 底層知識缺一不可:Linux 操作、Docker、網路 | Agent 讀文件、必要時直接讀原始碼查證 |
| 看懂文件裡幾十個設定項的意思,才寫得出設定檔 | 設定檔連同「為什麼這樣設」一起產出 |
| 還要自己把外部函式庫、相依服務一個個搞定 | 不確定的地方當場實測,不靠猜 |
| 光是「看懂要設什麼」,就足以卡住一個週末 | 量測成本從一個下午降到幾分鐘,所以它真的會被做 |
第二關:佈署
| 以前:自己來 | 現在:與 Agent 協作 |
|---|---|
| 算硬碟夠不夠、記憶體會不會爆 | 容量、記憶體、連線路徑,一次盤點完 |
| 內網怎麼連、外網怎麼連,各設一次 | 設定變成可重跑的腳本,跑幾次結果都一樣 |
| 網域、反向代理、HTTPS 憑證,還要記得續期 | 寫下的是意圖,不是操作步驟 |
| 設定散在機器各處,沒進版控 | 修好一個問題之後,順手讓它不能再發生 |
| 三個月後重建,憑記憶再走一次,然後漏兩件事 | 重建機器=重跑腳本 |
第三關:維運
這一關的賭注跟前兩關不一樣。
設定錯了,重設一次;佈署錯了,重跑一次。備份錯了,照片就真的沒了。
這些是十幾年的家庭照片——孩子的成長、每一趟旅行、每一個生日,沒有第二份。從一家有專職維運團隊的公司搬到自己的機器上,你就接管了它們的存亡。
| 以前:自己來 | 現在:與 Agent 協作 |
|---|---|
| 跑起來就不管了 | 備份自動跑,不需要任何人記得 |
| 沒有測試,沒有量測,沒有備份 | 驗收條件是真的還原得回來,不是指令沒報錯 |
| 就算有備份,也是靠人記得去做——久了就忘了 | 誤刪有反悔期,事件留下日誌 |
| 出事那天才手忙腳亂 | 另一台機器獨立盯著,正常時安靜,異常才主動通知 |
| 而且備份可能早就失敗了,你完全不知道 | 每週一封運作概況,讓「沒消息」也是有根據的 |
我與 AI 討論後的作法是:
備份 → 上傳 → 從異地拉回來 → 還原進拋棄式資料庫 → 拉起拋棄式應用程式 → 用真實憑證打認證端點與統計端點 → 全部通過才算成功 → 拋棄式資料庫、應用程式整組銷毀。
人的角色換了位置
以前你身上有兩個角色:規劃者和執行者。而執行佔掉九成的時間和精神——查資料、試指令、卡住、再查、再試。很多自架專案不是敗在想不出來,是敗在還沒做完就沒力了。
現在這兩個角色變成:討論者和驗收者。
| 階段 | 以前 | 現在 |
|---|---|---|
| 想清楚要什麼 | 自己規劃,受限於自己懂多少 | 多輪討論,邊聊邊把選項和代價攤開 |
| 實作 | 自己動手,最耗時間的一段 | 交給 Agent,過程中隨時修正方向 |
| 確認真的能用 | 常常省略——因為已經沒力了 | 你的主戰場:要求證據,不接受結論 |
人的角色沒有變輕,是往前後兩端移動了。
前端是把需求和約束講清楚——你家的實際頻寬、這支手機是不是主力機、能不能接受只有一份異地備份,這些不在任何文件裡,卻會改變技術決定。
後端是驗收,而這一段不能省。Agent 也會語氣完整地說錯話,這次過程裡就有幾次是被追問證據才翻案的。其中一次最有代表性:手機 App 按下分享就卡住,Agent 推測是某項伺服器設定沒填,設好之後請我重試。但打開詳細日誌才看清楚,按下分享的那一刻,手機一個請求都沒有發給伺服器——照片在本機相簿裡,App 直接把檔案交給系統分享選單,伺服器的工作到那裡就結束了。真正的原因是接收端的 App 不吃 HEIC 格式,跟伺服器毫無關係。
那項設定確實該填、分享連結確實壞著,修它是對的。但它不是這個症狀的原因。「我修了東西」和「我解決了問題」是兩件事。
以往要專注一整個週末的事,現在一小時內就能走完一輪。
真正的改變不只是快。是值得做的事情變多了——查證、量測、寫專用工具、把理由記下來,這些以前因為太貴而被跳過的步驟,現在只是一次對話的成本。
尤其是維運:它從「有空再說」變成建置時就順手做完的一部分。
而這正是最重要的地方。以前自架服務最常見的結局,不是架不起來,是架起來之後沒人管,然後在某個你沒注意的時刻壞掉。Agent 沒有幫你逃掉那個責任,但它讓你有力氣在一開始就把防線建好。
回頭看開頭那四項成果,最難的其實是「全自動維運」。它不炫,做完也沒有人會誇你,而它是唯一一項失敗時你會失去十幾年東西的。以前這種事永遠排在「有空再說」;現在它只是那次對話裡的其中一段。
本文由 Claude Opus 5 high協作撰寫