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 flujos 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, en la que se 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 apta para producción de n8n en Cloud Run. Incluye recursos como una base de datos para la persistencia y un administrador de secretos para los datos sensibles.

Actividades

  • Implementa n8n en Google Cloud Run, que es una plataforma de procesamiento sin servidores completamente administrada 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
  • Aprovisiona la imagen de contenedor de n8n en Google Cloud Run.
  • Prueba 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 se configuró 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 siguiente comando. Este proceso puede 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 olvidas alguna API, puedes habilitarla durante el proceso de implementación. Consulta la documentación para ver los comandos y el uso de gcloud.

Por último, configuraremos 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, administrar y controlar tus bases de datos relacionales de PostgreSQL en Google Cloud Platform.

Ejecuta el siguiente comando en Cloud Shell 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étera.

Ten en cuenta que usamos el valor root-password como postgres. Si lo cambiaste, 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, crearemos una base de datos llamada n8n en la instancia de Cloud SQL (n8n-db) que creamos. Todos los comandos que se indican 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 se realiza correctamente, 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 quieres usar otra contraseña más segura (recomendada para la producción), debes usarla en lugar de la que elegimos aquí, es decir, n8n, pero asegúrate de usarla de forma coherente en los próximos comandos también.

A continuación, se muestra el comando para crear el usuario de la base de datos:

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 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

Implementaremos n8n en Google Cloud Run en el siguiente paso. 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 solo tenga los roles o permisos mínimos necesarios en Google Cloud.

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

  • roles/cloudsql.client : 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 tanto para n8n-db-password como para n8n-encryption-key.

Comencemos. Todos los comandos que se indican a continuación se deben ejecutar en Google Cloud Shell. El primero crea la cuenta de servicio y, luego, proporcionamos los roles necesarios, 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 siguientes comandos, 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 podemos 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,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 alrededor de un minuto. Si la implementación se realizó correctamente, 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

Anota 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, donde verás n8n como uno de los servicios.

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

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

5a3b1d60d02b13ec.png

Completa los detalles obligatorios, anota la contraseña y completa la configuración. Puedes omitir algunos pasos, incluido el que solicita que envíes 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 conoces n8n, podrás completar el lab.

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

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

14a1f3d2098a266c.png

  1. Configuraremos una credencial de clave de API de Gemini. Escribe Gemini para que aparezca 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 Workflows y haz clic en Start from scratch o crea un flujo de trabajo nuevo. Se abrirá un lienzo en blanco en el que podrás crear los siguientes dos nodos: uno es un activador (Simple Chat) y el otro es un agente, en el que configuraremos la credencial que creamos para 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 instrucciones. A continuación, se muestran pantallas de ejecución de ejemplo:

aec85c84f65d0da1.png

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

8. Limpieza

Si decidiste usar este codelab para aprender a instalar y ejecutar n8n en Google Cloud Run, y no para un requisito permanente o de producción, puedes evitar cargos continuos en tu cuenta de Google Cloud. Para ello, es importante que borres 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