1. 簡介
在本程式碼研究室中,您將在 Google Cloud Run 上設定 n8n。n8n 是一種開放原始碼工作流程自動化工具,可讓使用者連結不同應用程式和服務,自動執行重複性工作。
本程式碼研究室以 n8n 說明文件指南為基礎,說明如何在 Google Cloud Run 上代管 n8n。我們將安裝及設定 n8n 版本,在 Cloud Run 上部署更耐用的 n8n 生產環境。包括用於保存資料的資料庫,以及用於機密資料的密鑰管理工具等資源。
執行步驟
- 在 Google Cloud Run 上部署 n8n,這是全代管的無伺服器運算平台,可在 Google 的基礎架構上執行無狀態容器。
課程內容
- 佈建並填入 PostgreSQL 適用的 Cloud SQL 資料庫,做為 n8n 安裝作業的持久耐用版本。
- 將 n8n 容器映像檔佈建至 Google Cloud Run。
- 測試在 Google Cloud Run 安裝 n8n。
軟硬體需求
- Chrome 網路瀏覽器
- Gmail 帳戶
- 已啟用計費功能的 Cloud 專案
2. 事前準備
建立專案
- 在 Google Cloud 控制台的專案選取器頁面中,選取或建立 Google Cloud 專案。
- 確認 Cloud 專案已啟用計費功能。瞭解如何檢查專案是否已啟用計費功能。
- 您將使用 Cloud Shell,這是 Google Cloud 中執行的指令列環境,且已預先載入 bq。點選 Google Cloud 控制台頂端的「啟用 Cloud Shell」。

