俺對谷歌積怨已久,但是十年以來,俺一直裝聾作啞歲月靜好 🥶
起初,牠們把公司理念換成「Be Evil」的時候,俺沈默,因爲俺不是谷歌員工;
後來,當牠們逐漸把安卓組件閉源的時候,俺沈默,因爲俺不是安卓開發者;
再後來,當牠們把谷歌相冊的免費存儲空間關閉的時候,俺沈默,因爲俺有 Pixel 特權;
再後來,當牠們用 SafetyNet 來搞文革的時候,俺沈默,因爲俺根正苗紅;
再後來,當牠們在瀏覽器裏面插入後門的時候,俺沈默,因爲俺用的是 Edge;
最後牠們給我發了一封電子郵件,天塌了.

牠們要封了俺的帳號,俺的一切要被一瞬清零了 🥶💢
Contents
發生了甚麼
(以下的所有照片均通過 Immich 進行管理)
事情要回到今年三月,當時人正在香港參加必修課《銀行開戶(!!)》.當天早上俺八點半就起牀了,然後火速趕往匯豐銀行,並且取到了第一個號碼.

櫃員姐姐一聽俺是來開戶的,馬上皺起了眉頭💢
於是我當場發揮我訓練至今的黑屁能力,於是經過一番精甚的交涉之後,她直接給我下卡了.
沒想到第一堂課就這麼順利地畢業了,,,

俺非常高興地跑到旁邊便利店去買了一張 Tap&Go 的充值卡,並嘗試綁定到我的 Google Pay 上面.大概是由於俺的 Google Pay 綁定過日本的銀行卡,牠讓我重新輸入名字和地址.
俺就非常隨便地輸入了俺的真名,和銅鑼灣,按下了確定.結果牠提示操作無效,,,🥶
難道是我名字輸得不對?於是俺把姓和名對調了一下,然後又按了一次確定.結果牠直接給我發了上面那封電子郵件,要我上傳我的戶籍,不然就要封我的號🥶,,,
我草!💢谷歌妳是董連坐啊,你上不上傳戶籍嘛?不上傳?俺不僅直接就封了你 Google Pay,俺還要封你 Gmail,相冊,YouTube,Play 商店,讓你整個人從互聯網上消失!!
這不就是您大支給人微信封號時候的作風嗎?!全世界都討厭中共,然而全世界都想成爲中共,谷歌也不例外,被谷歌壓迫的人,站起來!!!
被雲強健
當時正值畢業入職時期,俺和公司和各種單位有頻繁的郵件往來,谷歌帳號被幹爛會給我帶來極大的麻煩,生活所迫,俺只上傳了一張只有俺的名字和生日的證件,因爲實在不想再把更多的戶籍信息交給這個傻狗公司了🥶
信任已被最後一根稻草壓垮,俺直接連夜安排下雲事宜.仔細一想,俺在 Google 服務裏面值錢的東西就只有 Gmail 和相冊了.沒了 Gmail 是真不行,俺綁定了一堆東西在這上面,萬一真收不到郵件,有很多帳號也會跟着暴斃,,,
於是俺就給 Gmail 設置了轉發,並把儘可能多的綁定改到了 Outlook 上面,心想這樣應該差不多安全了吧🥶
但是相冊的照片就有點難辦了,裏面存了從 2014 年以來的無數張照片,要是真沒了,俺在這世界上還能留下甚麼東西呢,,,

除了普通的照片以外,還存了一大堆怪圖.要怎麼給牠們進行搬家呢?俺考慮了很久.但是,俺已經不想再受賽博地主的折磨了!俺要回歸自己的數字家園!!!💢
相冊解決方案——Immich
谷歌相冊其實相當不錯,多端同步備份是基本中的基本,其客戶端也覆蓋了瀏覽器和手機;查閱相片時不僅可以按照時間順序查看,還能組織相簿,或者是用文字搜索圖片中的內容,如圖:

俺一度以爲俺永遠沒法找到完美的替代品了,壟斷公司的產品黏性實在是…!!直到一位來自日本的 self-host 大大向我介紹了——Immich!
(日本由於其 IT 水平過於陽春,早已成爲了全球雲服務商瘋狂收割的對象,而這位哥實在是一股清流👍🏻)
Immich 的相冊管理系統由一個存放照片的服務端和客戶端組成.當妳用手機拍下照片,手機上的 Immich 客戶端就會自動將照片上傳到服務端,從而達到同步和備份的效果.
同時,俺還可以通過其他手機或者瀏覽器登入俺的相冊,隨時查看或者上傳新照片,方便到爆!

