<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Hiago Moreira</title>
    <description>The latest articles on DEV Community by Hiago Moreira (@hiagoscierry).</description>
    <link>https://dev.to/hiagoscierry</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1144660%2F02248881-c09c-4756-b0ba-bfc3b6c33ba5.jpeg</url>
      <title>DEV Community: Hiago Moreira</title>
      <link>https://dev.to/hiagoscierry</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hiagoscierry"/>
    <language>en</language>
    <item>
      <title>Melhorando meu Homelab aos poucos</title>
      <dc:creator>Hiago Moreira</dc:creator>
      <pubDate>Mon, 19 Oct 2026 00:20:09 +0000</pubDate>
      <link>https://dev.to/hiagoscierry/my-new-story-44ag</link>
      <guid>https://dev.to/hiagoscierry/my-new-story-44ag</guid>
      <description>&lt;p&gt;Há pouco mais de um ano, eu não tinha nada além de uma VPS. Hoje tenho um mini PC dedicado rodando vários laboratórios isolados e estou planejando um cluster. No meio do caminho, o meu "lab" virou staging, depois produção, e um restart bobo derrubou serviços que clientes usavam.&lt;/p&gt;

&lt;p&gt;Este texto conta essa evolução fase por fase. Não é um tutorial, é um relato com os erros e as lições de quem foi montando as coisas aos poucos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fase 1: uma VPS e muita curiosidade
&lt;/h2&gt;

&lt;p&gt;Tudo começou com uma VPS daquelas de custo-benefício, de uma marca bem conhecida justamente por isso. E o custo-benefício é bom mesmo. Ela é fácil de configurar, fechar as portas é tranquilo e expor uma aplicação é basicamente apontar o domínio e pronto.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;VPS (Virtual Private Server)&lt;/strong&gt; é uma máquina virtual alugada dentro de um servidor físico de um provedor. Você tem root, IP público e faz o que quiser, mas divide o hardware com outros clientes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;No começo eu subi coisas que, sinceramente, não faziam muito sentido. Eu só queria ver funcionando. Com o tempo elas passaram a fazer sentido:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;n8n&lt;/strong&gt;, para automações e workflows;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Portainer&lt;/strong&gt;, para gerenciar os containers Docker por uma interface web;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Traefik&lt;/strong&gt;, como reverse proxy na frente de tudo.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Depois de um tempo, troquei o Traefik pelo &lt;strong&gt;nginx&lt;/strong&gt;. O Traefik é muito bom no modelo de descobrir os serviços sozinho, via labels nos containers, mas para o meu cenário eu queria outra coisa: configurar tudo em um arquivo só e apontar as portas. Para mim, essa centralização foi a melhor coisa da migração. Bato o olho num arquivo e sei exatamente o que está exposto e para onde.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;  &lt;span class="k"&gt;upstream&lt;/span&gt; &lt;span class="s"&gt;api&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kn"&gt;server&lt;/span&gt; &lt;span class="nf"&gt;127.0.0.1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;upstream&lt;/span&gt; &lt;span class="s"&gt;frontend&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kn"&gt;server&lt;/span&gt; &lt;span class="nf"&gt;127.0.0.1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;8080&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="kn"&gt;server_name&lt;/span&gt; &lt;span class="s"&gt;exemplo.com&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

      &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Host&lt;/span&gt;            &lt;span class="nv"&gt;$host&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Real-IP&lt;/span&gt;       &lt;span class="nv"&gt;$remote_addr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Forwarded-For&lt;/span&gt; &lt;span class="nv"&gt;$proxy_add_x_forwarded_for&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

      &lt;span class="c1"&gt;# /api/... -&amp;gt; api (sem o prefixo /api)&lt;/span&gt;
      &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="n"&gt;/api/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="kn"&gt;proxy_pass&lt;/span&gt; &lt;span class="s"&gt;http://api/&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;

      &lt;span class="c1"&gt;# Todo o resto -&amp;gt; frontend&lt;/span&gt;
      &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="n"&gt;/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="kn"&gt;proxy_pass&lt;/span&gt; &lt;span class="s"&gt;http://frontend&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Fase 2: o lab virou staging
&lt;/h2&gt;

&lt;p&gt;A coisa mudou quando comecei a servir aplicações de verdade nessa VPS. Ela deixou de ser só um lab e passou a ser um ambiente de &lt;strong&gt;staging&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;O problema é que esse staging morava ao lado de aplicações instáveis e inconstantes: experimentos, serviços de teste, coisas que eu subia e esquecia. Tudo na mesma máquina, dividindo CPU, memória e o mesmo Docker.&lt;/p&gt;

&lt;p&gt;Na época, isso não me incomodou tanto. Foi aprendizado: eu estava vendo na prática por que ambientes existem separados.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fase 3: o staging virou produção
&lt;/h2&gt;

&lt;p&gt;Um ano depois, aquele lab já não era lab nem staging. &lt;strong&gt;Era produção.&lt;/strong&gt; E isso não foi uma decisão planejada, foi algo que simplesmente aconteceu: aplicações que começaram como teste passaram a ter gente dependendo delas.&lt;/p&gt;

&lt;p&gt;E aí veio o aviso que eu precisava. Descobri que serviços que alguns clientes usavam ficaram fora do ar por causa de um &lt;strong&gt;restart da VPS&lt;/strong&gt;. Não foi um ataque nem um bug complexo, foi um restart. Como tudo dividia a mesma máquina, qualquer manutenção ou experimento afetava todo mundo.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Descobri que emm SRE, isso tem nome: &lt;strong&gt;blast radius&lt;/strong&gt;, ou raio de explosão. É o tamanho do estrago quando algo dá errado. Ao misturar teste e produção na mesma máquina, o blast radius de qualquer mudança passa a ser &lt;em&gt;tudo&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A solução foi fazer uma limpeza. Removi as aplicações inconstantes e os serviços de teste que estavam lá só por estar. A VPS passou a ter um papel só: rodar o que é produção.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fase 4: um mini PC e os microlabs
&lt;/h2&gt;

