Seção 11: Stack de Automação Low-Code com n8n¶
Bem-vindo à automação de próximo nível para o seu home server. Enquanto o Home Assistant é o rei da automação residencial e de dispositivos, o n8n (pronuncia-se "nodemation") se destaca como uma plataforma de automação de workflows de propósito geral. Ele permite conectar centenas de aplicações e serviços diferentes, tanto internos quanto externos, através de uma interface visual baseada em nós (nodes).
Com o n8n, você pode criar workflows complexos que reagem a eventos, processam dados e executam ações em múltiplos sistemas, tudo isso com pouca ou nenhuma necessidade de código. É a ferramenta perfeita para orquestrar tarefas que vão além do escopo do Home Assistant ou do Ansible.
Casos de Uso para n8n no seu Home Server:
- Notificações Inteligentes: Crie um workflow que, ao receber um webhook de um dos seus serviços (ex: Uptime Kuma detecta um serviço offline), envia uma notificação detalhada para o Telegram, Discord e também cria um card em um quadro Kanban (como o do Nextcloud Deck).
- Sincronização de Conteúdo: Monitore uma pasta no seu Nextcloud e, sempre que um novo arquivo for adicionado, envie-o para um serviço de OCR, salve o texto extraído em uma nota e, em seguida, use uma API de LLM (via LiteLLM) para resumi-lo.
- Gerenciamento de Mídia: Quando um novo filme for adicionado à sua biblioteca Plex/Jellyfin (usando webhooks), busque informações adicionais sobre ele em APIs como a do IMDb/TMDb e atualize os metadados ou envie uma notificação para um grupo de amigos.
- Backups e Alertas: Crie um workflow agendado que verifica o status dos seus backups ZFS e, em caso de falha, abre um chamado em uma ferramenta de gestão de projetos e envia um alerta crítico.
Nesta seção, vamos implantar o n8n como um container Docker na core-services-vm, integrá-lo ao nosso ecossistema seguro com Traefik e Authelia, e garantir que seus dados e workflows sejam persistidos de forma segura no nosso armazenamento ZFS.
11.1. Preparação com Ansible para a Stack n8n¶
Como de costume, o primeiro passo é usar o Ansible para preparar o ambiente na core-services-vm. O playbook irá criar os diretórios necessários no volume NFS e gerar o arquivo .env para a stack do n8n.
Playbook setup-n8n-volumes.yml¶
Este novo playbook Ansible, a ser executado contra a core-services-vm, fará o seguinte:
- Criação do Diretório de Configuração do n8n:
- No dataset ZFS
docker-volumes(montado em{{ vm_nfs_mount_base_path }}/{{ zfs_docker_volumes_dataset_name }}/), criará o subdiretório.../n8n/config. - Este diretório armazenará todos os seus workflows, credenciais e configurações do n8n.
- As permissões serão definidas para
owner: {{ docker_puid }}egroup: {{ docker_pgid }}para garantir que o container do n8n tenha acesso de escrita.
- No dataset ZFS
- Preparação do Arquivo
.env:- Gerará o arquivo
/opt/portainer_stack_envs/n8n.envnacore-services-vm. - Este arquivo conterá o caminho completo para o volume de configuração, PUID/PGID, fuso horário e outras variáveis necessárias para o deploy.
- Gerará o arquivo
Ação: Crie e execute o playbook a partir da sua máquina de controle Ansible.
-
Crie o arquivo
ansible/playbooks/setup-n8n-volumes.yml:# ansible/playbooks/setup-n8n-volumes.yml - name: Setup n8n Volumes and Environment hosts: core-services-vm become: true gather_facts: true vars_files: - ../vars/main.yml - ../vault.yml tasks: - name: "Create n8n config directory on NFS volume" ansible.builtin.file: path: "{{ vm_nfs_mount_base_path }}/{{ zfs_docker_volumes_dataset_name }}/n8n/config" state: directory owner: "{{ docker_puid }}" group: "{{ docker_pgid }}" mode: '0775' - name: "Generate .env file for n8n stack" ansible.builtin.template: src: ../templates/portainer_stack_env.j2 dest: "/opt/portainer_stack_envs/n8n.env" owner: root group: root mode: '0644' vars: stack_name: "n8n" stack_configs: - { name: 'N8N_CONFIG_PATH', value: "{{ vm_nfs_mount_base_path }}/{{ zfs_docker_volumes_dataset_name }}/n8n/config" } -
Execute o playbook:
11.2. Deploy da Stack n8n via Portainer¶
Com o diretório e o arquivo .env prontos, podemos implantar o n8n.
Docker Compose para n8n (docker/stacks/automation/n8n-compose.yml)¶
Crie o seguinte arquivo de Docker Compose. Ele define o serviço do n8n e o configura para trabalhar com nosso ambiente.
# docker/stacks/automation/n8n-compose.yml
version: '3.9'
networks:
proxy:
name: proxy
external: true
services:
n8n:
image: docker.n8n.io/n8nio/n8n:1.45.1 # Use uma tag de versão estável
container_name: n8n_app
restart: unless-stopped
networks:
- proxy
volumes:
- "${N8N_CONFIG_PATH}:/home/node/.n8n"
environment:
- N8N_HOST={{ n8n_subdomain }}.{{ base_domain }}
- N8N_PROTOCOL=https
- NODE_ENV=production
- WEBHOOK_URL=https://{{ n8n_subdomain }}.{{ base_domain }}/
- GENERIC_TIMEZONE=${SYSTEM_TIMEZONE}
# Credenciais de admin para o n8n (defina no vault e passe como secret)
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=${N8N_ADMIN_USER_FROM_PORTAINER_ENV}
- N8N_BASIC_AUTH_PASSWORD=${N8N_ADMIN_PASSWORD_FROM_PORTAINER_ENV}
labels:
traefik.enable: "true"
traefik.http.routers.n8n.rule: "Host(`{{ n8n_subdomain }}.{{ base_domain }}`)"
traefik.http.routers.n8n.entrypoints: "websecure"
traefik.http.routers.n8n.tls.certresolver: "letsencrypt"
traefik.http.routers.n8n.service: "n8n-svc"
# Protegendo com Authelia para SSO e 2FA
traefik.http.routers.n8n.middlewares: "authelia@docker"
traefik.http.services.n8n-svc.loadbalancer.server.port: "5678"
Pontos Chave do Compose:
- Imagem: Usamos a imagem oficial
docker.n8n.io/n8nio/n8n. - Volume: O diretório de dados do n8n (
/home/node/.n8ndentro do container) é mapeado para o caminho NFS que preparamos. - Variáveis de Ambiente:
N8N_HOST,N8N_PROTOCOL, eWEBHOOK_URLsão cruciais para que o n8n saiba seu próprio endereço público, o que é essencial para webhooks funcionarem corretamente.N8N_BASIC_AUTH_...: O n8n possui um sistema de autenticação de usuário embutido. Embora estejamos usando Authelia na frente, é uma boa prática de segurança em profundidade ter também a autenticação do próprio n8n ativa. Vamos armazenar essas credenciais no Ansible Vault.
- Labels Traefik: Configuração padrão para expor o serviço via Traefik e protegê-lo com Authelia.
Ação de Deploy¶
-
Adicione as novas variáveis ao Ansible Vault (
ansible/vault.yml): -
Adicione o subdomínio ao
main.yml: -
Acesse o Portainer e Selecione o Endpoint
local(core-services-vm). - Vá para "Stacks" -> "+ Add stack".
- Nome da Stack:
automation-n8n. - Web editor: Cole o conteúdo do
n8n-compose.yml. - Carregue o Arquivo
.env:- Na seção "Environment variables", clique em "Load variables from .env file".
- Path on disk:
/opt/portainer_stack_envs/n8n.env.
- Adicione Secrets Manualmente:
N8N_ADMIN_USER_FROM_PORTAINER_ENV: Cole o valor den8n_admin_userdo seu vault.N8N_ADMIN_PASSWORD_FROM_PORTAINER_ENV: Cole o valor den8n_admin_passworddo seu vault.
- Clique em "Deploy the stack".
Após alguns instantes, você poderá acessar https://n8n.seudominio.com. Você será saudado pela tela de login do Authelia e, em seguida, pela tela de login do próprio n8n. Após o login, você estará pronto para começar a construir seus workflows.
11.3. Configuração Inicial e Primeiro Workflow¶
Ao acessar o n8n pela primeira vez, você verá uma tela em branco, pronta para a sua criatividade.
Armazenando Credenciais no n8n¶
O n8n precisa se autenticar com outros serviços. Ele possui um gerenciador de credenciais seguro embutido.
- No menu à esquerda, vá para "Credentials".
- Clique em "Add credential".
- Pesquise pelo serviço que deseja usar (ex: "Telegram", "Google Sheets", "HTTP Header Auth").
- Preencha as informações solicitadas (API keys, tokens, etc.). Essas credenciais são criptografadas e armazenadas de forma segura no volume do n8n.
Criando um Workflow de Notificação Simples¶
Vamos criar um workflow que pode ser acionado por um webhook e envia uma mensagem para o Telegram.
-
Crie as Credenciais do Telegram:
- Fale com o
@BotFatherno Telegram para criar um novo bot e obter seu token de API. - Obtenha o Chat ID do seu usuário ou de um grupo.
- Adicione as credenciais "Telegram API" no n8n.
- Fale com o
-
Crie um Novo Workflow:
- Clique em "Add workflow".
-
Adicione o Nó de Trigger (Webhook):
- O workflow começa com um nó. Clique nele e escolha o trigger "Webhook".
- O n8n gerará uma URL de webhook de teste e uma de produção. Copie a URL de teste.
-
Teste o Webhook:
- Em outra janela ou usando uma ferramenta como
curl, envie uma requisição POST para a URL de teste com um corpo JSON simples: - Volte para o n8n. Você verá que o nó do webhook capturou os dados.
- Em outra janela ou usando uma ferramenta como
-
Adicione o Nó do Telegram:
- Clique no
+após o nó do webhook para adicionar um novo nó. - Pesquise por "Telegram" e selecione a ação "Send Message".
- Credential: Escolha a credencial do Telegram que você criou.
- Chat ID: Insira o seu Chat ID.
- Text: Aqui vem a mágica do n8n. Você pode construir a mensagem usando os dados do nó anterior. Clique na caixa "Text" e use o "Expression Editor" para montar uma mensagem dinâmica:
- Clique no
-
Teste o Nó do Telegram:
- Clique no botão "Execute Node". Uma mensagem deve aparecer no seu Telegram.
-
Ative o Workflow:
- No canto superior direito, ative o workflow. Agora ele está "vivo" e escutando na URL de webhook de produção.
Você acabou de criar uma automação poderosa e flexível. Agora você pode integrar essa URL de webhook em qualquer serviço que suporte notificações, como o Uptime Kuma, para receber alertas personalizados e inteligentes.
Explore os mais de 400 nós disponíveis no n8n para conectar suas aplicações e liberar todo o potencial de automação do seu servidor doméstico. Para guias mais aprofundados, consulte a nova seção no Guia de Estudos.