Immich 的功能極其豐富,Google 相冊的所有功能都能在這裏找到,比如,
去年今日,人臉歸類,物品識別搜索,地圖定位,標籤,創建相簿……
然而她最強的功能應該是支持多用戶!老爹老媽自己,阿貓阿狗阿妹都可以擁有一個自己的帳號,並且還可以互相分享相簿內容.
無論家人用的是蘋果小米華爲,還是電腦平板,Immich 都能完美支持,徹底打破生態系統依賴,,,

正可謂是「一人下雲,全家下雲」!
然而想要享受好東西,總是要付出點甚麼的.要麼出錢,要麼動腦,Google 相冊是前者,Immich 是後者.
實操:Immich 服務端部署
- 目標:部署 Immich 服務端
- 資料:👉🏻官方網站
- 步驟:
- 準備你自己的服務器(VPS 或者自家廢鐵電腦)
- 服務器上安裝 Docker
- 中國用戶更改 Docker 鏡像源
- 安裝 Immich
- 設定管理員賬戶,測試能否上傳和備份照片
Immich 的服務端需要自己搭建,然而這對於拳打 Arch 腳踢 OpenWrt 的親愛的羣友們來說應該是小菜一碟了.並且,Immich 的服務端都是 👉🏻Docker 打包好的,只要服務器上面有 Docker(沒有的自己裝去),一般來說只需要打幾個命令就能完成部署了……

除非妳的服務器在中國 🥶 DockerHub 被牆拉,要換鏡像!!!
🇨🇳中國用戶換鏡像方法🇨🇳
打開 /etc/docker/daemon.json
文件;
如果妳的 Docker 是 snap 安裝的話,打開 /var/snap/docker/current/config/daemon.json
文件;
然後在 json 配置文件裏面插入一項 “registry-mirrors”(妳要學會自己改 json 啊):
{
"其他配置項": {
...
},
"registry-mirrors": [
"https://docker.1ms.run"
]
}
這個鏡像源來自 👉🏻毫秒鏡像,不確定能存活多久,且用且珍惜,,,
然後重啓 Docker 服務:
sudo systemctl restart docker
sudo snap restart docker
設置好鏡像之後就可以開始安裝了,請看 👉🏻官方的教程.
主要有三個步驟:
- 創建存放 Immich 的文件夾,然後下載 docker-compose.yml 和 .env 文件
- 修改 .env 配置文件(可以保持默認不變)
- 執行
docker compose up -d
命令

等待屏幕上的進度條全部慢吞吞地跑完,俺們用瀏覽器打開服務端的地址 http://<服務器 IP>:2283,進入 Immich 的安裝嚮導.這裏有 👉🏻官方步驟指南;
簡單地說,有兩個設置步驟:
- 創建管理員帳號
- 使用管理員帳號創建老爹老媽自己,阿貓阿狗阿妹的帳號
之後就各自在自己的設備上用瀏覽器或者 Immich 客戶端登入就可以了 🥰

此時,時間線裏面是一張照片都沒有的 🥶 妳需要把相機膠捲的文件夾(Camera)加入到 Immich 的自動備份清單裏面,拍下的照片纔會被自動備份並顯示在時間線上.
(點右上角的雲朵☁️圖標,點擊「選擇備份文件夾」,然後選擇「Camera」;iPhone 那邊選擇「相機膠捲」)

其他的文件夾,比如說「Screenshots」和「Downloads」或者「e-hentai」,都可以選擇加入備份範圍 😁👍🏻
實操:照片下雲
- 目的:將相片從谷歌相冊轉移到 Immich
- 資料:👉🏻immich-go
- 步驟:
- 導出下載所有谷歌相冊數據
- 安裝 Immich-go
- 創建 Immich 服務端 API key
- 運行 Immich-go 來導入谷歌相冊數據
先花一點時間熟悉 Immich 的玩法,等你弄清楚怎麼管理相冊之後,俺們就可以開始正式下雲了!!
觀察谷歌相冊,一張照片不僅僅是圖片,還有一堆 metadata,包括時間,地點,設備等等.

一般來說這些信息都保存在圖片的 EXIF 裏面,但是谷歌相冊會將這部分 metadata 提取成一個單獨的文件.俺們再轉移這些相片時,也要確保這些 metadata 被一起導入到 Immich 裏面去.如果失去了這些數據,就很可能失去一些珍貴的回憶,,,
首先要前往 Google Takeout 來打包整個相冊數據.

記得把打包大小設置爲最大的 50GB,否則就會得到一大堆難以處理的零碎 zip 文件.

打包好的東西會發到妳的郵箱裏面,然後下載到本地.
👉🏻Immich-go 是一個專門用來遷移相片到 Immich 的命令行工具,牠支持分析谷歌相冊打包,iCloud 相冊打包,或者本地圖片文件夾,並批量把圖片上載到 Immich.全程自動化,非常方便,,,
從 👉🏻Release 下載 Immich-go,解壓出來,牠是一個可執行文件.macOS 用戶可以直接通過 brew install immich-go
安裝.安裝好之後使用命令行嘗試運行一下:

