Qnap NAS 透過 Docker 將照片同步到 Google 相簿去

Qnap Nas 功能很多,但是作得很多、用起來卻又覺得不夠深入,總是在 Just Work 的 80% 就停住了,剛好不 Work(炸),就拿相片管理來說正是一例,功能做得似乎很華麗,但是跟外部平台整合不佳,照片要做應用覺得綁手綁腳,甚至在線上服務這麼豐富的今天,要將照片同步到其他平台去都顯得困難,幸好 Qnap 在新機上支援了 Docker ,使用者可以透過 Docker 補足很多功能,能安裝小工具將 NAS 中的照片同步到 Google 相簿去。

這個方法與原理有點複雜,主要是有人用 GO 語言透過 Google Photos API 寫了 Linux 用的命令列工具,同步照片上到 Google Photos,且有善心人士將這個命令列工具與監控功能打包成 Docker 映像檔給 Synology NAS 使用, Qnap 就可以透過 Docker 同樣享有這個方便性。

而要透過 GO 語言去同步相片前,要先能取得登入 Google 相簿後的 cookie 值並取得 token 來進行同步,取得方法就從必須從瀏覽器下手,所以 NAS 要能安裝虛擬機或是本身有瀏覽器、且能安裝瀏覽器外掛來取得 cookie 值才行,但這對 Qnap 而言不是問題,只是步驟麻煩而已。

預先工作準備

首先, Qnap NAS 要先從 App Center 中安裝:

  1. Container Station
  2. Browser Station

並且到這邊下載已經為 Qnap 打包好的 GO 語言環境安裝檔:

  1. 出處: https://forum.qnap.com/viewtopic.php?t=130058
  2. 下載檔案:http://www.qoolbox.fr/Go_1.8.3.0_x86_64.qpkg.zip
  3. 解壓縮後在 App Center 手動進行安裝:

接著到這邊下載 Chrome 瀏覽器的延伸工具程式、解壓縮後放在 NAS 的某個共享資料夾內:

出處: https://github.com/muyouming/gphotosuploader

解壓縮後假設是放在 NAS 中的 /Downloads 中。

接下來就可以開始進行設定了。

取得 Google Photos 的 Cookie 值

首先打開 Browser Station 建立一個 Chrome 視窗,開啟延伸工具管理視窗:

開啟開發人員模式,選擇載入「未包裝的延伸工具」並找到剛剛從 github 下載解壓縮的檔案中的 crx-auth 資料夾。

假設是下載解壓縮放在 /Downloads 共享資料夾下,路徑會是:
/share/Downloads/解壓縮資料夾名稱/crx-auth
安裝完畢後會在位址列後面出現延伸工具圖示。

接下來前往 Google Photos 並登入,登入完成後按一下圖示,就會取得登入後的 cookie 內容:

請全選複製後貼到記事本或其他地方備用。

安裝 Docker Image 並建立容器

首先在 Container Station 內新建應用程式,搜尋 gphotosuploader 就能找到映像檔,並按建立:

但 Qnap 的 Container Station 有些問題,第一次建立時不會帶入 Image 所預設的設定值欄位(就是這種地方做得不好),也不能先下載完才建立容器,所以第一次按建立可以不用設定直接按完成、接著關閉執行中的容器、並且砍掉,然後從已經下載的映像檔再一次建立容器,就會跳出預設的設定欄位了,直接用一張圖說明:

建立容器時點選進階設定,要設定環境、裝置與共用資料夾:

  1. 環境:Cookie 值欄位直接貼入剛剛從瀏覽器取得的所有值,很長,但不用懷疑,貼進去。下方有三個與 Proxy 有關的欄位直接砍掉,用不到。
  2. 裝置:「在授權模式下啟動容器」請打勾。
  3. 共用資料夾:設定要監控的實體 NAS 資料夾位置、並掛載到 /photo 這個路徑,路徑一定不能變。
  4. PS:容器效能我是設定 CPU 15%、記憶體 512MB,覺得這樣就夠了。

啟用容器進行測試

接下來啟動這個容器,看終端機回傳的狀態是否正確:

只要在主控台看終端機回傳內容中有取得新的 token 並且有出現 Watching ,大概就沒有問題了,這時候可以丟一兩張新圖片到 NAS 的資料夾內測試看看是否有偵測到並且是否有上傳成功:

幾個注意的點

  1. 顯示上傳成功並非真的成功,如果貼錯 Cookie 值或是內容有錯, Google 會回覆上傳成功但會將檔案丟棄掉,所以最好再進 Google Photos 中確認測試上傳的照片真的有上傳上去。
  2. 如果直接將含有照片的資料夾複製到監控資料夾內,程式會看到資料夾但不會進行偵測與上傳,但把照片放進已有的資料夾內可以觸發偵測與上傳,如果要作到自動化處理的話,照片直接放進監控資料夾第一層內較佳,如果要分資料夾,則先手動建資料夾後再丟照片佳。
  3. 如果舊照片太多無法全都放在監控資料夾第一層內、又不想一個一個資料夾處理的話,另一個方式是直接開一個容器終端機,並且下指令強制更新資料夾偵測:
    gphotosuploader — upload /photo — maxConcurrent 4
    這樣會將資料夾內所有照片都上傳一次。
  4. 上傳的照片一律都是在 Google Photos 中轉為高解析度免費容量的版本,所以直接傳 RAW 檔也沒關係。

ENJOY.

發表在 NEWS