- Published on
Immich 相簿伺服器架設分享
- Authors
- Name
- Ryan Chung

前言
過去幾年,相簿共享與備份方式一直是個問題。 三五好友相約出遊,總免不了創個雲端相簿,而 Google 相簿幾乎是不二之選。 然而預設的 15GB 非常有限,扣除個人 Gmail 與 Google Drive 用量根本所剩無幾。 每次相簿創建後,過幾個月或幾年想回去看,就會發現大家早已默默的把照片下架,只為了騰出空間給新的回憶。 儘管還有付費的 Google One 方案,但 100GB 容量依舊拮据,付費的人更是少之又少。 是故美其名為雲端相簿,但永遠只有暫時蒐集照片的功能。 每隔一段時間總要定期整理、備份與刪除雲端空間,而這些騰出來的照片則塵封在硬碟深處。
過去,我始終在思考如何以更經濟且有效的手段備份相片。 一個可能的方案是購買終身買斷制的雲端服務,例如 pCloud 就經常有 2TB 約 NT$8,000 左右的節慶方案。 另一個可能的方案是自己架設相簿伺服器,比較簡單的方式就是直接使用 NAS 供應商的服務(例如 Synology、QNAP 等),約莫一萬塊內也可以組到堪用水準。 雖然要自行維護硬體,但是容量可以擴充的更大。
剛好近期家中添購一台新的 Mac Studio 桌機,想說除了剪影片跟跑 AI 推論,順便來架設相簿伺服器吧。 這篇文章即是用來記錄這次安裝的過程,純粹作為心得分享,希望可以幫到有需要的人。
固定 IP 位址
要架設伺服器,首先會需要固定 IP 位址 (Internet Protocol Address)。 IP 位址就像是電腦在網路中的地址,平常我們上網通常是依靠路由器分發虛擬 IP 位址給連線設備,這樣它就知道要把網路封包傳給誰。 可我們一旦離開家中內網環境,就會需要一組公認的固定 IP 位址來連回家中伺服器。
IPv4 是有限的,無法隨意取得,所幸中華電信本身就有免費提供每戶一組固定 IP 的服務。 我們首先會需要從網站或手機 APP 登入當初申辦家中寬頻服務的帳號,接著找到「HiNet非固定制固定IP申請」,並選取「1個固定IP + 7個動態IP」方案。 記得填寫聯絡 email,過不久中華電信就會寄來一封確認信(我是直接被寄到垃圾信箱內),裡面就會有你的 IP 位址跟設定方式。

網路上許多教學文都需要登入中華電信的數據機,還需要自行揣摩神奇的帳密(個人測試,帳密與網路上常見的數據機型號+MAC後四碼不符合,所以這條路不一定可行)。 但如果你跟我一樣是透過另一台路由器來連接伺服器主機的話,就可以直接在自己的路由器上作設定。 以我家為例,我的中華電信數據機放在三樓,但是我在二樓另外架設一台 TP-Link 路由器作為一、二樓的無線基地台,然後將電腦以有線的方式連接到這台路由器。 當我在瀏覽器輸入 http://192.168.0.1 ,連到的就會是 TP-Link 路由器的管理介面,就可以直接在這裡設定固定 IP。

根據官方信件,選擇以 PPPoE 方式連線,並將自己的 HN 用戶識別碼與 HiNet 域名組合成帳號。 密碼在信中完全沒有提及,需要 自行致電中華電信客服 (0800-080-123 或手機直撥 123),由客服協助您設定新密碼。 都設定完成後,就可以順利開通固定 IP 服務了。 點選 https://www.whatismyip.com.tw/tw/ 可以查詢自己的 IP 是否正確,未來就可以用這組 IP 連回家中伺服器。
Immich 架設
接下來架設相簿服務。 根據官方介紹,Immich 是一款 self-hosted photo and video management solution,開源且個人使用完全免費(AGPL-3.0 lisence 不可商用)。 除了網頁版,也支援 Android 與 iOS,可以直接在 Google Play 與 App Store 下載。 Immich 的功能非常完整,支援照片與影片的上傳、分享、備份、編輯、搜尋、標籤、地理位置等,並且有強大的 AI 人臉辨識功能,可以協助分類與搜尋照片。 在近期版本中,也開始出現照片回顧的功能,整體使用體驗非常接近 Google 相簿,可以到這個 demo 網站 體驗看看。
要架設 Immich 服務,最簡單的方式就是使用 Docker。 Docker 是一個輕量級的虛擬化技術,可以讓我們在同一台主機上運行多個獨立的應用程式,而不需要擔心彼此間的環境衝突。 Immich 官方提供了 Docker Compose 的範例配置檔,讓我們可以快速部署服務。
首先,確保你的電腦已經安裝了 Docker 與 Docker Compose。 如果是新手,可以考慮安裝 GUI 版本的 Docker Desktop; 如果是 Linux 系統,則比較推薦直接使用 CLI 版本的 Docker Engine 以及 Docker Compose。 身為 Mac 用戶,我是直接使用 OrbStack,效能與資源用量比 Docker Desktop 優秀許多。
接著,使用以下指令下載 Immich 的 Docker Compose 範例配置檔:
# Get docker-compose.yml file
wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
# Get .env file
wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.env
然後,修改 UPLOAD_LOCATION
為自己想要儲存照片的路徑(例如我設定在 18TB 的外接硬碟中),以及 DB_DATA_LOCATION
為 PostgreSQL 資料庫的儲存路徑。
# The location where your uploaded files are stored
UPLOAD_LOCATION="/path/to/library"
# The location where your database files are stored. Network shares are not supported for the database
DB_DATA_LOCATION="/path/to/postgres"
# To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
TZ=Asia/Taipei
都設定完後,啟動 docker compose 服務即可(-d
代表在背景運行):
docker compose up -d
在瀏覽器輸入網址 http://localhost:2283 就可以看到 Immich 主頁。 首次登入會需要設定管理員的帳號和密碼,登入後目前還有個小 bug(不確定未來何時會修正),那就是儲存空間與目前用量的顯示數字有點問題。 這需要用管理員帳號登入後,點選左側頭像的「管理」、「操作」、「編輯使用者」,然後對用戶帳號設定一個合理的容量配額上限,就可以正常顯示了。
Immich 支援完全繁體中文的介面,需要自行去作設定。 然而地圖名稱卻是使用大家不熟悉的英文拼音,難免有些遺憾。 所幸開源社群有人釋出了 台灣反向地理編碼,只要微調 docker-compose.yml
設定就可以直接使用中文地名。
網路設定
NAT 導向
Network Address Translation (NAT) 是一種網路地址轉換技術,可以讓內部網路的設備透過一個公共 IP 位址與外部網路通訊。 在我們的情境中,我們將固定 IP 設定在路由器上,就需要透過 NAT 導向來將外部請求轉發到內網的伺服器。 這麼做的好處是可以讓我們的伺服器在內網中運行,而不需要直接暴露在公共網路上。 除了可以提高安全性,也可以讓同一組 IP 映射到更多內網設備(例如 NAS)。

