Como implantar e executar o n8n no Google Cloud Run

1. Introdução

Neste codelab, você vai configurar o n8n no Google Cloud Run. O n8n é uma ferramenta de automação de fluxo de trabalho de código aberto que permite aos usuários conectar diferentes aplicativos e serviços para automatizar tarefas repetitivas.

O codelab é baseado no guia de documentação do n8n, que explica como hospedar o n8n no Google Cloud Run. Vamos instalar e configurar uma versão do n8n que é uma implantação mais durável e de nível de produção do n8n no Cloud Run. Ele inclui recursos como um banco de dados para persistência e um gerenciador de secrets para dados sensíveis.

O que você aprenderá

  • Implante o n8n no Google Cloud Run, uma plataforma de computação sem servidor totalmente gerenciada que executa contêineres sem estado na infraestrutura do Google.

O que você vai aprender

  • Provisionamento e preenchimento de um banco de dados do Cloud SQL para PostgreSQL que vai atuar como uma versão persistente e durável para nossa instalação do n8n.
  • Provisione a imagem do contêiner n8n no Google Cloud Run.
  • Teste a instalação do n8n no Google Cloud Run.

O que é necessário

  • Navegador da Web Google Chrome
  • Uma conta do Gmail
  • Um projeto do Cloud com faturamento ativado

2. Antes de começar

Criar um projeto

  1. No console do Google Cloud, na página de seletor de projetos, selecione ou crie um projeto do Google Cloud.
  2. Verifique se o faturamento está ativado para seu projeto do Cloud. Saiba como verificar se o faturamento está ativado em um projeto .
  3. Você vai usar o Cloud Shell, um ambiente de linha de comando executado no Google Cloud que vem pré-carregado com bq. Clique em "Ativar o Cloud Shell" na parte de cima do console do Google Cloud.

Imagem do botão "Ativar o Cloud Shell"

  1. Depois de se conectar ao Cloud Shell, verifique se sua conta já está autenticada e se o projeto está configurado com seu ID do projeto usando o seguinte comando:
gcloud auth list
  1. Execute o comando a seguir no Cloud Shell para confirmar se o comando gcloud sabe sobre seu projeto.
gcloud config list project
  1. Se o projeto não estiver definido, use este comando:
gcloud config set project <YOUR_PROJECT_ID>
  1. Ative as APIs necessárias com o comando mostrado abaixo. Isso pode levar alguns minutos.
gcloud services enable run.googleapis.com \
                       sqladmin.googleapis.com \
                       secretmanager.googleapis.com 

Após a execução do comando, você vai ver uma mensagem semelhante à mostrada abaixo:

Operation "operations/..." finished successfully.

Se alguma API for esquecida, você sempre poderá ativá-la durante a implementação. Consulte a documentação para ver o uso e os comandos gcloud.

Por fim, vamos definir algumas variáveis de ambiente que serão usadas nos scripts que vamos executar nas próximas etapas. No terminal do Cloud Shell, execute os dois comandos a seguir. Não se esqueça de substituir GCP_PROJECT_ID e GCP_REGION pelos valores respectivos do ID do projeto e da região (por exemplo, us-central1) em que você quer fazer essa implantação. Vamos usar us-central1 para a implantação.

export PROJECT_ID=GCP_PROJECT_ID
export REGION=us-central1

3. crie uma instância do Cloud SQL

Vamos usar uma instância do Google Cloud SQL para PostgreSQL, que será nossa camada de persistência para armazenar a instância do n8n e os dados de execução. Isso é necessário para que nossa configuração seja durável.

O Cloud SQL para PostgreSQL é um serviço de banco de dados totalmente gerenciado que ajuda a configurar, manter, gerenciar e administrar seus bancos de dados relacionais PostgreSQL no Google Cloud Platform.

Execute o seguinte comando no Cloud Shell para criar a instância:

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

Esse comando leva aproximadamente 5 minutos para ser executado. Depois que o comando for executado, você vai ver uma saída indicando que ele foi concluído, além das informações da instância do Cloud SQL, como NAME, DATABASE_VERSION, LOCATION etc.

Usamos o valor root-password como postgres. Se você mudar para outra coisa, guarde essa informação.

4. Configurar o banco de dados do n8n e as credenciais de usuário do banco de dados

Agora que temos nossa instância do Cloud SQL para PostgreSQL pronta, podemos criar nosso banco de dados n8n nela, além de armazenar a senha do banco de dados e a chave de criptografia no Google Cloud Secrets Manager.

Primeiro, vamos criar um banco de dados chamado n8n na instância do Cloud SQL (n8n-db) que criamos. Todos os comandos abaixo devem ser executados no terminal do Google Cloud Shell.

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

Se a criação for bem-sucedida, você vai receber uma mensagem como esta:

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

Agora que o banco de dados foi criado, vamos criar uma conta de usuário para ele. Vamos usar as seguintes credenciais:

  • ID do usuário : n8n-user
  • senha : n8n

Observação: se você quiser usar outra senha mais forte (recomendada para produção), use-a em vez da senha escolhida aqui, ou seja, n8n. Mas use-a de forma consistente nos próximos comandos também.

O comando para criar o usuário do banco de dados é fornecido abaixo:

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

