Homepage

Gustavo Gonzaga da Silva

Go back

Como instalar o n8n no Dokploy + Caso de uso com GLPI

Nesse post eu ensino como instalar o n8n no dokploy e também trago um caso de uso de envio de eventos do GLPI para o n8n, em que o registro do chamado é persistido no banco de dados por meio do n8n.

https://www.youtube.com/watch?v=W4HLSEO6eOM

  • Configurar e rodar o container do n8n
    • Acesse a página de projetos no Dokploy, crie ou acesse um projeto já existente.
    • Em “Create Service” escolha a opção “Compose”.
    • Na aba “General” escolha a opção “Raw”.

    Cole o seguinte conteúdo:
    services:
      n8n:
        image: docker.n8n.io/n8nio/n8n:stable
        restart: always
        env_file:
          - .env
        volumes:
          - n8n_data:/home/node/.n8n
        networks:
          - dokploy-network
        ports:
          - 4442:${N8N_PORT}
    
    volumes:
      n8n_data:
            
    networks:
      dokploy-network:
        external: true
    
    • Na aba “Environment” cole o seguinte conteúdo:
    N8N_HOST=localhost
    N8N_PORT=5678
    GENERIC_TIMEZONE=America/Sao_Paulo
    N8N_PROTOCOL=http
    NODE_ENV=production
    WEBHOOK_URL=https://${N8N_HOST}/
    N8N_SECURE_COOKIE=false
    
    • Seu n8n está pronto para rodar, clique em “Deploy” na aba “General” e acompanhe o progresso na aba “Deployments”.
    • Domínio (Opcional)
      • Na aba “Domains” clique em “Add Domain”.
      • Em “Service Name” selecione o serviço rodando “n8n”.
        • Se não tiver feito o deploy ainda, apenas digite o nome do serviço, no exemplo do compose acima, colocamos “n8n” então basta digitar isso que ao fazer o deploy o domínio será corretamente atribuído.
      • No campo “Host” você deve digitar o domínio que você quer atribuir, exemplo: “n8n.meudominio.com” ou apenas “meudominio.com”.
      • Em “Path” e “Internal Path” apenas digite “/”.
      • Em “Container Port” digite a porta interna configurada no serviço do n8n, no nosso caso, isso foi especificado nas variáveis de ambiente na variável “N8N_PORT”, então digite 5678.
      • Caso você tiver um domínio registrado realmente e quiser habilitar o HTTPS, marque a opção HTTPS que o traefik cuidará de tudo.
  • Overview da ferramenta
    O n8n trabalha com “Workflows” cada workflow é um projeto que recebe chamadas e executa o passo a passo configurado.
    Ao acessar ou criar um workflow você verá que primeiro você precisará definir um trigger, ou seja, um ponto de partida onde o passo passo vai saber que tem que ser executado, após isso você adicionará os nodes.
    Os nodes são os passos que serão executados, cada passo recebe e gere informações, ou seja, cada passo pode passar dados um para o outro, assim criando uma rede de execução.
  • Caso de uso: Receber evento de abertura de chamado do GLPI no N8N
    • O que é um Webhook?
      Um webhook, é um endpoint criado no seu serviço, que recebe requisições HTTP e processa os dados enviados.
      Ao contrário de uma requisição HTTP POST normal por exemplo, em que a resposta é recebida na hora, um webhook é uma alternativa a respostas que podem demorar a serem enviadas.
      Por exemplo, você pediu para um serviço gerar um boleto, mas quer ser avisado quando o boleto for pago, então basta fornecer um webhook para o serviço junto com a forma de autenticação, assim que o boleto for pago o serviço dispara uma requisição para o seu webhook, assim você pode fazer o que quiser com aquela informação, pode marcar como pago, persistir logs etc.
      !image.png
      Fonte da imagem: https://www.zoho.com/blog/assist/webhooks-what-are-they-and-how-are-they-used.html
    • Configurando webhook no n8n
      • Acesse o seu n8n e edite ou crie um novo workflow
      • Clique em “Add first step” e selecione “On webook call”
        • Lado esquerdo: Dados de origem
        • Lado direito: Dados gerados pelo node
        • Centro: Configuração do node
      • Neste exemplo, vamos utilizar o método POST, então em “HTTP Method” mude para POST.
      • O “Path” é customizável então sinta-se a vontade para deixar no padrão ou utilizar um do seu gosto.
      • A autenticação do webhook é importante para garantir a segurança do seu webhook, mas nesse exemplo iremos deixar como “none” o campo “Authentication”.
      • Em “Respond” selecione “Using 'Respond to Webhook' Node”.
    • Configurando o Webhook no GLPI
      • Acesse o seu GLPI e no menu laterial selecione “Setup” → “Webhooks”
      • No menu superior clique em “+ Add”
      • Nas informações do Webhook, preecha corretamente os campos lembrando de ativar o webbook deixando “Active” como “Yes”.
      • Em “Itemtype” selecione “Assistance - Ticket”.
      • Em “Event” selecione “New”
        • Isso fará com que o evento só é disparado ao criar novos chamados.
      • Em “Target” configure a URL do seu n8n e deixe o “HTTP Method” como “POST”.
      • Após isso, revise os dados e clique em “+ Add” para criar o wehbook
      • Na aba “Custom headers” clique em “+ Add a custom header”, e adicione o seguinte header sendo “chave: valor”.
        • Content-Type: application/json
      • Nota: É necessário que você cheque o bom funcionamento da ação automática “queuedwebhook” em “Setup” → “Automatic actions” para que todos os webhooks que estiverem na fila possam ser enviados automaticamente pelo próprio GLPI.
    • Configurando a credencial do banco de dados
      • Volte ao menu principal do n8n e selecione a aba “Credentials”.
      • Clique em “Create credential” e selecione o tipo do banco de dados que deseja
      • No meu caso selecionei “Postgres”, após escolherm clique em “Continue”
      • Em “Host” digite o endereço do seu banco de dados
      • Após isso, configure corretamente as credenciais em “Database”, “User” e “Password”.
      • Finalmente clique em “Save”, um teste de conexão será realizado.
    • Criando a tabela no banco de dados
      • Acesse o Dbeaver ou o Pgadmin e execute o seguinte script.
      create table wh_tickets (
          id INTEGER GENERATED ALWAYS AS identity,
          ticket_id int4 not null,
          ticket_created_at timestamptz not null,
          constraint wh_tickets_pk primary key (id),
          constraint wh_tickets_uk unique (ticket_id)
      );
      
      • Isso cria uma tabela que vai guardar as informações básicas do ticket criado no GLPI como ID interno do GLPI e nome do chamado.
    • Criando o node que vai gravar o registro no banco de dados
      • Acesse o workflow e identifique o node trigger.
      • Clique no símbolo de “+” ao lado dele e pesquise por “Postgres” → “Insert rows in a table”.
      • Em “Credential” selecione a credencial criada anteriormente
      • Em “Operation”, neste exemplo faremos uma inserção de registro então “Insert” deverá ser selecionado.
      • Em “schema” selecione o seu schema no banco de dados, geralmente o padrão é “public”
      • Em “table”, selecione a tabela que quer inserir os dados, nesse exemplo a tabela se chama “wh_tickets”.
      • Na seção “Values to send” é onde iremos mapear as chaves vindas no JSON da requisição para as colunas da tabela para o insert.
        • Em “id” exclua o valor e deixe o campo em branco
        • Em “ticket_id” cole “”
        • Em “ticket_name” cole “”
        • Em “ticket_created_at” cole “”
        • Nota: Opcionalmente você pode arrastar a chave no body para o campo do valor a ser inserido na coluna.

        !image.png
        • Nota 2: Se o payload no glpi mudar, esse fluxo será invalidado.
      • Pronto, o workflow está pronto
    • Testes
      • Após concluir todos os passos acima, basta criar um ticket no glpi e aguardar a ação automática enviar o webhook pendente na fila para o n8n.
      • Após o webhook for enviado basta abrir o banco de dados que será possível visualizar o registro do chamado.