Implementa y ejecuta n8n en Google Cloud Run

1. Introducción

En este codelab, configurarás n8n en Google Cloud Run. n8n es una herramienta de automatización de flujo de trabajo de código abierto que permite a los usuarios conectar diferentes aplicaciones y servicios para automatizar tareas repetitivas.

El codelab se basa en la guía de documentación de n8n, que explica cómo alojar n8n en Google Cloud Run. Instalaremos y configuraremos una versión de n8n que sea una implementación más duradera y de nivel de producción de n8n en Cloud Run. Incluye recursos como una base de datos para la persistencia y Secret Manager para datos sensibles.

Actividades

  • Implementa n8n en Google Cloud Run, que es una plataforma de procesamiento completamente administrada y sin servidores que ejecuta contenedores sin estado en la infraestructura de Google.

Qué aprenderás

  • Aprovisionar y completar una base de datos de Cloud SQL para PostgreSQL que actuará como una versión persistente y duradera para nuestra instalación de n8n
  • Aprovisionar la imagen de contenedor de n8n en Google Cloud Run
  • Probar la instalación de n8n en Google Cloud Run

Requisitos

  • Navegador web Chrome
  • Una cuenta de Gmail
  • Un proyecto de Cloud con la facturación habilitada

2. Antes de comenzar

Crea un proyecto

  1. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.
  2. Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Obtén información para verificar si la facturación está habilitada en un proyecto .
  3. Usarás Cloud Shell, un entorno de línea de comandos que se ejecuta en Google Cloud y que viene precargado con bq. Haz clic en Activar Cloud Shell en la parte superior de la consola de Google Cloud.

Imagen del botón Activar Cloud Shell

  1. Una vez que te conectes a Cloud Shell, verifica que ya te autenticaste y que el proyecto esté configurado con el ID de tu proyecto con el siguiente comando:
gcloud auth list
  1. En Cloud Shell, ejecuta el siguiente comando para confirmar que el comando gcloud conoce tu proyecto.
gcloud config list project
  1. Si tu proyecto no está configurado, usa el siguiente comando para hacerlo:
gcloud config set project <YOUR_PROJECT_ID>
  1. Habilita las APIs requeridas con el comando que se muestra a continuación. Esto podría tardar unos minutos, así que ten paciencia.
gcloud services enable run.googleapis.com \
                       sqladmin.googleapis.com \
                       secretmanager.googleapis.com 

Si el comando se ejecuta correctamente, deberías ver un mensaje similar al que se muestra a continuación:

Operation "operations/..." finished successfully.

Si falta alguna API, siempre puedes habilitarla durante el curso de la implementación. Consulta la documentación para ver los comandos y el uso de gcloud.

