Ir para o conteúdo principal
  1. posts/

Jornada Homelab: Construindo um Ambiente Seguro para Prática para Projetos de Engenharia de Dados

6 minutos
Tabela de conteúdos

Por que um Homelab?
#

Desde que decidi seguir uma carreira em Engenharia de Dados, eu sabia que teria que trabalhar com ferramentas on-premise (locais) e fornecidas em nuvem. Aprendi como os provedores de nuvem tornam mais simples lidar com infraestrutura, mas também o quão caro pode ser se você cometer um erro. Após algumas pesquisas, descobri que muitas ferramentas de nuvem são implementações modificadas de projetos/ferramentas open-source e percebi como o Docker pode ser usado para hospedar essas ferramentas localmente.

Continuando com minhas pesquisas, encontrei comunidades inteiras sobre Homelabs e SelfHosting. Então, por que não construir meu próprio serviço de nuvem para praticar? Durante essa jornada, aprendi sobre infraestrutura (muito mais do que imaginei inicialmente), pratiquei a interação com serviços externos via rede, causei e resolvi (muitos) erros e entendi os princípios básicos por trás das abstrações dos provedores de nuvem. Eu só precisava de paciência e (muito) tempo para aprender.

Então, por que não? Certo?

Escolhendo o Hardware Certo
#

Este tópico pode ser um pouco intimidador quando você se aprofunda em homelabs e servidores. Você encontrará equipamentos de laboratório que variam de um único Raspberry Pi a clusters Xeon multinodais. Acredite, algumas pessoas gastam muito em suas configurações. Estou há quase 2 anos iterando este projeto e comecei com apenas um laptop antigo que eu tinha sobrando. Depois, adicionei um novo nó (meu antigo PC gamer) com especificações mais robustas.

Componentes de Hardware
#

Nó 01 - Laptop

  • Intel i7 6500u
  • 20gb de RAM DDR4 (4gb + 16gb)
  • SSD SATA de 256gb

Nó 02 - Desktop

  • Intel i5 12400
  • 128gb de RAM DDR4
  • 8gb VRAM (GTX 1070ti)
  • SSD NVME de 1tb + SSD SATA de 512gb

Considerações e Restrições
#

  • As ferramentas que você escolher usar determinarão o quão potente seu hardware precisa ser. Para mim, este laptop era suficiente.
  • Laptops não foram feitos para ser servidores, você precisará de conhecimento extra para lidar com eles, mas não muito.
  • Laptops são eficientes em termos de energia e sua bateria funciona como um UPS próprio.
  • É desafiador, mas também divertido lidar com hardware. Você deve gostar disso para seguir o mesmo caminho que eu.
  • Você sempre estará procurando algo para atualizar, mesmo que não precise.

Configurando o Homelab
#

Meu objetivo com este post não é fazer um tutorial, mas dar uma visão geral da experiência.

Escolha seu Sistema Operacional
#

Existem algumas opções no mercado, eu escolhi instalar Proxmox no meu primeiro nó (laptop) e Ubuntu Server no segundo (desktop).

  • Proxmox é um Hypervisor, minha compreensão é que ele é um SO para hospedar outros SOs através de Máquinas Virtuais (VMs) ou Contêineres (LXC Containers). Está mais relacionado a DevOps e tem muito mais configurações para lidar. Com ele, você cria VMs, gerencia recursos, rede e armazenamento. Nele, criei VMs com Ubuntu Server, onde implantei meus serviços.
  • Ubuntu Server é uma distro Linux para servidores. Funciona como qualquer outro Linux, mas você só interage com ele via terminal. É o mesmo sistema usado em muitas instâncias EC2 da AWS.

SSH
#

  • Um servidor não deve ser acessado diretamente. Certifique-se de que pode acessá-lo via SSH (é assim que você faz com VMs de nuvem também).

