N8N中文教程
部署托管/Installation/Server_setups

在 Google Cloud Run 上托管 n8n#

本托管指南将介绍如何在 Google Cloud Run(一种无服务器容器运行环境)上自行托管 n8n。如果你刚开始使用 n8n,且不需要生产级别的部署,可以采用下方的“简易模式”进行部署。否则,如果你计划大规模使用该 n8n 部署,请参考下文的“持久化模式”说明。

你还可以启用通过 OAuth 访问 Google Workspace(如 Gmail 和 Drive)的功能,以便将这些服务用作 n8n 工作流工具。授权 n8n 访问这些服务的说明位于本文档末尾。

如果你想改为部署到 Google Kubernetes Engine (GKE),可参考这些说明。

自行托管的知识前提

自行托管 n8n 需要具备一定的技术知识,包括:

  • 服务器和容器的搭建与配置
  • 应用资源管理与扩展
  • 服务器和应用的安全防护
  • n8n 的配置

n8n 建议专家用户自行托管(self-hosting)。操作失误可能导致数据丢失、安全问题和停机。如果您没有管理服务器的经验,n8n 推荐使用 n8n Cloud。

最新版本与下一个版本(Latest and Next versions)

n8n 每周通常会发布一个新的次要版本。latest 版本适用于生产环境。next 是最新的发布版本,应被视为测试版(beta):它可能不稳定。如需报告问题,请使用 论坛。

当前 latest:1.115.2 当前 next:1.116.1

开始之前:获取 Google Cloud 项目#

如果您尚未创建 Google Cloud 项目,请先完成此步骤(并确保项目已启用计费功能;即使您的 Cloud Run 服务免费运行,也必须启用计费才能部署)。否则,请导航到您要部署 n8n 的项目。

简易模式(Easy mode)#

这是在 Cloud Run 上部署 n8n 的最快方式。在此部署中,n8n 的数据存储在内存中,因此仅建议用于演示目的。每当此 Cloud Run 服务缩容至零或重新部署时,n8n 的数据都将丢失。 如果您需要生产级别的部署,请参考下方的持久化模式(durable mode)说明。

如果尚未创建 Google Cloud 项目,请先完成此步骤(并确保项目已启用计费功能;即使您的 Cloud Run 服务将免费运行,也必须启用计费才能进行部署)。否则,请导航到您要部署 n8n 的项目。

打开 Cloud Shell 终端(在 Google Cloud 控制台中,按下 "G" 然后 "S",或点击右上角的终端图标)。

会话打开后,您可能需要先运行以下命令登录(并按照提示完成步骤):

1

| ``` gcloud auth login


---|---

您也可以显式启用 Cloud Run API(即使不执行此操作,在部署时系统也会询问是否启用):

1

| ```
gcloud services enable run.googleapis.com

---|---

部署 n8n 的命令如下:

1
2
3
4
5
6
7

| ``` gcloud run deploy n8n-service
--image=europe-docker.pkg.dev/n8nio/n8n/n8n:latest
--region=us-west1
--port=5678
--allow-unauthenticated
--cpu=1
--memory=2Gi


---|---

(您可以根据需要指定任意区域,而不一定是 "us-west1")

部署完成后,打开一个新标签页访问服务 URL。n8n 可能仍在启动过程中,您会看到“n8n is starting up. Please wait”消息,稍后应会出现 n8n 登录界面。

可选:如果您希望此 n8n 服务尽可能长时间运行以避免数据丢失,可以设置手动缩放为 1,防止其自动缩容至 0。

1 2 3 4 5 6 7 8

| ```
gcloud run deploy n8n-service \
--image=europe-docker.pkg.dev/n8nio/n8n/n8n:latest \
--region=us-west1 \
--port=5678 \
--allow-unauthenticated \
--cpu=1 \
--memory=2Gi \
--min-instances=1 --max-instances=1

---|---
这并不能完全防止数据丢失,例如当 Cloud Run 服务重新部署或更新时。如果你需要真正持久化的数据,应参考下方关于如何挂载数据库的说明。
## 持久模式(Durable mode)#
以下说明适用于在 Cloud Run 上进行更持久、可用于生产环境的 n8n 部署。该方案包含用于数据持久化的数据库以及用于存储敏感信息的 Secret Manager 等资源。
## 启用 API 并设置环境变量#
打开 Cloud Shell 终端(在 Google Cloud 控制台中,按下 "G" 再按 "S",或点击右上角的终端图标),然后在终端会话中运行以下命令:

1 2 3 4 5 6

| ```
## 你可能需要先登录
gcloud enable enable enable

---|--- 接下来的步骤中,建议设置一些环境变量:

1
2

| ``` export PROJECT_ID=your-project export REGION=region-where-you-want-this-deployed


---|---
## 设置你的 Postgres 数据库#
运行以下命令创建 Postgres 数据库实例(完成需要几分钟时间;请确保将 `root-password` 字段替换为你自己设定的密码):

1 2 3 4 5 6 7 8 9

| ```
gcloud \
--database-version=POSTGRES_13 \
--tier=db-f1-micro \
--region=$REGION \
--root-password="change-this-password" \
--storage-size=10GB \
--availability-type=ZONAL \
--backup-location=$REGION \
--data-storage-type=HDD

---|--- 完成后,添加 n8n 将使用的数据库:

1

| ``` gcloud sql databases create n8n-db --instance=$DB_INSTANCE_NAME


---|---
为 n8n 创建数据库用户(当然,请更改密码值):

1 2 3