Por último, estableceremos un par de variables de entorno que usaremos en las secuencias de comandos que ejecutaremos en los próximos pasos. En la terminal de Cloud Shell, ejecuta los siguientes dos comandos (recuerda reemplazar GCP_PROJECT_ID y GCP_REGION por los valores respectivos del ID de tu proyecto y la región [p.ej., us-central1] en la que deseas que se realice esta implementación. Usaremos us-central1 para la implementación.

export PROJECT_ID=GCP_PROJECT_ID
export REGION=us-central1

3. Cree una instancia de Cloud SQL

Usaremos una instancia de Google Cloud SQL para PostgreSQL, que será nuestra capa de persistencia para almacenar nuestra instancia de n8n y los datos de ejecución. Esto es necesario para que nuestra configuración sea duradera.

Cloud SQL para PostgreSQL es un servicio de base de datos completamente administrado que te ayuda a configurar, mantener, gestionar y administrar las bases de datos relacionales de PostgreSQL en Google Cloud Platform.

En Cloud Shell, ejecuta el siguiente comando para crear la instancia:

gcloud sql instances create n8n-db \
--database-version=POSTGRES_15 \
--tier db-g1-small \
--region=us-central1 \
--edition=ENTERPRISE \
--root-password=postgres

Este comando tarda aproximadamente 5 minutos en ejecutarse. Una vez que el comando se ejecute correctamente, deberías ver un resultado que indique que el comando finalizó, junto con la información de tu instancia de Cloud SQL, como NAME, DATABASE_VERSION, LOCATION, etc.

Ten en cuenta que usamos el valor root-password como postgres. Si lo cambias por otro, tenlo a mano.

4. Configura la base de datos de n8n y las credenciales de usuario de la base de datos

Ahora que tenemos lista nuestra instancia de Cloud SQL para PostgreSQL, podemos crear nuestra base de datos de n8n en ella, además de almacenar nuestra contraseña de base de datos y clave de encriptación en Google Cloud Secrets Manager.

Primero, creemos una base de datos llamada n8n en nuestra instancia de Cloud SQL (n8n-db) que creamos. Todos los comandos que se muestran a continuación se deben ejecutar en la terminal de Google Cloud Shell.

gcloud sql databases create n8n --instance=n8n-db

Si la creación es exitosa, deberías ver un mensaje como el siguiente:

Creating Cloud SQL database...done.                                                                                                                                                                                                           
Created database [n8n].
instance: n8n-db
name: n8n
project: YOUR_GCP_PROJECT_ID

Ahora que se creó la base de datos, creemos una cuenta de usuario para ella. Usaremos las siguientes credenciales:

  • ID de usuario : n8n-user
  • Contraseña : n8n

Nota: Si deseas usar otra contraseña más segura (recomendada para la producción), debes usarla en lugar de la contraseña que elegimos aquí, es decir, n8n, pero asegúrate de usarla de manera coherente en los próximos comandos también.

El comando para crear el usuario de la base de datos se proporciona a continuación:

gcloud sql users create n8n-user \
    --instance=n8n-db \
    --password="n8n"

En este punto, es una buena idea almacenar las credenciales de la contraseña de la base de datos del usuario y la clave de encriptación en Google Cloud Secret Manager, que es un sistema de almacenamiento seguro y conveniente para guardar claves de API, contraseñas, certificados y otros datos sensibles.

Comenzamos con el siguiente comando que toma la contraseña que usamos (n8n) y la canaliza al comando gcloud secrets create. Nuestra clave secreta será n8n-db-password.

printf "n8n" | gcloud secrets create n8n-db-password --replication-policy="automatic" --data-file=-        

Del mismo modo, usaremos el siguiente conjunto de comandos para generar una clave de encriptación y, luego, crear una variable secreta n8n-encryption-key que contendrá el valor.

openssl rand -base64 -out my-encryption-key 42

gcloud secrets create n8n-encryption-key \
    --data-file=my-encryption-key \
    --replication-policy="automatic"        

5. Crea una cuenta de servicio para Google Cloud Run

En el siguiente paso, implementaremos n8n en Google Cloud Run. Para prepararnos, crearemos una cuenta de servicio que Cloud Run usará para ejecutar flujos de trabajo de n8n. Para ello, queremos asegurarnos de que la cuenta de servicio que creamos tenga solo los roles o permisos mínimos requeridos en Google Cloud.

Según nuestros requisitos actuales, necesitaremos los siguientes roles para la cuenta de servicio que creamos:

  • roles/cloudsql.client : Esto es necesario para que la cuenta de servicio acceda a nuestra base de datos de Cloud SQL.
  • roles/secretAccessor : Deberemos proporcionar este rol para acceder a las claves de Secret Manager para n8n-db-password y n8n-encryption-key.

Comencemos. Todos los comandos que se muestran a continuación se deben ejecutar en Google Cloud Shell. El primero crea la cuenta de servicio y, luego, proporcionamos los roles requeridos como se explicó. Ejecuta cada uno de los comandos uno después del otro. Si se te pide que especifiques una condición para cualquiera de los comandos que se muestran a continuación, elige "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"

Ahora estamos listos para implementar la imagen de contenedor de n8n en Google Cloud Run.

6. Implementa n8n en Google Cloud Run

Ejecuta el siguiente comando en 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,N8N_ENDPOINT_HEALTH=health,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

Es probable que la implementación tarde aproximadamente un minuto. Si la implementación es exitosa, deberías ver un mensaje similar al que se muestra a continuación:

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

Toma nota de la URL del servicio en el resultado anterior, ya que la usarás en el siguiente paso para iniciar la consola de n8n.

7. Ejecuta un flujo de trabajo de n8n

Inicia un navegador y visita la URL del servicio que obtuviste en el paso anterior. También puedes obtener la URL del servicio desde la página principal de Cloud Run, en la que verás n8n como uno de los servicios.

Nota: Si recibes un error que dice Cannot GET / o que n8n is starting up, esto suele indicar que n8n aún se está iniciando. Puedes actualizar la página y, finalmente, se cargará.

Finalmente, verás una pantalla como la que se muestra a continuación, en la que puedes configurar la cuenta del propietario:

5a3b1d60d02b13ec.png

Completa los detalles obligatorios, toma nota de la contraseña y completa la configuración. Puedes omitir algunos de los pasos, incluido el paso que solicita enviar una clave de licencia.

Si todo sale bien, deberías ver la página principal de n8n como se muestra a continuación:

3e072e9189ff9464.png

Si estás familiarizado con n8n, podrás trabajar en esto y completar el lab.

Si deseas probar n8n, puedes probar el siguiente flujo de trabajo:

  1. Haz clic en Credenciales y, luego, en Agregar primera credencial.

14a1f3d2098a266c.png

  1. Configuraremos una credencial de clave de API de Gemini. Escribe gemini para mostrar la opción de la API de Google Gemini (PaLM) y, luego, haz clic en Continuar.

7f48bfe35e5d9e98.png

  1. Puedes obtener la clave de API de Gemini en https://aistudio.google.com/app/api-keys.
  2. Una vez que tengas la clave, pégala. n8n validará la clave y la credencial ya estará configurada.

3f31cbfc5072f113.png 5. Ahora ve a la opción Flujos de trabajo y haz clic en Comenzar desde cero o crear un flujo de trabajo nuevo. Esto mostrará un lienzo en blanco, en el que puedes compilar los siguientes dos nodos: uno es un activador (Simple Chat) y el otro es un agente, en el que configuraremos la credencial que creamos, de modo que el modelo de agente sea Google Gemini. Finalmente, deberías tener un flujo de trabajo como el siguiente:

8f394e456ae7d1a.png

  1. Puedes ejecutar este flujo de trabajo a través del panel de chat y, si todo sale bien, obtener una respuesta a tus mensajes. A continuación, se muestran pantallas de ejecución de muestra:

aec85c84f65d0da1.png

Con esto, se completa nuestra validación de la implementación de n8n en Google Cloud Run.

8. Limpieza

Si elegiste usar este codelab para aprender a instalar y ejecutar n8n en Google Cloud Run y no para la producción o el requisito permanente, puedes evitar cargos continuos en tu cuenta de Google Cloud. Es importante borrar los recursos que creamos durante este taller.

Borraremos la instancia de Cloud SQL y el servicio de Cloud Run que implementamos.

Asegúrate de que las siguientes variables de entorno estén configuradas correctamente, según tu proyecto y región:

export PROJECT_ID="YOUR_PROJECT_ID"
export REGION="YOUR_REGION"

Los siguientes dos comandos borran los servicios de Cloud Run que implementamos:

gcloud run services delete n8n --platform=managed --region=${REGION} --project=${PROJECT_ID} --quiet

El siguiente comando borra la instancia de Cloud SQL:

gcloud sql instances delete n8n-db

Los siguientes dos comandos borran las claves de Secret Manager que creamos:

gcloud secrets delete n8n-db-password

gcloud secrets delete n8n-encryption-key

9. Felicitaciones

Felicitaciones, implementaste correctamente n8n en Google Cloud Run y validaste la configuración con un flujo de trabajo de muestra.

Documentos de referencia