Instalar Docker
#

  1. Instale Docker e Docker Compose. Deve ser uma das ferramentas mais importantes que aprendi neste projeto. É também a maneira mais fácil de implantar serviços.

Baixar Imagens Docker
#

  • Escolhi os serviços que queria hospedar e baixei suas imagens Docker.
  • Usei arquivos Docker-Compose.yml e o Docker para gerenciar meus stacks e contêineres. (É uma alternativa ao Portainer, caso você goste de usar o docker-compose).

Extras úteis
#

  1. Instalei VPN para poder acessar de fora da minha rede doméstica. Usei o Tailscale. Com ele, você pode se comunicar com seu nó de servidor como se estivesse na sua rede local.
  2. Hospedei um Reverse Proxy para que eu pudesse acessar meus serviços usando um nome de domínio, sem ter que lembrar o IP e a PORTA de cada serviço que hospedo. Uso o Nginx Proxy Manager.
  3. Cloudflare tunnels me permitiram expor serviços na internet de maneira segura, como este post de blog que você está lendo.

Desafios e Soluções
#

Foi desafiador manter o foco no meu objetivo principal. Cometi o erro de me aprofundar demais em infraestrutura e, em determinado momento, já não estava mais praticando Engenharia de Dados, mas sim agindo como um Engenheiro de DevOps. Lidar com servidores é uma pilha de conhecimento totalmente nova, tenha isso em mente.

Serviços Auto-Hospedados
#

A maioria dos serviços hospedados nos meus servidores também pode ser encontrada em grandes provedores de nuvem, como (AWS, Azure e GCP).

Serviço 1: MinIO (armazenamento de objetos)
#

  • MinIO é um serviço de armazenamento de objetos open-source, compatível com o Amazon S3. Ele permite armazenar e gerenciar grandes quantidades de dados não estruturados, como imagens, vídeos e arquivos. Com sua compatibilidade com a API S3, você pode usar o MinIO como substituto do Amazon S3.

Serviço 2: Postgres SQL (banco de dados relacional)
#

  • Postgres é um sistema de gerenciamento de banco de dados relacional (RDBMS) open-source que permite armazenar e gerenciar dados estruturados.

Serviço 3: Apache Airflow (orquestrador)
#

  • Apache Airflow é uma plataforma open-source para definir, agendar e monitorar fluxos de trabalho programaticamente.

Serviço 4: Apache Kafka (streaming de eventos)
#

  • Apache Kafka é uma plataforma open-source de streaming de eventos distribuída, que permite publicar, assinar, armazenar e processar dados baseados em eventos em larga escala.

Serviço 5: Apache Spark (mecanismo de análise distribuída)
#

  • Apache Spark é um mecanismo open-source de análise para processamento de dados em larga escala, que fornece APIs de alto nível em Java, Python, Scala e R. Ele é projetado para lidar com grandes volumes de dados, sendo uma escolha ideal para processamento de big data e cargas de trabalho de aprendizado de máquina.

Usando Meu Homelab para Projetos de Engenharia de Dados
#

Projeto 1: Pipelines de Dados de Streaming para E-Commerce
#

Projeto 2: Carregando dados estruturados em Banco de Dados com Python
#

Projeto 3: Coletando dados de empregos no LinkedIn com crawlers e scraping
#

Conclusão
#

Passei muito tempo aprendendo e construindo meu Homelab. Posso dizer que essa experiência não é para todas as pessoas da área de tecnologia. No entanto, se você tiver a oportunidade de tentar, você se beneficiará muito ao aprender o que está por trás das abstrações dos provedores de nuvem. Além disso, posso experimentar todos os tipos de serviços sem medo. Se eu cometer um erro, sem problemas, basta excluir a instância e tentar novamente.

Sinta-se à vontade para me contatar nas minhas redes sociais se quiser saber mais sobre minha experiência.

Kandarpa Galas
Autor
Kandarpa Galas
I’m a Data Engineer building Pata Pipelines