以 TP-Link 為例,進入網路進階設定後,找到「NAT 導向」、「虛擬伺服器」,就可以設定防火牆內外的轉發規則。 在上圖中,我將伺服器內網 IP 固定為 192.168.XX.XX(路由器與伺服器兩邊都需要作設定),並新增幾個我需要的服務。 例如我平常會使用 VNC(遠端桌面)與 SSH(終端機安全連線),就可以透過 NAT 轉發到其他 port,增加安全性。 都設定好後,就可以在外網透過你的固定 IP 與 NAT port(例如 http://xx.xx.xx.xx:immich-port )連接到 Immich 服務了。
VPN 設定
儘管 Immich 雲端相簿已經可以正常運作,但眼尖的你可能會發現,我將 Immich 的 NAT 導向關閉了。 這是因為目前我們僅使用 http 通訊協定連線至 Immich 服務,雖然登入相簿需要輸入帳密,但仍然有被攻擊的風險 (eg. man-in-the-middle attack)。 目前大部分的網站都使用 Secure Sockets Layer (SSL) 加密,即常見的 https 通訊協定。 然而,SSL 憑證的申請需要綁定域名 (DNS)。 可以自行購買適合的域名(例如 HiNet、GoDaddy), 或是使用免費的動態 DNS 服務(例如 No-IP、DuckDNS)。
如果不想額外花錢或用維護域名的話,也可以建立自簽 SSL 憑證,這樣就可以用純 IP 建立 https 連線。 不過這種憑證並不被瀏覽器信任,所以每次連線都會跳出警告,有些服務也不能使用(但是 Immich 目前是可以使用的)。 Immich 官方最推薦的 遠端連線作法 是使用 VPN。 Virtual Private Network (VPN) 可以讓我們在公共網路上建立一個安全的隧道,將所有的封包加密並轉發到內部網路。 一樣以 TP-Link 為例,在網路進階設定中找到「VPN 伺服器」,生成憑證並匯出設定檔即可,可以參考 這份教學。 如果希望在用 VPN 連線時也可以順便上網,需要勾選 網際網路和家庭網路。

匯出後,我們需要在電腦或手機安裝 OpenVPN 客戶端,然後將設定檔匯入即可。 平常若要連到家中伺服器,需要多一個動作,先連上 OpenVPN,然後在瀏覽器輸入 http://192.168.XX.XX:2283 ,就可以安全地存取內網服務了。 至此,整個 Immich 相簿伺服器終於架設完成。
F&Q
- 為什麼不直接使用 Google 相簿?
- Google 相簿的免費容量有限,付費方案也不夠大。Immich 提供更大的靈活性與控制權,是目前使用體驗最接近 Google 的免費替代方案。
- Immich 的性能如何?
- Immich 的 AI 功能如何?
- Immich 預設使用 buffalo_l 模型 來自動辨識人臉,個人體感辨識率整體而言還不錯,但仍比不上 Google 相簿(連我家的貓都分得出來)。
- 如何在本地端存取 Immich 的資料?
- Immich 的資料儲存在
UPLOAD_LOCATION
中,然而路徑與檔名是用 hash 加密過的,無法直接透過檔案瀏覽器找到特定檔案。我認為把它當作一個雲端相簿服務來使用就好。
- Immich 的資料儲存在
- 如何備份與還原 Immich 的資料?
- 承上題,一般檔案路徑儲存在 PostgreSQL 資料庫內,萬不可遺失。Immich 每天會自動備份資料表到
UPLOAD_LOCATION/backups
中,基本上不用太擔心。 若要重新架設服務,可以參考這份 官方文件,手動將資料庫備份檔更新上去。
- 承上題,一般檔案路徑儲存在 PostgreSQL 資料庫內,萬不可遺失。Immich 每天會自動備份資料表到