這樣就算安裝完成了!接着俺們需要一個 Immich 服務端的 API key 讓 immich-go 和 Immich 服務端進行連接.用瀏覽器登入自己的 Immich 賬戶,打開設置 - API Keys 並新建:

複製這串 Key,找到谷歌相冊解壓出來的文件夾,打開命令行:
immich-go upload from-google-photos --server=http://<your-ip>:2283 --api-key=XXXXXXXX "Google相冊文件夾"
Immich-go 馬上就會歡快地跑起來,一個下午茶的功夫就能把十年份的老照片全部搬進去了!👍🏻

而所有的 metadata,包括自建相簿自然是一個不落的保留了!

俺們下雲了!俺珍藏的回憶們在幾番輾轉之後終於回到了自己的數字家園!並且,此次下雲還帶來了額外的收益——
- 俺創建了一個單獨的用戶來隔離俺珍藏的色圖 🥰
- 俺給爹媽都準備了各自的帳號來分享照片
- 俺成功救出了一臺壞手機裏面的照片
- 俺編寫了一個程序來修正順序錯誤的色圖(你不可能給谷歌相冊編程!!)
- 俺不用再擔心谷歌把我封號了!(要記得備份服務器!!)
- 快樂和愉悅
俺的服務器裏面是一張 250GB 的 SSD,和一個 1TB 的 HDD 作爲備份空間.機器安放在一個遠離 FBI 和「日本網警(!!)」的室外桃源——要知道谷歌隨時可以出賣妳的數據!
當前服務器上存儲了 50GB 的圖片和 500+ GB 的各類資源(!!),直接替我剩下了每月幾十塊錢的雲空間費用.
這臺服務器的硬件花費了我 500 人民幣,考慮到牠已經服役了五年,還承擔了 VPN 服務器和 BT 下載服務器的任務,給硬件進行投資還真的是筆划算的買賣!😁👍🏻

是時候重新審視妳的雲賬單了.
實操:遠端連線方案
- 目的:讓 Immich 服務能夠被外網訪問
- 資料:👉🏻Immich Remote Access
- 方法:
- 使用 VPN 進入內網(如:Tailscale)
- 使用 Cloudflare Tunnel 進行內網反代
- 暴露公網 IP (!!)
出門在外,想要備份照片?那 Immich 服務器就必須能夠被外網訪問了.
有的羣友可能會說了:我有公網 IP 啊,俺直接把端口映射了就行了呀?!
沒錯,你說得很好!!😎 但是你有沒有想過要配置 Nginx,域名,TLS 證書和安全加固所需要的工作量?妳也不想三天兩頭就被人 DDoS 或者窮舉密碼吧?畢竟相冊是敏感數據,開不得玩笑.
現在問題是,默認的 docker-compose 配置開放的 2283 端口會直接繞過妳的防火牆並開放到 0.0.0.0,非常危險!我們立即更改 docker-compose.yml 文件,將 2283 端口綁定到內網和 Tailscale 的 IP 地址上:
immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
# extends:
# file: hwaccel.transcoding.yml
# service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding
volumes:
# Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file
- ${UPLOAD_LOCATION}:/usr/src/app/upload
- /etc/localtime:/etc/localtime:ro
env_file:
- .env
ports:
# - '2283:2283' # 👉🏻❌去除這行!!
- '192.168.1.100:2283:2283' # 👉🏻✅增加這行改爲妳的內網 IP 地址
- '100.64.100.100:2283:2283' # 👉🏻✅增加這行改爲妳的 Tailscale IP 地址
depends_on:
- redis
- database
restart: always
healthcheck:
disable: false
然後,俺最推薦的做法是使用 👉🏻Tailscale 來進行打通 VPN 隧道,本方法自帶加密和認證,無論身在何方都能用手機或者筆記本電腦安全地訪問內網.做法也非常簡單,在服務器和各自的設備上都安裝 Tailscale,然後 Immich 連接的時候輸入 Tailscale 提供的 IP 地址就行了!
無需擔心防火牆和端口設置,Tailscale 會自動幫你處理這些問題.😎

這纔是現代網路該有的樣子 🥰👍🏻
甚麼?你要用 Cloudflare Tunnel?那你就用吧,俺還是對把相冊開放到公網這件事情有點躊躇 🥶
注意:Immich 深度學習能力
- 目的:解決 Immich 深度學習模型被牆的問題
- 資料:👉🏻Immich 遠程機器學習
- 方法:
- 在一臺可以翻牆的服務器上面安裝 Immich 來提供深度學習 API
- 打通 Tailscale 隧道
- 在被牆的服務器上設置,把 Immich 的深度學習能力指向翻牆的服務器
Immich 使用深度學習(Tensorflow)來進行人臉識別和物品識別,如圖:


這個功能已經內置在 Docker 裏面了,理論上是開箱即用的.但是位於中國的服務器會面臨一個問題 🥶 Immich 需要從 🤗HuggingFace 下載神經網路模型,但是 HuggingFace 被牆了😅
要是妳的服務器能夠翻牆,那問題不大.然而我自己的服務器是不能翻牆的,,,
萬幸的是,Immich 可以把深度學習的任務交給外部 API 來處理,因此俺們就可以得到一個思路——用一臺可以翻牆的服務器來提供深度學習的 API,然後把這個 API 指向被牆的服務器上面.而我正好就有一臺免費的 Oracle VPS.
在翻牆的服務器上安裝 Immich 和 Tailscale 之後,俺們需要從 Docker 中暴露深度學習 API 的端口,修改 docker-compose.yml 文件來開放 3003 端口到 Tailscale 隧道:
immich-machine-learning:
container_name: immich_machine_learning
# For hardware acceleration, add one of -[armnn, cuda, openvino] to the image tag.
# Example tag: ${IMMICH_VERSION:-release}-cuda
image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
# extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/ml-hardware-acceleration
# file: hwaccel.ml.yml
# service: cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference - use the `-wsl` version for WSL2 where applicable
volumes:
- model-cache:/cache
env_file:
- .env
restart: always
healthcheck:
disable: false
ports: # 👉🏻✅新增這一行
- '100.64.100.100:3003:3003' # 👉🏻✅新增這一行,綁定到妳的 Tailscale IP 地址
然後 docker compose up -d
啓動牆外服務器.
用瀏覽器登入被牆服務器的管理員帳號,然後打開 Administration - Settings - Machine Learning Settings, 把 URL 設置為牆外服務器的隧道地址:

保存之後點左邊的「Jobs」,重啓智能搜索(物品識別)和人臉識別任務:

不出意外的話,物品和人臉馬上就會被標記出來了!👍🏻
記得備份服務端!!!
- 目的:備份 Immich 圖片庫和數據庫
- 資料:👉🏻官方備份指南
- 方法:
- 使用 tar 打包圖片庫和數據庫到一個文件
- 移動到另一個硬盤或者另一臺服務器上面
- 定期備份
知道數據火葬場是甚麼意思嗎?我希望你永遠不要知道,並且定期備份自己珍貴的圖片庫!
Immich 的數據庫會自動打包並存放在 UPLOAD_LOCATION/backups
文件夾裏面,俺們需要把最新的那一個複製出來(或者把老的都刪了):

此外,上傳的圖片視頻會儲存在:
- UPLOAD_LOCATION/library
- UPLOAD_LOCATION/upload
- UPLOAD_LOCATION/profile
因此俺們要備份這四個文件夾,然後用 tar 打包成一個文件:
tar -cvf /外部硬盤/immich-backup-20250430.tar backups/ library/ profile/ upload/
打包完,可以使用 rsync 或者 rclone 把這個備份保存到安全的地方,具體怎麼做隨你喜歡,俺這裏就不指點了.
記得每個月都要備份一次服務器!!
結語
操作指南到這裏就結束了,俺希望你能嚐到自建的甜頭,享受下雲帶來的快感,並跟我一起自豪地嘲笑被雲服務收割的小韭菜們☝🏻️😁
開源軟件的完善和硬件的進步讓俺們看到了自建的希望,而越來越便宜的硬件價格和越來越強的網路基礎設施讓俺們不得不再次審視:昂貴的雲服務真的值得嗎?!雲服務的價格下跌並沒有跟上硬件價格的下跌速度,這意味着,雲服務反而越來越貴了!
總有一天你會開始思考:用雲服務真的減少了我的工作量了嗎?在雲上花費的錢夠我買了多少臺服務器?我真的可以信任這些醜聞不斷的公司嗎?
最終你會找到自己的答案 🥰
最後,讓我轉載一些有趣的資源,希望能對你有幫助.
👉🏻awesome-selfhost 倉庫:整理了各個領域各個用途的自建解決方案.
只要你想,自建網易雲也不是夢!!👉🏻下雲奧德賽 系列文章:來看看 37 Signal 公司是如何成爲雲黑,下定決心並一步步脫離 AWS,節省下百萬美金的,非常精彩.
目錄 👉🏻雲計算泥石流 系列文章:來自國內資深雲工程師的見解.
曾几何时,“上云“近乎成为技术圈的政治正确,整整一代应用开发者的视野被云遮蔽。就让我们用实打实的数据分析与亲身经历,讲清楚公有云租赁模式的价值与陷阱 —— 在这个降本增效的时代中,供您借鉴与参考。序