本文件說明如何將 n8n 部署至 Google Cloud Run,並使用 Supabase PostgreSQL 作為資料庫,而非 Google Cloud SQL。架構圖如下:
1 | User |
1. 建立 Supabase 帳號與連線資訊
完成建立會得到以下資訊,黃字為個人設定的機密字串。
| 選項 | 值 |
|---|---|
| Host | aws-0-ap-northeast-1.pooler.supabase.com |
| Port | 5432 |
| Database | postgres |
| Username | postgres.islaugiwwefzbtmnhuty |
| Password | ******** |
上述資訊準備好,將會進到 Cloud Run 設定機密資訊,缺一不可!
2. Google Cloud 建立專案
接下來的指令都會在 Cloud Shell 內完成。
3. 透過 Cloud Shell 進行設定 Cloud Run
指定 GCP 區域
1
gcloud config set run/region asia-east1 # asia-northeast1
實際執行結果展示
1
Updated property [run/region]
提示
其中asia-east1可以替換asia-northeast1,讓 Cloud Run 的伺服器與 Supabase 伺服器在同一個區域。設定環境變數
1
2
3
4
5
6
7
8
9# 使用 gcloud 命令取得參數
export PROJECT_ID=$(gcloud config get-value project)
export REGION=$(gcloud config get-value run/region)
# 設定環境變數
export SUPABASE_HOST=<第一章節的 Host 參數>
export SUPABASE_PORT=<第一章節的 Port 參數>
export SUPABASE_DATABASE=<第一章節的 Database 參數>
export SUPABASE_USER=<第一章節的 Username 參數>實際執行結果展示
1
待補充
以下是範例 (替換後的程式碼):
1
2
3
4# export SUPABASE_HOST=aws-0-ap-northeast-1.pooler.supabase.com
# export SUPABASE_USER=postgres.islaugiwwefzbtmnhuty
# export SUPABASE_PORT=5432
# export SUPABASE_DATABASE=postgres替換過程也要把
<與>取代掉。
透過以下指令啟用 GCP 中安裝 n8n 所需要的服務。
1 | gcloud services enable \ |
實際執行結果展示
1 | Regional Access Boundary HTTP request failed after retries: response_data={'error': {'code': 404, 'message': 'Not found; Gaia id not found for email keoinn@gmail.com', 'status': 'NOT_FOUND'}}, retryable_error=False |
如果看到以下輸出,可以忽略不理會。
1 | Regional Access Boundary HTTP request failed after retries: response_data={'error': {'code': 404, 'message': 'Not found; Gaia id not found for email keoinn@gmail.com', 'status': 'NOT_FOUND'}}, retryable_error=False |
設定 Supabase 密碼
1
2
3echo -n "<SUPABASE_PASSWORD>" | \
gcloud secrets create supabase-db-password \
--data-file=-實際執行結果展示
1
2
3Regional Access Boundary HTTP request failed after retries: response_data={'error': {'code': 404, 'message': 'Not found; Gaia id not found for email keoinn@gmail.com', 'status': 'NOT_FOUND'}}, retryable_error=False
Regional Access Boundary HTTP request failed after retries: response_data={'error': {'code': 404, 'message': 'Not found; Gaia id not found for email keoinn@gmail.com', 'status': 'NOT_FOUND'}}, retryable_error=False
Created version [1] of the secret [supabase-db-password].<SUPABASE_PASSWORD>替換來自第一章所記錄的 Supabase 密碼。
替換包含<與>符號。下述是我的範例:
1
2
3echo -n "6hJ4hEUNh0k82DyV" | \
gcloud secrets create supabase-db-password \
--data-file=-設定 Encryption Key
1
2
3openssl rand -base64 32 | tee /dev/stderr | \
gcloud secrets create n8n-encryption-key \
--data-file=-實際執行結果展示
1
2
3
4uxXqw125g06ggXdNsIsaGZTBhuSaV5E4lg2RjdbTTaA=
Regional Access Boundary HTTP request failed after retries: response_data={'error': {'code': 404, 'message': 'Not found; Gaia id not found for email keoinn@gmail.com', 'status': 'NOT_FOUND'}}, retryable_error=False
Regional Access Boundary HTTP request failed after retries: response_data={'error': {'code': 404, 'message': 'Not found; Gaia id not found for email keoinn@gmail.com', 'status': 'NOT_FOUND'}}, retryable_error=False
Created version [1] of the secret [n8n-encryption-key].預期輸出:
1
2
3YOBw3TADF9v5NDaL4Nzb8XA1yZnMnxEKExB6g2WeafU=
Regional Access Boundary HTTP request failed after retries: .... (忽略)
Created version [1] of the secret [n8n-encryption-key].⚠️ 請務必妥善保存 Encryption Key
若遺失或更換,既有 Credentials 將無法解密。
即,上述例子將YOBw3TADF9v5NDaL4Nzb8XA1yZnMnxEKExB6g2WeafU=另存起來。
建立 Service Account
n8n-service-account1
2gcloud iam service-accounts create n8n-service-account \
--display-name="n8n Service Account"實際執行結果展示
1
2Regional Access Boundary HTTP request failed after retries: response_data={'error': {'code': 404, 'message': 'Not found; Gaia id not found for email keoinn@gmail.com', 'status': 'NOT_FOUND'}}, retryable_error=False
Created service account [n8n-service-account].設定
SA_NAME環境變數1
export SA_NAME=n8n-service-account@$PROJECT_ID.iam.gserviceaccount.com
允許存取
supabase-db-passwordSecret1
2
3gcloud secrets add-iam-policy-binding supabase-db-password \
--member="serviceAccount:$SA_NAME" \
--role="roles/secretmanager.secretAccessor"實際執行結果展示
1
2
3
4
5
6
7
8Regional Access Boundary HTTP request failed after retries: response_data={'error': {'code': 404, 'message': 'Not found; Gaia id not found for email keoinn@gmail.com', 'status': 'NOT_FOUND'}}, retryable_error=False
Updated IAM policy for secret [supabase-db-password].
bindings:
- members:
- serviceAccount:n8n-service-account@cloudrun-n8n-502216.iam.gserviceaccount.com
role: roles/secretmanager.secretAccessor
etag: BwZWbLdRGMA=
version: 1允許存取
n8n-encryption-keySecret1
2
3gcloud secrets add-iam-policy-binding n8n-encryption-key \
--member="serviceAccount:$SA_NAME" \
--role="roles/secretmanager.secretAccessor"實際執行結果展示
1
2
3
4
5
6
7
8Regional Access Boundary HTTP request failed after retries: response_data={'error': {'code': 404, 'message': 'Not found; Gaia id not found for email keoinn@gmail.com', 'status': 'NOT_FOUND'}}, retryable_error=False
Updated IAM policy for secret [n8n-encryption-key].
bindings:
- members:
- serviceAccount:n8n-service-account@cloudrun-n8n-502216.iam.gserviceaccount.com
role: roles/secretmanager.secretAccessor
etag: BwZWbLm-Nw0=
version: 1
4. 檢查環境與部署 n8n
請繼續使用 Cloud Shell 進行以下步驟
1 | curl -fsSL https://gist.githubusercontent.com/keoinn/9865693d69e2627fc82fc96fc2ff172f/raw/verify.sh | bash |
執行結果
1 | ================================ |
1 | gcloud run deploy n8n \ |
執行結果
1 | Regional Access Boundary HTTP request failed after retries: response_data={'error': {'code': 404, 'message': 'Not found; Gaia id not found for email keoinn@gmail.com', 'status': 'NOT_FOUND'}}, retryable_error=False |
成功部署後會看到如下提示:
1 | Service [n8n] revision [n8n-00001-9qf] has been deployed and is serving 100 percent of traffic. |
其中,Service URL 表示服務完成後的外網網址,可以透過瀏覽器進行確認。
如果視窗已經關閉,或是終端機訊息已經被清除時,請參考下一步驟查詢外網伺服網址。
1 | gcloud run services describe n8n \ |
執行結果
1 | Regional Access Boundary HTTP request failed after retries: response_data={'error': {'code': 404, 'message': 'Not found; Gaia id not found for email keoinn@gmail.com', 'status': 'NOT_FOUND'}}, retryable_error=False |
指令會回傳兩個網址,如下:
1 | ["https://n8n-420282546722.asia-east1.run.app","https://n8n-tkk3bngzda-de.a.run.app"] |
請選擇 https://<專案ID>.<節點區域>.run.app 的網址,作為後續操作的連接入口。
因此上述案例,選擇 https://n8n-420282546722.asia-east1.run.app 作為測試 n8n 部署結果的網址入口。
請繼續參考下一章節,完成 n8n 初始化設定。
5. 完成部署後的設定
6. 刪除服務 (選用)
1 | export SA_NAME=n8n-service-account@$PROJECT_ID.iam.gserviceaccount.com |



