- 連線至 Cloud Shell 後,請使用下列指令確認您已通過驗證,且專案已設為您的專案 ID:
gcloud auth list
- 在 Cloud Shell 中執行下列指令,確認 gcloud 指令知道您的專案。
gcloud config list project
- 如果未設定專案,請使用下列指令來設定:
gcloud config set project <YOUR_PROJECT_ID>
- 透過下列指令啟用必要的 API。這可能需要幾分鐘的時間,請耐心等候。
gcloud services enable run.googleapis.com \
sqladmin.googleapis.com \
secretmanager.googleapis.com
成功執行指令後,您應該會看到類似下方的訊息:
Operation "operations/..." finished successfully.
如果遺漏任何 API,您隨時可以在導入過程中啟用。如要瞭解 gcloud 指令和用法,請參閱說明文件。
最後,我們要設定幾個環境變數,這些變數將用於後續步驟中執行的指令碼。在 Cloud Shell 終端機中執行下列兩項指令 (請記得將 GCP_PROJECT_ID 和 GCP_REGION 替換成專案 ID 和區域 (例如 us-central1) 的相應值,您希望在此區域完成部署作業。我們將使用 us-central1 進行部署。
export PROJECT_ID=GCP_PROJECT_ID
export REGION=us-central1
3. 建立 Cloud SQL 執行個體
我們將使用 Google Cloud SQL for PostgreSQL 執行個體,做為儲存 n8n 執行個體和執行資料的持久層。這是為了確保設定的持久性。
PostgreSQL 適用的 Cloud SQL 是一項全代管資料庫服務,可協助您在 Google Cloud Platform 中設定、維護及管理 PostgreSQL 關聯資料庫。
在 Cloud Shell 中執行下列指令,即可建立執行個體:
gcloud sql instances create n8n-db \
--database-version=POSTGRES_15 \
--tier db-g1-small \
--region=us-central1 \
--edition=ENTERPRISE \
--root-password=postgres
執行這項指令大約需要 5 分鐘。指令成功執行後,您應該會看到輸出內容,指出指令已完成,以及 Cloud SQL 執行個體資訊,例如 NAME、DATABASE_VERSION、LOCATION 等。
請注意,我們已將 root-password 值做為 postgres 使用。如果變更為其他名稱,請務必記住。
4. 設定 n8n 資料庫和資料庫使用者憑證
現在 PostgreSQL 適用的 Cloud SQL 執行個體已準備就緒,我們可以在其中建立 n8n 資料庫,並將資料庫密碼和加密金鑰儲存在 Google Cloud Secrets Manager 中。
首先,我們要在建立的 Cloud SQL 執行個體 (n8n-db) 中,建立名為 n8n 的資料庫。下列所有指令都必須在 Google Cloud Shell 終端機中執行。
gcloud sql databases create n8n --instance=n8n-db
成功建立後,您應該會看到如下訊息:
Creating Cloud SQL database...done.
Created database [n8n].
instance: n8n-db
name: n8n
project: YOUR_GCP_PROJECT_ID
資料庫建立完成後,請為該資料庫建立使用者帳戶。我們將使用下列憑證:
- 使用者 ID:
n8n-user - 密碼:
n8n
注意:如要使用其他強度更高的密碼 (建議用於正式環境),請改用該密碼,不要使用我們在此選擇的密碼 (即 n8n),但請務必在接下來的幾個指令中也使用該密碼。
建立資料庫使用者的指令如下:
gcloud sql users create n8n-user \
--instance=n8n-db \
--password="n8n"
此時,建議將使用者資料庫密碼和加密金鑰的憑證儲存至 Google Cloud Secret Manager,這個安全又便利的儲存系統可儲存 API 金鑰、密碼、憑證和其他機密資料。
首先,請使用下列指令取得我們使用的密碼 (n8n)),並將其管道化至 gcloud secrets create 指令。我們的密鑰為 n8n-db-password。
printf "n8n" | gcloud secrets create n8n-db-password --replication-policy="automatic" --data-file=-
同樣地,我們將使用下一組指令產生加密金鑰,然後建立保存該值的密鑰變數 n8n-encryption-key。
openssl rand -base64 -out my-encryption-key 42
gcloud secrets create n8n-encryption-key \
--data-file=my-encryption-key \
--replication-policy="automatic"
5. 為 Google Cloud Run 建立服務帳戶
我們會在下一個步驟中,將 n8n 部署至 Google Cloud Run。為此,我們將建立服務帳戶,供 Cloud Run 執行 n8n 工作流程。為此,我們希望確保建立的服務帳戶在 Google Cloud 上只具備最低必要角色/權限。
根據目前需求,我們需要為建立的服務帳戶指派下列角色:
roles/cloudsql.client:服務帳戶必須具備這項權限,才能存取 Cloud SQL 資料庫roles/secretAccessor:我們需要提供這個角色,才能存取n8n-db-password和n8n-encryption-key的 Secret Manager 金鑰。
我們馬上開始!下列所有指令都必須在 Google Cloud Shell 中執行。第一個指令會建立服務帳戶,然後我們提供討論過的必要角色。依序執行每個指令。如果系統要求為下列任一指令指定條件,請選擇 "None"。
gcloud iam service-accounts create n8n-service-account \
--display-name="n8n Service Account"
export SA_NAME=n8n-service-account@$PROJECT_ID.iam.gserviceaccount.com
gcloud secrets add-iam-policy-binding n8n-db-password \
--member="serviceAccount:$SA_NAME" \
--role="roles/secretmanager.secretAccessor"
gcloud secrets add-iam-policy-binding n8n-encryption-key \
--member="serviceAccount:$SA_NAME" \
--role="roles/secretmanager.secretAccessor"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SA_NAME" \
--role="roles/cloudsql.client"
我們現在要將 n8n 容器映像檔部署至 Google Cloud Run。
6. 將 n8n 部署至 Google Cloud Run
在 Google Cloud Shell 中執行下列指令:
gcloud run deploy n8n \
--image=n8nio/n8n:latest \
--command="/bin/sh" \
--args="-c,sleep 5;n8n start" \
--region=$REGION \
--allow-unauthenticated \
--port=5678 \
--memory=2Gi \
--no-cpu-throttling \
--set-env-vars="N8N_PORT=5678,N8N_PROTOCOL=https,DB_TYPE=postgresdb,DB_POSTGRESDB_DATABASE=n8n,DB_POSTGRESDB_USER=n8n-user,DB_POSTGRESDB_HOST=/cloudsql/$PROJECT_ID:$REGION:n8n-db,DB_POSTGRESDB_PORT=5432,DB_POSTGRESDB_SCHEMA=public,GENERIC_TIMEZONE=UTC,QUEUE_HEALTH_CHECK_ACTIVE=true" \
--set-secrets="DB_POSTGRESDB_PASSWORD=n8n-db-password:latest,N8N_ENCRYPTION_KEY=n8n-encryption-key:latest" \
--add-cloudsql-instances=$PROJECT_ID:$REGION:n8n-db \
--service-account=$SA_NAME
部署作業大約需要一分鐘。部署成功後,您應該會看到類似下方的訊息:
Deploying container to Cloud Run service [n8n] in project [YOUR_PROJECT_ID] region [us-central1]
Deploying new service...
Setting IAM Policy...done
Creating Revision...done
Routing traffic...done
Done.
Service [n8n] revision [n8n-00001-8nh] has been deployed and is serving 100 percent of traffic.
Service URL: https://n8n-<SOME_ID>.us-central1.run.app
請記下上述輸出內容中的服務網址,因為您會在下一個步驟中使用該網址啟動 n8n 控制台。
7. 執行 n8n 工作流程
啟動瀏覽器,然後前往上一步取得的服務網址。您也可以從 Cloud Run 首頁取得服務網址,該頁面會將 n8n 列為其中一項服務。
注意:如果系統顯示 Cannot GET / 畫面或 n8n is starting up 錯誤,通常表示 n8n 仍在啟動中。你可以重新整理頁面,系統最終應會載入。
最後您會看到如下所示的畫面,可在此設定擁有者帳戶:

