Docker 自建 n8n 並且連結上 Google OAuth Credential

專案人的救星,自動化的舒爽只有建完了才知道

在我開始舉辦搖擺舞活動之後,我就非常依賴如 Zapier 這樣的自動化工具,來讓我在報名活動、確認報名、訊息更新等活動執行時能有更好的效率,而由於客家本色,我的 Zapier 基本上是不付費的,因此過去常要計算不會超過每個月的 100 筆 Execute,或者要好幾個免費的 Google 帳號登入來交錯工作,其實還滿麻煩的。

因此在最近一波 n8n 開始流行之後,我就馬上把焦點轉移到了這個號稱開源的 CLI 自動化工具身上,在經過了一番苦戰之後總算把那些與 Google 互動的行為搬入 n8n 內,這篇是紀錄這個過程並且正式的與 Zapier 說 bye 摟~~

n8n 是什麼

n8n 官方網站

n8n 是一間自動化的公司產品,如果要問教學與介紹,我一律推薦高見龍的這個 n8n 介紹與教學,簡單說明的話 n8n 是一個基於 Node.JS 的系統,並且可以自己設計觸發、節點、條件式的 Workflow 工具。

如果要白話一點去說明 Workflow 的話,最簡單的範例可以用 當發生A的時候,自動幫我執行B 或者 每天早上執行一次 C 工作,如此以來的好處就可以取代許多日常繁複的工作內容

當然自動化本身已經是非常成熟的內容,因此向 Zapier 或 Make 這樣的公司早就提供過許多不錯的 SaaS 服務,我前幾年也用過一個很讚的印度公司 Automation.io,但後來好像被 Zapier 買走了…讓我那時候有一波 workflow 逃難潮。

而 n8n 本身有分為 Community 以及 SaaS 版本,在這篇文章中我自己用的是 Community 透過 docker 安裝的版本,而如果對於自己建立系統不感興趣的朋友,也可以直接用每個月 20 歐元訂閱 SaaS 來使用,這次我所要介紹的包含三個步驟:

  1. 情境說明
  2. 在 Docker 建立 n8n
  3. 在 n8n 中建立 Google Credential
  4. 在 GCP 建立 API 服務與 OAuth
  5. 回到 n8n 建立連結
  6. 建立 workflow

n8n

0. 情境說明

為了去驗證我們整個 n8n 以及 Google credential 最後會成功,我們先來定義我們想要完成的 workflow 是什麼:

當  我 Google Sheet 指定的 Column 被更新時
會  抓被更新 column Row 內的資料,寄送一封 Email

這也是我在活動進行最常做的,例如收到報名資訊後,當我確認匯款資料,就會把 參加者名稱email進場場次 等變數用 Gmail 寄信,來達成自動化。

1. 在 Docker 建立 n8n

首先講一個最重要的,因為後續會跟 Google 以及其他可能會使用的 Credential 綁定,建議一定要使用 HTTPS 協定,因此大家要自己想辦法處理摟!或者我覺得最好的做法是 Cloudflare Tunnel,也直接讓他做解析最方便

那先來看 docker compose 內容

services:
  n8n:
    image: n8nio/n8n:latest
    restart: always
    ports:
      - "5678:5678"
	environment:
	  - N8N_BASIC_AUTH_ACTIVE=true
	  - N8N_BASIC_AUTH_USER=n8n
	  - N8N_BASIC_AUTH_PASSWORD=n8n
	  - N8N_HOST=domain.com
	  - N8N_PORT=5678
	  - N8N_PROTOCOL=https
	  - WEBHOOK_TUNNEL_URL=https://domain.com/
	  - N8N_FORCE_HTTPS=true
      - VUE_APP_URL_BASE_API=https://domain.com/
    volumes:
      - n8n_data:/home/node/.n8n
    networks:
      - net

volumes:
  n8n_data:

networks:
  net:
    external: true

這個版本我改過好多次,最重要的部分是強制用 https 解析,後續在串 Google Credentail 時才可以使用。

如果順利的話,把 docker compose up -d 執行後就可以透過 http://domain.com 來進入 n8n 網頁了(首先你要自己搞定 HTTPS 問題),這時候就可以開始進行下一步了。

n8n_login

2. 在 n8n 中建立 Google Credential

進入頁面之後要先建立 admin 帳戶,接著就可以進入頁面開始操作了,並根據以下繁忙的步驟一個一個慢慢進行:

Note:這是在 2025/4/23 使用的 Google Credentail 設定,未來可能變動,大家就自求多福啦~

  1. 登入 n8n 後,從右上角下拉選單點選建立 credential
  2. 選擇 Google Sheet Trigger OAuth2.0,這裡有一個 OAuth Redirect URL,等等會用到
  3. 打開之後先放著,我們開一個最困難的小任務,前往 GCP Console 進行後面的操作

n8n_credential

3. 在 GCP 建立 API 服務與 OAuth

GCP Console 建立一個新的 GCP 專案 gcp-project

完成新專案建立後,從左側進入 “API與服務”,開啟 “已啟用的API和服務”,進入後點擊這個大大的 “啟用 API 和服務” 按鈕 gcp-api

找到 Google Sheet、Gmail、Drive API,啟用 gcp-launchapi

再次從左側的 “API與服務”,這次進入 OAuth 同意畫面,點選 “開始” gcp-oauth

填寫應用程式名稱與 Email,最重要的是目標對象要設置 外部 gcp-oauthset

到這邊初步完成,大概才走了一半…拆個章節

Google OAuth 的詳細設定

此時應該是在 Google Auth Platform 這個頁面,先前往左邊的 資料存取權 頁面,點擊 “新增或移除範圍”

gcp-oauthapi

添加 Google Drive、Gmail 以及 Google Sheet 相關 API,接著儲存

gcp-oauthapisetting

接下來到左側的 用戶端 ,選擇 建立用戶端 ,這就不放圖了喔

選擇 網頁應用程式 填入應用程式名稱,接在下方的 已授權的重新導向 URI 放入剛剛在 n8n 建立 credential 畫面中,顯示的 OAuth Redirect URL,建立之後會拿到 Client ID 以及 Secret,我們可以先拿去 n8n credential 中填好,但還先不要授權

gcp-oauthclient

接下來到左側的 目標對象 ,點擊 發布應用程式,此時可以暫且告一段落了

4. 回到 n8n 建立連結

此時再回到我們的 n8n 畫面,如果順利的話再填入 Client ID 與 Secret 時就會出現 Google Sign in 認證了,點擊之後完成驗證,順利的話就會變成 Account connected 狀態

n8n-crednetialsignin

接著用同樣的方式自己把 Gmail 建立好喔!到了這裡我們就完成所有前置作業,接著就是實作 n8n workflow 了!

5. 建立 workflow

再次說明下,我們這次要做的範例是如以下

當  我 Google Sheet 指定的 Column 被更新時
會  抓被更新 column Row 內的資料,寄送一封 Email

因此我建立了一個測試用的 google sheet 叫做 “n8ntest” ,建立一個 sheet 叫做 “send_email”,下圖為欄位設定

sheet-column

  1. Email 欄位是我會寄到的 user email 地址
  2. 其他資訊是揭露 user 買的票券,以及他買週六還是週日
  3. Send 欄位將設計為 trigger,當此欄位變動時,就會啟動 workflow 進行觸發

建立 n8n workflow

回到 n8n 上,從功能欄位點選建立 workflow,接著我先 show 以下兩張我建立玩的內容以及詳解:

n8n-wf

  1. 全部只有兩個節點,第一個節點是 Google Sheet Trigger,第二個是 gmail
  2. Sheet 節點的重點在於,去挑選 Google Sheet 以及工作表,然後最下方去監聽要觸發的欄位,以我的範例是 “Send” 這一欄
  3. Gmail 節點要去撈前一個節點的參數,在我的範例中,我把許多欄位帶入 Message 內傳送給 user,包含訂單編號、週六日入場,順便用了 UUID 當作 QRCode

驗證!

接著,只要去 Google Sheet 上的 Send 欄位做任何更動,就能成功觸發寄送 email 了

email

任務完成!

如果順利抵達這裡,恭喜你成功將你的 n8n 以及 google credential 建立完成。

我自己實作時碰到兩個最大的問題:

  1. n8n 的 https 協定:因為用 docker 加上 cloudflared tunnel 內網穿透的關係,在 docker compose 內要先處理好 https 問題,這花了我好多時間。
  2. Google OAuth:超難用!網路上教學也太少,我摸索了一陣子才知道要去處理資料存取權的 API 授權,中間也在發布與否之間轉折了好多次失敗。

不過順利達成後很讚啦!歡迎大家開始手動建立自己的自動化喔

comments powered by Disqus