iT邦幫忙

2025 iThome 鐵人賽

DAY 17
0
AI & Data

進擊的 n8n系列 第 17

Day 17:快速部署 n8n on Google Cloud Run

  • 分享至 

  • xImage
  •  

在前面兩天先用 Docker Compose 跑在本機,再試了 VM / Bare Metal。今天要把 n8n 搬到 Google Cloud Run —— 這是一個完全託管的 Serverless 平台,可以自動縮放、不必維護 VM,非常適合中小型自動化專案或 PoC 階段。

為什麼選 Cloud Run?

  • 免維運:不需要管理 VM、作業系統修補 (OS Patch) 或 Docker Daemon。
  • 自動伸縮 (Auto-scaling):遇到高流量會自動加開實例 (instance),流量下降就自動縮減 (scale down)。
  • 整合簡單:原生即可搭配 Cloud SQL、Secret Manager、VPC Connector 等 GCP 服務。

Cloud Run 是什麼?跟 n8n 有什麼關係?

Cloud Run 是 GCP 的無伺服器(Serverless)容器平台:你只要提供一個容器映像(image),其他像是自動擴縮、負載平衡、SSL 憑證、版本控制/回滾、監控等都由平台處理好。對 n8n 來說特別友善,因為:

  • HTTP 原生:n8n 的使用者介面 (UI) 與 Webhook 都是基於 HTTP;Cloud Run 會自動配置好可公開存取的 HTTPS 網址。
  • 從零到 N 的擴縮:只有在收到請求時才需要付費。若需要避免冷啟動 (cold start),也可以設定 min-instances=1
  • 與 GCP 服務整合:可以輕易地與 Cloud SQL(Postgres)、Secret Manager、VPC Connector(用於連接私有網路,例如 Memorystore 或內部 API)等服務整合。

部署流程

步驟 1:準備環境

安裝並初始化 gcloud 指令列工具:

# 登入你的 Google 帳號
gcloud auth login

# 設定要操作的 GCP 專案 ID
gcloud config set project <PROJECT_ID>

步驟 2:建立 Dockerfile

雖然 n8n 官方有提供映像檔,但在 Cloud Run 環境中,我們需要確保 n8n 能監聽由 Cloud Run 指定的通訊埠。

# 使用官方最新的 n8n 映像檔作為基礎
FROM docker.n8n.io/n8nio/n8n:latest

# Cloud Run 會透過 $PORT 環境變數告知容器應監聽的通訊埠
# 將這個變數也設定給 N8N_PORT,讓 n8n 知道
ENV N8N_PORT=$PORT

# 宣告容器會使用的通訊埠 (此為文件性質,非強制)
EXPOSE 5678

# 啟動 n8n。n8n 會自動讀取 N8N_PORT 環境變數
CMD ["n8n"]

步驟 3:建置並推送映像檔

使用 Cloud Build 建置 Docker 映像檔,並將其推送到 Google Container Registry (gcr.io)。

#tag 指定映像檔的名稱與位置
gcloud builds submit --tag gcr.io/<PROJECT_ID>/n8n

步驟 4:部署到 Cloud Run

gcloud run deploy n8n \
  --image gcr.io/<PROJECT_ID>/n8n \ # 指定剛剛推送的映像檔
  --platform managed \              # 使用全託管的 Cloud Run 平台
  --region asia-east1 \             # 部署到台灣的 GCP 資料中心
  --allow-unauthenticated           # 允許未經認證的公開存取

幾分鐘後,你就會得到一個公開的 URL,例如:
https://n8n-xxxxxx-uc.a.run.app
打開這個網址,就能看到如同我們在 Docker Compose 中所看到的 n8n UI。


延伸設定

  • 資料庫:Cloud Run 容器是無狀態的 (stateless),預設使用的 SQLite 資料庫會在容器重啟後消失。建議搭配 Cloud SQL (Postgres, Private IP) 來持久化儲存資料。
  • 機密資訊:透過 Secret Manager 來管理 API Key 或資料庫密碼,並在 Cloud Run 中以環境變數的形式掛載。
  • 網路:若 n8n 只需要在內部網路存取,可以設定 Serverless VPC Connector,並限制其流量來源。

常見錯誤排查

  • 502 Bad Gateway / 容器啟動失敗
    👉 確認 Dockerfile 中的 CMD 是否正確,以及 ENV N8N_PORT=$PORT 是否有正確設定。n8n 必須監聽 Cloud Run 指定的 $PORT。
  • SQLite 資料不見 / 工作流程消失
    👉 Cloud Run 容器的檔案系統是暫時性的,重啟後會被清空。必須改用外部資料庫(如 Cloud SQL)或其他持久化儲存方案。
  • 連線 Cloud SQL 失敗
    👉 確認已為 Cloud Run 服務設定了 VPC Connector (--vpc-connector),並且 Cloud SQL 執行個體已啟用 Private IP。兩者必須在同一個 VPC 網路中才能通訊。

到這裡,已經能在 Cloud Run 上快速部署 n8n!接下來會帶大家把 Cloud SQL(Postgres, Private IP)串起來,讓資料長期保存,更貼近正式環境的需求。


上一篇
Day 16:n8n on VM / Bare-Metal 部署的疑難雜症解決分享
下一篇
Day 18:使用 Cloud SQL for Postgres(Private IP)接 n8n
系列文
進擊的 n8n24
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言