&lt;p&gt;Só que eu ainda precisava de um lugar para testar. E, apesar de a hospedagem ter um preço realmente atrativo, decidi investir em hardware próprio: um &lt;strong&gt;Lenovo M710q&lt;/strong&gt;, um mini PC com &lt;strong&gt;i3 de 6ª geração e 16 GB de RAM&lt;/strong&gt;, cerca de duas vezes mais potente que a VPS que eu usava.&lt;/p&gt;

&lt;p&gt;Colocando lado a lado o que paguei em cada um:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;VPS&lt;/th&gt;
&lt;th&gt;Lenovo M710q&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Preço&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;R$ 1.055&lt;/td&gt;
&lt;td&gt;R$ 1.300&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CPU&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2 vCPUs&lt;/td&gt;
&lt;td&gt;i3 6ª geração (2 núcleos / 4 threads)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;RAM&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;8 GB&lt;/td&gt;
&lt;td&gt;16 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Disco&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;100 GB NVMe&lt;/td&gt;
&lt;td&gt;240 GB NVME + 512 GB SSD SATA&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Rede&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;8 TB de banda/mês, IP público&lt;/td&gt;
&lt;td&gt;Internet de casa&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;R$ por GB de RAM&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~R$ 132&lt;/td&gt;
&lt;td&gt;~R$ 81&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;R$ por thread&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~R$ 528&lt;/td&gt;
&lt;td&gt;R$ 325&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;vCPU&lt;/strong&gt; é uma CPU virtual: em geral corresponde a &lt;strong&gt;uma thread&lt;/strong&gt; de um processador físico que o provedor divide entre vários clientes. Por isso a comparação justa é vCPU × thread, e não vCPU × núcleo.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Por cerca de 23% a mais, tenho o dobro de RAM e o dobro de threads, e o hardware é só meu, sem vizinhos disputando CPU. Em compensação, a conta de luz e a internet passam a ser minhas, e não existe IP público nem datacenter por trás. Por isso a VPS continua sendo a casa da produção.&lt;/p&gt;

&lt;p&gt;A estratégia, então, foi ter &lt;strong&gt;microlabs&lt;/strong&gt;: uma VM aqui, outra ali, tudo gerenciado pelo &lt;strong&gt;Proxmox&lt;/strong&gt;. E, cara, está sendo sensacional.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Proxmox VE&lt;/strong&gt; é um hypervisor open source: você instala direto no hardware e ele vira uma plataforma para criar e gerenciar máquinas virtuais (KVM) e containers Linux (LXC) por uma interface web. Na prática, é como ter uma mini cloud em casa. Cada lab fica isolado na sua própria VM, e se um quebrar, os outros nem percebem.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Esse isolamento é exatamente a lição da fase 3, agora aplicada no lab. Posso quebrar uma VM à vontade, restaurar um snapshot e seguir em frente.&lt;/p&gt;

&lt;h3&gt;
  
  
  O mundo self-hosted
&lt;/h3&gt;

&lt;p&gt;Com o Proxmox, descobri um mundo de serviços mantidos pela comunidade self-hosted. Alguns que estou usando:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gitea&lt;/strong&gt;: um servidor Git leve, tipo um GitHub próprio, para os meus repositórios;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pi-hole&lt;/strong&gt;: um servidor DNS para a rede de casa que bloqueia anúncios e rastreadores para todos os dispositivos;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Uptime Kuma&lt;/strong&gt;: um monitor de disponibilidade que avisa quando algum serviço cai. Olhando para trás, era exatamente o que teria me avisado do downtime da fase 3 antes de um cliente perceber.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Batendo nos limites
&lt;/h3&gt;

&lt;p&gt;Rodar as coisas em casa também me fez enxergar limites que na VPS eu não via. Com esses serviços rodando e a demanda que veio vi de perto o gargalo: workers tentando rodar um pipeline meu e a minha rede local reduzida a zero.&lt;/p&gt;

&lt;p&gt;Não pense quer era uma pipeline complexa, era justamente para testar o build de uma api nodejs expondo hello world. Ou seja um arquivo e suas dependencias.&lt;/p&gt;

&lt;p&gt;Num provedor, esses limites ficam escondidos atrás de um painel. Em casa, você sente na pele, e aprende muito mais com isso.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que eu aprendi até aqui
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ambientes misturados viram um problema quando ninguém está olhando.&lt;/strong&gt; Lab vira staging, staging vira produção, e você só percebe quando algo cai.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Produção merece máquina própria&lt;/strong&gt;, ou pelo menos isolamento de verdade. Um restart não pode derrubar cliente.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitoramento não é opcional&lt;/strong&gt; quando alguém depende do serviço. Descobrir um downtime depois é pior do que ser avisado na hora.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hardware próprio ensina o que a cloud abstrai&lt;/strong&gt;: CPU, memória e rede são finitos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Um passo de cada vez funciona.&lt;/strong&gt; Nada disso foi planejado desde o início, e tudo bem.
## Próximo passo: um cluster&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O passo inicial foi a VPS, e hoje tenho um PC dedicado a isso. O próximo é montar um &lt;strong&gt;cluster de 2 ou 3 nodes&lt;/strong&gt; e ver o que consigo fazer.&lt;/p&gt;

</description>
      <category>homelab</category>
      <category>selfhosted</category>
      <category>devops</category>
      <category>proxmox</category>
    </item>
  </channel>
</rss>