Neste ponto, é uma boa ideia armazenar as credenciais da senha do banco de dados do usuário e da chave de criptografia no Google Cloud Secret Manager, que é um sistema de armazenamento seguro e conveniente para chaves de API, senhas, certificados e outros dados sensíveis.

Começamos com o seguinte comando, que usa a senha que usamos (n8n)) e a transmite para o comando gcloud secrets create. Nossa chave secreta será n8n-db-password.

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

Da mesma forma, vamos usar o próximo conjunto de comandos para gerar uma chave de criptografia e criar uma variável secreta n8n-encryption-key que vai armazenar o valor.

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

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

5. Criar uma conta de serviço para o Google Cloud Run

Vamos implantar o n8n no Google Cloud Run na próxima etapa. Para se preparar para isso, vamos criar uma conta de serviço que o Cloud Run usará para executar fluxos de trabalho do n8n. Para isso, queremos garantir que a conta de serviço criada tenha apenas as funções/permissões de requisito mínimo no Google Cloud.

De acordo com nossos requisitos atuais, vamos precisar dos seguintes papéis para a conta de serviço que criarmos:

  • roles/cloudsql.client : necessário para que a conta de serviço acesse nosso banco de dados do Cloud SQL.
  • roles/secretAccessor : precisamos fornecer essa função para acessar as chaves do Secret Manager para n8n-db-password e n8n-encryption-key.

Vamos lá! Todos os comandos abaixo precisam ser executados no Google Cloud Shell. O primeiro cria a conta de serviço e, em seguida, fornecemos os papéis necessários, conforme discutido. Execute cada um dos comandos em sequência. Se for solicitado a especificar uma condição para qualquer um dos comandos abaixo, escolha "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"

Agora estamos prontos para implantar a imagem do contêiner n8n no Google Cloud Run.

6. Implantar o n8n no Google Cloud Run

Execute o comando a seguir no 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

A implantação deve levar cerca de um minuto. Se a implantação for bem-sucedida, você vai ver uma mensagem semelhante a esta:

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

Anote o URL do serviço na saída acima, já que você vai usá-lo na próxima etapa para iniciar o console do n8n.

7. Executar um fluxo de trabalho do n8n

Abra um navegador e acesse o URL do serviço que você recebeu na etapa anterior. Também é possível acessar o URL do serviço na página inicial do Cloud Run, em que o n8n aparece como um dos serviços.

Observação: se você receber um erro dizendo tela Cannot GET / ou n8n is starting up, isso geralmente indica que o n8n ainda está sendo iniciado. Atualize a página. Ela deve carregar em breve.

Eventualmente, você vai ver uma tela como a mostrada abaixo, em que é possível configurar a conta de proprietário:

5a3b1d60d02b13ec.png

Preencha os detalhes necessários, anote a senha e conclua a configuração. Você pode pular algumas etapas, incluindo a que pede o envio de uma chave de licença.

Se tudo correr bem, você vai ver a página inicial do n8n, como mostrado abaixo:

3e072e9189ff9464.png

Se você já conhece o n8n, vai conseguir concluir o laboratório.

Se quiser fazer um pequeno test drive do n8n, tente o seguinte fluxo de trabalho:

  1. Clique em "Credenciais" e em Adicionar primeira credencial.

14a1f3d2098a266c.png

  1. Vamos configurar uma credencial de chave da API Gemini. Digite "gemini" para abrir a opção da API do Google Gemini (PaLM) e clique em Continuar.

7f48bfe35e5d9e98.png

  1. Você pode acessar a chave da API Gemini em https://aistudio.google.com/app/api-keys.
  2. Depois de receber a chave, cole-a. O n8n vai validar a chave, e a credencial será configurada.

3f31cbfc5072f113.png 5. Agora, acesse a opção "Fluxos de trabalho" e clique em "Começar do zero" ou crie um novo fluxo de trabalho. Isso vai abrir uma tela em branco, onde você pode criar os dois nós a seguir: um é um gatilho (Simple Chat) e o outro é um agente. Nele, vamos configurar a credencial que criamos para que o modelo de agente seja o Google Gemini. No final, você terá um fluxo de trabalho assim:

8f394e456ae7d1a.png

  1. Você pode executar esse fluxo de trabalho no painel de chat e, se tudo der certo, receber uma resposta aos seus comandos. Confira abaixo exemplos de telas de execução:

aec85c84f65d0da1.png

Isso conclui a validação da implantação do n8n no Google Cloud Run.

8. Limpeza

Se você optou por usar este codelab para aprender a instalar e executar o n8n no Google Cloud Run e não para produção / requisito permanente, é importante excluir os recursos criados durante este workshop para evitar cobranças contínuas na sua conta do Google Cloud.

Vamos excluir a instância do Cloud SQL e o serviço do Cloud Run que implantamos.

Verifique se as seguintes variáveis de ambiente estão definidas corretamente, de acordo com seu projeto e região:

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

Os dois comandos a seguir excluem os serviços do Cloud Run que implantamos:

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

O comando a seguir exclui a instância do Cloud SQL:

gcloud sql instances delete n8n-db

Os dois comandos a seguir excluem as chaves do Secret Manager que criamos:

gcloud secrets delete n8n-db-password

gcloud secrets delete n8n-encryption-key

9. Parabéns

Parabéns! Você implantou o n8n no Google Cloud Run e validou a configuração com um fluxo de trabalho de exemplo.

Documentos de referência