| ```
gcloud sql users create n8n-user \
--instance=$DB_INSTANCE_NAME \
--password="change-this-password"

---|--- 你可以将为此 n8n-user 设置的密码保存到一个文件中,以便在下一步将其存入 Secret Manager。请务必在后续删除该文件。

在 Secret Manager 中存储敏感数据#

虽然不是强制要求,但强烈建议将敏感数据存储在 Secret Manager 中。 创建一个用于数据库密码的密钥(将 "/your/password/file" 替换为前面创建的包含 n8n-user 密码的文件路径):

1
2
3

| ``` gcloud secrets create db-password
--data-file=/your/password/file
--replication-policy="automatic"


---|---
创建一个加密密钥(你可以使用自己的密钥,以下示例生成一个随机密钥):

1

| ```
openssl rand -base64 42

---|--- 为该加密密钥创建一个 secret(如果你提供自己的密钥,请替换 "my-encryption-key"):

1
2
3

| ``` gcloud secrets create n8n-jwt-secret
--data-file=-
--replication-policy="automatic"

---|--- 现在可以删除 my-encryption-key 以及你创建的数据库密码文件。这些值现已安全地存储在 Secret Manager 中。

为 Cloud Run 创建服务账号#

你希望该 Cloud Run 服务仅能访问其所需的资源。以下命令将创建服务账号,并授予访问密钥(secrets)和数据库所需的权限:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14

| ``` gcloud
="n8n Service Account"

gcloud
="serviceAccount:n8n-service-account@$PROJECT_ID.iam.gserviceaccount.com"
="roles/secretmanager.secretAccessor"

gcloud
="serviceAccount:n8n-service-account@$PROJECT_ID.iam.gserviceaccount.com"
="roles/secretmanager.secretAccessor"

gcloud$PROJECT_ID
="serviceAccount:n8n-service-account@$PROJECT_ID.iam.gserviceaccount.com"
="roles/cloudsql.client"


---|---
## 部署 Cloud Run 服务#
现在你可以部署你的 n8n 服务:

1 2 3 4 5 6 7 8 9 10 11 12 13

| ```
gcloud\
=n8nio/n8n:latest\
="/bin/sh"\
="-c,sleep 5;n8n start"\
=$REGION\
\
=5678\
=2Gi\
\
="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"\
="DB_POSTGRESDB_PASSWORD=n8n-db-password:latest,N8N_ENCRYPTION_KEY=n8n-encryption-key:latest"\
=$PROJECT_ID:$REGION:n8n-db\
=n8n-service-account@$PROJECT_ID.iam.gserviceaccount.com

---|---
部署完成后,打开一个新标签页并导航到服务的 URL。你应该会看到 n8n 的登录界面。
## 故障排查#
如果你看到 "Cannot GET /" 页面,通常表示 n8n 仍在启动过程中。你可以刷新页面,稍后应能正常加载。
## (可选)启用 Google Workspace 服务作为 n8n 工具#
如果你想在 n8n 中使用 Google Workspace 服务(如 Gmail、日历、Drive 等)作为工具,建议通过 OAuth 来访问这些服务。

首先确保你所需的相关 API 已启用:

1 2 3 4 5 6 7

| ```
## 启用你需要的各个 API
## 注意:如果你需要 Sheets/Docs,仅启用 Drive 是不够的;这些服务各自都有独立的 API
gcloud services enable <API_NAME>

---|--- 在 Cloud Run 上重新部署 n8n,并将必要的 OAuth 回调 URL 作为环境变量传入:

1
2
3
4
5
6

| ``` export SERVICE_URL="your-n8n-service-URL"

例如:https://n8n-12345678.us-west1.run.app

gcloud run deploy n8n
--region=$REGION
--set-env-vars="N8N_HOST=$(echo $SERVICE_URL | sed 's/https:////'),WEBHOOK_URL=$SERVICE_URL,N8N_EDITOR_BASE_URL=$SERVICE_URL"


---|---
最后,你必须为这些服务配置 OAuth。访问 `https://console.cloud.google.com/auth` 并按照以下步骤操作:

  1. 如果尚未在此 Cloud 项目中设置 OAuth,你会看到“开始”按钮,请点击它。
  2. 在“应用信息”中,填写你喜欢的“应用名称”和“用户支持邮箱”。
  3. 对于“受众”,如果你仅希望允许同一 Google Workspace 内的用户访问,请选择“内部”。否则可选择“外部”。
  4. 填写“联系信息”。
  5. 如果你选择了“外部”,请点击“受众”并添加需要授权的测试用户。
  6. 点击“客户端” > “创建客户端”,选择“Web 应用程序”作为“应用类型”,将你的 n8n 服务 URL 填入“已授权的 JavaScript 来源”,并在“已授权的重定向 URI”中填入 `/rest/oauth2-credential/callback`(完整的 URI 示例:`https://n8n-12345678.us-west1.run.app/rest/oauth2-credential/callback`)。请务必下载生成的客户端 JSON 文件,因为它包含客户端密钥(client secret),之后在控制台中将无法再次查看。
  7. 点击“数据权限”,添加你希望 n8n 访问的权限范围(scopes)。例如,若要访问 Google Sheets,你需要添加 `https://www.googleapis.com/auth/drive.file` 和 `https://www.googleapis.com/auth/spreadsheets`。
  8. 完成后,你现在就可以使用这些 Workspace 服务了。你可以通过登录 n8n,添加对应服务的工具,并使用第 6 步中下载的 OAuth 客户端 JSON 文件中的信息来配置凭据,以测试是否成功。