1. 简介
在此 Codelab 中,您将在 Google Cloud Run 上设置 n8n。n8n 是一款开源工作流自动化工具,可让用户连接不同的应用和服务,以自动执行重复性任务。
此 Codelab 基于 n8n 文档指南,其中说明了如何在 Google Cloud Run 上托管 n8n。我们将安装和配置一个版本的 n8n,该版本是 Cloud Run 上更持久耐用的生产级 n8n 部署。它包括用于持久性的数据库和用于敏感数据的 Secret Manager 等资源。
实践内容
- 在 Google Cloud Run 上部署 n8n,这是一个全托管式无服务器计算平台,可在 Google 的基础设施上运行无状态容器。
学习内容
- 预配和填充 Cloud SQL for PostgreSQL 数据库,该数据库将作为 n8n 安装的持久耐用版本。
- 将 n8n 容器映像配置到 Google Cloud Run。
- 测试在 Google Cloud Run 上安装的 n8n。
所需条件
- Chrome 网络浏览器
- Gmail 账号
- 启用了结算功能的 Cloud 项目
2. 准备工作
创建项目
- 在 Google Cloud Console 的项目选择器页面上,选择或创建一个 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 实例和执行数据。这是为了确保设置持久有效。
Cloud SQL for PostgreSQL 是一项全代管式数据库服务,可帮助您在 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 数据库和数据库用户凭据
现在,我们已准备好 Cloud SQL for PostgreSQL 实例,接下来可以在其中创建 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=-
同样,我们将使用下一组命令生成加密密钥,然后创建一个将保存该值的 Secret 变量 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 创建服务账号
我们将在下一步中在 Google Cloud Run 上部署 n8n。为了做好准备,我们将创建一个服务账号,供 Cloud Run 用于执行 n8n 工作流。为此,我们要确保创建的服务账号在 Google Cloud 上仅具有最低要求的角色/权限。
根据我们当前的要求,我们创建的服务账号需要具有以下角色:
roles/cloudsql.client:服务账号需要此权限才能访问我们的 Cloud SQL 数据库roles/secretAccessor:我们需要提供此角色,才能访问n8n-db-password和n8n-encryption-key的 Secret 管理器密钥。
我们开始吧。以下所有命令都必须在 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. 清理
如果您选择使用此 Codelab 学习如何在 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,并通过示例工作流验证了设置。