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 #
- 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 #
- Instalei
VPN
para poder acessar de fora da minha rede doméstica. Usei oTailscale
. Com ele, você pode se comunicar com seu nó de servidor como se estivesse na sua rede local. - Hospedei um
Reverse Proxy
para que eu pudesse acessar meus serviços usando um nome de domínio, sem ter que lembrar oIP
e aPORTA
de cada serviço que hospedo. Uso oNginx Proxy Manager
. 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.