填寫必要詳細資料,記下密碼並完成設定。您可以略過部分步驟,包括要求傳送授權金鑰的步驟。
如果一切順利,您應該會看到 n8n 的首頁,如下所示:

如果您熟悉 n8n,應該可以順利完成本實驗室。
如要試用 n8n,可以嘗試下列工作流程:
- 按一下「憑證」,然後點選「新增第一個憑證」。

- 我們會設定 Gemini API 金鑰憑證。輸入「gemini」叫出 Google Gemini (PaLM) API 選項,然後點選「繼續」。

- 你可以前往 https://aistudio.google.com/app/api-keys 取得 Gemini API 金鑰。
- 取得金鑰後,請貼上金鑰。n8n 會驗證金鑰,憑證現在已設定完成。
5. 現在前往「工作流程」選項,然後按一下「從頭開始」或建立新的工作流程。這時會顯示空白畫布,您可以在其中建立下列兩個節點:一個是觸發條件 (簡單對話),另一個是代理程式。我們將設定建立的憑證,讓代理程式模型成為 Google Gemini。最後,您應該會看到如下所示的工作流程:

- 你可以透過即時通訊窗格執行這項工作流程,如果一切順利,系統就會回覆你的提示。執行畫面範例如下所示:

這樣就完成了 Google Cloud Run 上 n8n 部署作業的驗證。
8. 清除
如果您選擇使用本程式碼研究室,瞭解如何在 Google Cloud Run 上安裝及執行 n8n,而非用於正式環境 / 永久需求,請務必刪除本研討會期間建立的資源,以免系統持續向您的 Google Cloud 帳戶收取費用。
我們將刪除 Cloud SQL 執行個體,以及已部署的 Cloud Run 服務。
請根據專案和區域,確認下列環境變數是否設定正確:
export PROJECT_ID="YOUR_PROJECT_ID"
export REGION="YOUR_REGION"
下列兩個指令會刪除我們部署的 Cloud Run 服務:
gcloud run services delete n8n --platform=managed --region=${REGION} --project=${PROJECT_ID} --quiet
下列指令會刪除 Cloud SQL 執行個體:
gcloud sql instances delete n8n-db
下列兩個指令會刪除我們建立的 Secret Manager 金鑰:
gcloud secrets delete n8n-db-password
gcloud secrets delete n8n-encryption-key
9. 恭喜
恭喜!您已成功在 Google Cloud Run 部署 n8n,並透過範例工作流程驗證設定。