windmill.dev – Uma alternativa em low-code e automação ao n8n

Olá a todos.

Recordam-se do nosso ultimo post sobre o n8n? O produto de automação processual? Foi me pedido pelos representantes de várias empresas se conhecia algo não mainstream mas que fosse suportado. Este post é precisamente sobre isso.

A automação de tarefas no nosso homelab e empresa está a tornar-se cada vez mais essencial à medida que a nossa infraestrutura cresce.
Entre as diversas ferramentas disponíveis, o Windmill destaca se como uma alternativa viável ao n8n, pela sua flexibilidade, robustez e suporte. Neste post, iremos explorar como instalar e integrar o Windmill em um ambiente Docker e como ele pode transformar a maneira como gerimos as nossas operações diárias da nossa infraestrutura, seja pessoal, seja da empresa.

O Que é Windmill?

Windmill é uma plataforma de automação em opensource  que permite a criação e execução de workflows complexos de maneira simples e intuitiva. Ela é ideal para gerir e automatizar tarefas repetitivas, o que é crucial em um ambiente de homelab onde a eficiência e a organização são essenciais, e sobretudo o Windmill é uma excelente plataforma de low code.

Principais Funcionalidades do Windmill

  • Automação de Workflow: Criação de fluxos de trabalho automatizados que podem ser acionados por eventos ou pré-programados.
  • Interface Intuitiva: Uma interface gráfica que facilita a criação e o gestão de workflows e low-code sem a necessidade de conhecimentos avançados em programação.
  • Integração com Serviços Externos: Capacidade de se integrar com diversas APIs e serviços externos, ampliando as possibilidades de automação.
  • Execução Escalável: Projetado para escalar conforme necessário, suportando um grande volume de tarefas simultâneas.
  • Low Code – Galore!

Instalando o Windmill em Docker.

Para começar a utilizar o Windmill na nossa infraestrutura, a instalação via Docker é uma das opções mais práticas. Docker permite a criação de containers isolados que garantem que a aplicação Windmill e suas dependências executem de maneira consistente em qualquer ambiente.

Passo a Passo da Instalação

1. Pré-requisitos: Docker instalado em um sistema. Podem seguir as instruções no site oficial do Docker para instalar.

2. Descarreguem a versão correta do software. Abram o vosso terminal e executem:

docker pull windmill/windmill

3. Executando o container do Windmill:

docker run -d -p 3000:3000 --name windmill windmill/windmill

Este comando faz o seguinte:
– `-d`: Executa o container em segundo plano.
– `-p 3000:3000`: Mapeia a porta 3000 do container para a porta 3000 do host.
– `–name windmill`: Nomeia o container como “windmill”.

4. Verificando a Instalação:

Após iniciarem o container,  podem aceder a interface web do Windmill através do browser, utilizando o endereço `http://$ip:3000`. Se tudo estiver configurado corretamente, irão ver a interface de gestão do Windmill.

Integrando o Windmill no Homelab

Com o Windmill instalado e executando, o próximo passo é integrá-lo ao nosso homelab/infraestrutura para automatizar tarefas.
Exploremos portanto algumas maneiras práticas de fazer isso.

Automação de Backups

Uma das tarefas mais importantes em um homelab é garantir que os dados estejam seguros. Podemos configurar o Windmill para automatizar backups de bancos de dados ou arquivos importantes.

1. Criando um Workflow de Backup de uma DB de mysql:
– Acedam a interface do Windmill e criem um novo workflow.
– Adicione num script para realizar o backup do seu banco de dados ou arquivos. Por exemplo, para fazer backup de um banco de dados MySQL:

mysqldump -u user -p password database_name > /backup/backup.sql

– Configurem o workflow para ser executado em intervalos regulares, como diariamente ou semanalmente.

Monitorização e Notificações

Manterem-se informados sobre o estado da vossa infraestrutura é crucial. O Windmill pode ser configurado para monitorizar recursos e enviar notificações em caso de falhas ou anomalias.

Configurando Monitorização:
– Criem um workflow para verificar o status dos vossos servidores, serviços ou containers Docker. Por exemplo:

docker ps

– Adicionem condições if para detetar se algum serviço está offline ou apresentando problemas.
– Integrem com serviços de notificação, como email, slack ou ntfy, para alertar imediatamente sobre qualquer problema.

Gestão de Tarefas de Manutenção:

Outra aplicação útil do Windmill é a automação de tarefas de manutenção, como atualizações de software, limpeza de logs ou otimização de bases de dados.

Automatizando Atualizações:
– Criem um workflow para atualizar automaticamente os pacotes do sistema ou aplicações específicas. Por exemplo, para atualizar pacotes em um sistema RockyLinux:

sudo dnf  clean all  && dnf update -y

Integração com APIs e Serviços Externos

O Windmill permite integração com diversas APIs e serviços externos, expandindo ainda mais as possibilidades de automação no nosso homelab.

Integrando com Serviços de DNS Dinâmico:
– Se  utilizam um serviço de DNS dinâmico, podem automatizar a atualização de registos DNS sempre que o IP do seu homelab mudar.
– Criem um workflow que verifique o IP atual e atualize o registo DNS utilizando a API do seu provedor de DNS.

Exemplo Completo: Automação de Backup e Notificação

Vamos criar um exemplo completo que combina backup da base de dados com notificação via email.

Criando um Workflow de Backup de uma DB de mysql:
– Acedam a interface do Windmill e criem um novo workflow.
– Adicione num script para realizar o backup do seu banco de dados ou arquivos. Por exemplo, para fazer backup de um banco de dados MySQL:

mysqldump -u user -p password database_name > /backup/backup.sql

– Configurem o workflow para ser executado em intervalos regulares, como diariamente ou semanalmente.
– Adicionem um script para enviar uma notificação por email utilizando um serviço como SendGrid:

import smtplib
from email.mime.text import MIMEText

msg = MIMEText("Backup realizado com sucesso.")
msg['Subject'] = "Notificação de Backup"
msg['From'] = "[email protected]"
msg['To'] = "[email protected]"

with smtplib.SMTP('smtp.sendgrid.net', 587) as server:
server.login("apikey", "sua-chave-api")
server.sendmail(msg['From'], [msg['To']], msg.as_string())

– Configure o workflow para ser executado diariamente.

Com este exemplo, sempre que o workflow de backup for executado, irão receber uma notificação por email confirmando o sucesso da operação.

Conclusão

O Windmill é uma ferramenta poderosa para automatizar tarefas no seu homelab, proporcionando maior eficiência e controle sobre suas operações e um suporte a condizer. Ao integrar o Windmill com Docker, irão garantir uma instalação fácil e escalável. Seja para automação de backups, monitorização, manutenção ou integração com serviços externos, o Windmill oferece uma solução flexível e robusta.

Experimentem implementar estas soluções no vosso homelab e descubram como o Windmill pode transformar a vossa rotina de gestão, permitindo que você se concentre em tarefas mais estratégicas e menos operacionais.

Até ao próximo post. E já sabem. Se acharem algo menos correto, já sabem onde me encontrar.
Um abraço
Nuno