59 pontos por GN⁺ 16 일 전 | 19 comentários | Compartilhar no WhatsApp
  • Resumo de um caso de montagem de homelab que combina hardware compacto e tunelamento cloud gratuito para operar por conta própria diversos serviços, como mídia, IA, fotos e monitoramento
  • Começou com um OrangePI 5, depois fez upgrade para um GMKTec NUC (32GB de RAM, 1TB NVMe) e hoje roda uma estrutura híbrida em conjunto com uma máquina virtual da Hetzner
  • Todos os serviços rodam em contêineres Docker, com IaC baseado em papéis (roles) do Ansible e criptografia com SOPS para garantir reprodutibilidade e segurança
  • O acesso externo é fornecido via Cloudflare Tunnel, sem abrir portas de entrada, enquanto Traefik + Authentik cuidam do proxy reverso e da autenticação SSO
  • Com um custo operacional de cerca de 7 euros por mês, mantém a propriedade dos dados sem dependência de fornecedor e valoriza mais aprendizado e diversão do que perfeição

Configuração de hardware

  • No início usava um OrangePI 5, mas migrou para um GMKTec NUC por problemas de gerenciamento de energia e de armazenamento conectado por USB
    • Equipado com CPU AMD Ryzen 7 5700U, 32GB de RAM e 1TB de armazenamento NVMe M2
    • Com 2 slots M2, tanto RAM quanto disco podem ser expandidos
    • O funcionamento é muito mais estável em operação contínua ao longo do ano
  • Serviços que precisam rodar 24/7 ficam separados em uma máquina virtual da Hetzner
  • Ainda não há um NAS montado, e os dados importantes são sincronizados com Syncthing
    • Há interesse em Ugreen NAS, Ubiquiti etc., mas por enquanto a fase atual é curtir mais o processo de mexer diretamente em tudo

Princípios de operação

  • Infrastructure-as-Code: automatizar e salvar em código o máximo possível de configurações com scripts ou plataformas de gerenciamento, como Ansible
  • Reprodutibilidade (Reproducibility): em caso de falha ou troca de máquina, a infraestrutura deve poder ser reimplantada e reconfigurada rapidamente, sem deixar resíduos ao remover serviços experimentais
  • Facilidade de uso: como é um projeto de hobby, a preferência é por abordagens padrão e familiares

Sistema operacional

  • Usa a distribuição Debian instalada diretamente em bare metal
  • Também considerou NixOS (builds reprodutíveis) e Talos (cluster k8s), mas deixou de lado por falta de tempo e pelo peso de administrar workloads de k8s em uma única máquina
  • Também julgou que um hipervisor como ProxMox era desnecessário, então não utiliza

Arquitetura de rede

  • Adotou Cloudflare Tunnel para exposição externa
    • O servidor cria uma conexão apenas de saída com a rede da Cloudflare, então não é necessário abrir portas de entrada no firewall
    • Depois de configurar o túnel, o tráfego bidirecional passa por ele
    • Ao conectar o domínio ao DNS da Cloudflare, é possível mapear por subdomínio portas e protocolos específicos da máquina, como HTTP/HTTPS/TCP
    • É oferecido de forma totalmente gratuita e considerado uma alternativa melhor que ngrok
  • A abordagem com IP fixo (IP público) traz custo e risco de segurança, e há alternativas como Tailscale Funnel, mas o Cloudflare Tunnel foi escolhido como a solução mais simples
  • Traefik

    • Proxy reverso open source que reconhece Docker nativamente, o que ajuda na automação do servidor
    • Basta aplicar os rótulos corretos aos contêineres para que ele detecte o roteamento automaticamente, sem precisar editar arquivos de configuração separados
  • Authentik

    • Plataforma de IdP (Identity Provider) e SSO
    • As configurações podem ser salvas como blueprints (arquivos YAML), permitindo seguir o princípio de IaC
    • Usa middleware ForwardAuth para redirecionar ao login quando alguém tenta acessar serviços sensíveis

Ferramentas de operação

  • Ansible

    • Ferramenta de automação de infraestrutura agentless (só precisa de SSH), com configuração baseada em YAML e muitos exemplos disponíveis
    • Cada serviço é definido em unidades de role: tasks, defaults, handlers, templates e files
      • tasks: definem as ações a executar
      • defaults: valores padrão como tag da imagem, porta e nome do contêiner
      • handlers: reinício do contêiner quando há mudança de configuração
      • templates: renderização de arquivos .env e config.yaml com base em Jinja2
      • files: configurações estáticas e scripts
    • Etapas comuns na implantação de um serviço:
      • criar recursos compartilhados (rede, volumes) → criar schema e usuário no PostgreSQL → renderizar templates de configuração → fazer pull da imagem Docker → iniciar o contêiner (incluindo variáveis de ambiente e configuração de logs) → provisionar configuração de autenticação no blueprint do Authentik → configurar o Cloudflare Tunnel, se necessário
    • Entre as desvantagens estão a documentação enorme, a estrutura DSL repetitiva e boilerplate, mas o uso continua por familiaridade
    • Os playbooks são executados manualmente, sem integração com GitOps, o que por enquanto é suficiente
  • SOPS (Secrets OPerationS)

    • Criptografa apenas os valores em YAML/JSON, mantendo a estrutura de chaves intacta para que o diff no Git continue útil
    • Usa o backend de criptografia age — uma ferramenta que “simplificou a criptografia sem PGP”
    • Em cada host, separa um arquivo de configuração normal (homelab.yaml) de um arquivo criptografado (homelab.sops.yaml)
    • Workflow:
      • gerar a chave com age-keygen → editar o arquivo criptografado com o comando sops (o conteúdo é descriptografado no editor e recriptografado automaticamente ao salvar) → ao rodar o Ansible, ocorre descriptografia automática
      • Como o Ansible oferece suporte nativo a SOPS, não são necessários módulos nem flags extras
    • Vantagem em relação ao Ansible Vault: a criptografia é por valor, não do arquivo inteiro, então o diff continua aproveitável
    • Limitação: é preciso compartilhar a chave privada do age com segurança entre os membros da equipe, e, se a chave for perdida, os segredos não poderão ser recuperados
      • Em um homelab administrado por uma única pessoa, é um nível adequado de complexidade

Serviços em execução

  • Gerenciamento de mídia: stack *arr

    • Prowlarr: gerenciador de indexadores que envia resultados de busca para os outros serviços *arr
    • Radarr: gerenciador de coleção de filmes — ao indicar um filme desejado, faz busca, download e organização automaticamente
    • Lidarr: a mesma ideia para música, integrado ao Navidrome
    • Bazarr: download automático de legendas
    • Tidarr: serviço para manter músicas do Tidal armazenadas localmente
    • Transmission: cliente BitTorrent (porta 9091) que processa todas as solicitações de download dos serviços *arr
    • Todos os serviços ficam atrás da autenticação do Authentik
    • Usa diretório compartilhado de downloads (/mnt/data/docker/transmission/downloads) e PUID/PGID 1000 para economizar espaço em disco com hardlinks
    • Exemplo de fluxo: adicionar um filme no Radarr → buscar via Prowlarr → o Transmission faz o download → o Radarr move para a biblioteca de mídia → assistir no Jellyfin
  • Consumo de mídia

    • Jellyfin: servidor de mídia open source que, ao contrário do Plex, não exige login em nuvem. Usa autenticação própria e suporta vários dispositivos, incluindo app para Android TV
    • Navidrome: servidor de streaming de música com suporte à API Subsonic, integrado a apps móveis como DSub2000. O Lidarr abastece a pasta da biblioteca musical
    • Calibre Web: gerenciador e leitor de biblioteca de ebooks
      • O banco de metadados gerenciado no app desktop do Calibre no laptop é sincronizado com o servidor via Syncthing
      • Via API OPDS, os livros podem ser acessados em vários leitores
  • IA e chat

    • LibreChat: interface de chat de IA self-hosted que pode se conectar a vários provedores de LLM, como OpenAI, Anthropic e Ollama local
      • Suporte a RAG (Retrieval Augmented Generation)
      • Exige MongoDB (histórico de chat), PostgreSQL + pgvector (embeddings) e MeiliSearch (busca full-text), então é uma configuração relativamente pesada
      • Como o Claude Code é mais acessível, o uso tem sido baixo e a remoção está sendo considerada
  • Fotos e arquivos

    • Immich: alternativa self-hosted ao Google Photos
      • Backup automático de fotos do celular, reconhecimento facial, organização de álbuns e extração de metadados EXIF
      • Usa PostgreSQL próprio (com pgvector) e um contêiner de machine learning (classificação de imagens), e atualmente armazena milhares de fotos
    • Syncthing: sincronização de pastas entre laptop, celular e servidor, com sincronização P2P direta sem intermediação de nuvem
      • Sincroniza Obsidian Vault, documentos e outros conteúdos entre vários dispositivos e Android
    • MinIO: armazenamento de objetos compatível com S3, usado em testes ou aplicações que precisam da API S3
  • Leitura e informação

    • Miniflux: leitor minimalista de feeds RSS com assinatura de cerca de 50 blogs e fontes de notícias
      • Suporte a atalhos de teclado e feed em ordem cronológica, sem ordenação por algoritmo
  • Infraestrutura e autenticação

    • Traefik: proxy reverso que roteia tráfego para contêineres Docker com base no hostname. Ao iniciar um contêiner, ele o detecta automaticamente se os rótulos corretos estiverem presentes
    • Authentik: SSO e provedor de identidade. Protege serviços com middleware ForwardAuth e permite gerenciar toda a configuração de autenticação salvando blueprints no Git
    • PostgreSQL: servidor de banco de dados compartilhado; Authentik, Miniflux, Immich e LibreChat, entre outros, compartilham uma única instância em vez de usar bancos separados, economizando recursos e facilitando backups
    • Redis: cache compartilhado e armazenamento de sessão, usado principalmente no gerenciamento de sessões e filas de trabalho de serviços como o Authentik
  • Software personalizado

    • Highlight Exporter: serviço em Go que extrai destaques de leitura do KOReader, Readwise e Apple Books e os converte em Markdown compatível com Obsidian
    • Telegram Assistant: bot do Telegram que oferece várias automações e acesso a IA dentro de chats em grupo. É o projeto que mais reescreve para testar novas tecnologias
    • Chess-blunder trainer: webapp que importa partidas do chess.com ou lichess.com, analisa com Stockfish e seleciona lances errados para treino, com open source previsto em breve

Monitoramento

  • Beszel

    • Solução leve de monitoramento com configuração simples, operação fácil e bons padrões
    • A stack Grafana foi considerada exagerada e complexa demais para visualizar estatísticas básicas do sistema operacional em duas máquinas
    • Projetos similares, como Glances, também pareceram exigir ajuste excessivo
    • O Beszel cobre 120% do necessário e é fácil de instalar
  • Statsping

    • Ferramenta minimalista de ping de serviços para monitoramento detalhado de recursos específicos
    • Envia pings para endpoints definidos, informa latência e disponibilidade, e notifica por vários meios quando há falha
    • É hospedado em uma máquina na nuvem para continuar funcionando mesmo em caso de falha do homelab, sem overhead adicional de manutenção

O que ainda falta hoje

  • Backup

    • Apesar de reconhecer a importância do tema, atualmente não há backup implementado
    • Mais do que perda de filmes, músicas ou fotos, o que precisa de backup são os bancos de dados de cada serviço, mas ainda não foi decidido qual solução usar (como restic) nem a configuração de hardware adequada
  • Configuração RAID

    • Os dados de mídia e o sistema coexistem em um único drive M2 NVMe
    • Falta espaço físico para um servidor NAS ou uma máquina separada de backup
  • Independência da nuvem

    • A disponibilidade dos recursos depende fortemente da infraestrutura do Cloudflare Tunnel
    • Se houver indisponibilidade da Cloudflare, o acesso à infraestrutura também para, e há planos de investir em alternativas no futuro
  • IaC e automação completos

    • Os playbooks do Ansible são executados manualmente, sem pipeline de CI nem provisionamento automático
    • Por enquanto, não parece haver grande vantagem em migrar para GitOps

Eficiência de custo e conclusão

  • Gasta cerca de 7 euros por mês com a máquina virtual da Hetzner, e o consumo elétrico do home server é estimado como muito baixo
  • Adicionar um novo serviço ou alterar configurações leva cerca de 20 a 30 minutos, com boa parte delegada ao Claude Code e apenas uma revisão rápida antes do deploy
  • O tempo total investido no projeto é estimado em 100 a 150 horas ao longo de vários anos
  • Os dados permanecem sob posse própria com o mínimo de dependência de fornecedor, sem risco de perda por mudança repentina de termos de serviço, feeds algorítmicos ou fusões e aquisições
  • O objetivo não é um sistema perfeito, mas entender infraestrutura e se divertir; cada serviço implantado, role do Ansible escrita e segredo criptografado tem valor de aprendizado
  • Para começar um homelab, o importante é começar pequeno e não pensar demais

19 comentários

 
dongho42 16 일 전

Eu usava Tailscale e agora uso Cloudflare Tunnel, e gosto muito. Embora os casos de uso sejam um pouco diferentes, no meu caso foi difícil usar o Tailscale porque ele entrava em conflito com o AdGuard.

 
minhoryang 15 일 전

Não basta definir o DNS pai do Tailscale como o AdGuard?

 
click 14 일 전

Não é o AdGuard Desktop, mas o AdGuard Mobile funciona como uma VPN local, então não dá para usar os dois juntos.

 
dongho42 14 일 전

Parece que o conflito aconteceu na parte de VPN, não de DNS.

 
kw9101 16 일 전

Recentemente, enquanto tentava de tudo para fazer a MBC Radio tocar no Google Nest,
acabei usando o Cloudflare Tunnel. É um ótimo serviço, daqueles que fazem você se perguntar por que é grátis.

 
hulryung 15 일 전

Parece interessante. Conta mais pra gente.

 
toida 15 일 전

Estou usando o free tier da Oracle Cloud. Com 4 vCPU, 24 GB de RAM e 200 GB, e por ser baseado em ARM às vezes há algumas incompatibilidades, mas tirando isso é ótimo como brinquedo.

 
click 15 일 전

Na nova operadora que assinei, as portas 80 e 443 estavam bloqueadas, então estou contornando isso com o Cloudflare Tunnel.
Se não fosse isso, eu quase teria pagado a multa e trocado de operadora.

 
recast7838 15 일 전

Qual operadora você usa que está com as portas bloqueadas?

 
click 14 일 전

Para ser exato, não fui eu que bloqueei diretamente; o correto é dizer que o roteador da operadora é que impedia o port forwarding nas portas 80 e 443.
Quando passei a usar um roteador de terceiros para fazer port forwarding, eles reduziram às escondidas para 100 Mbps a velocidade do plano de 1 G que eu tinha contratado.
Enquanto procurava uma alternativa, acabei vendo que a solução mais limpa era simplesmente colocar tudo no cf tunnel.

 
keepworking 14 일 전

Verifique se o roteador de terceiros tem uma função para alterar o endereço MAC e tente trocá-lo pelo do roteador da operadora; acho que isso também pode permitir contornar a limitação.

 
click 13 일 전

Depois de configurar o cf tunnel, parou completamente de acumular logs do fail2ban nas portas 80 e 443, então removi isso de vez e nunca mais pensei no assunto.
Comprei o próprio domínio pela Cloudflare, configurei o SSO também na Cloudflare e bloqueei o uso dos serviços para quem não passar pelo SSO, então deixei a Cloudflare tankar todos os ataques no meu lugar.
Como ali só entram serviços que eu uso sozinho, essa configuração já é mais do que suficiente na prática.
Se a Cloudflare cair, decidi aceitar esse nível de risco.

 
antegral 15 일 전

Pelo que ouvi, costuma acontecer de o roteador fornecido pela operadora bloquear o port forwarding.

Dá para liberar instalando um roteador de terceiros, mas... como você disse, o cf tunnel já vem até com um WAF básico e ainda pega a região ICN, então realmente não há muito motivo para não usar.

 
bus710 15 일 전

Estou rodando tarefas pequenas no meu homelab com o n8n, conectado ao Anthropic, Telegram, armazenamento e outras coisas, e tem sido bem prático porque os conectores são bem feitos.

 
ndrgrd 15 일 전

Estou usando um dispositivo de baixo consumo da série Ryzen 8000 como servidor doméstico 24/7.
No dia a dia, uso como NAS e, somando contêineres e serviços, rodo cerca de 70 no total; o consumo de energia nem chega a 10 kWh por mês. Sai por algo em torno de 2.000 won.

 
kimjoin2 16 일 전

Cloudflare Tunnel
Adoro demais.

 
kimjoin2 16 일 전

Alguns que demoram para responder às vezes acabam soltando um 502, mas
é de graça, né~

 
j2sus91 16 일 전

Eu também uso túnel de cloud e é muito bom.
Normalmente, quando há um roteador físico, em muitos casos o IP externo fica no roteador.

Usando o Cloudflare Tunnel, até um IP interno
pode ficar acessível externamente por meio do registro de domínio.~

E ainda por cima é grátis,

 
GN⁺ 16 일 전
Comentários do Hacker News
  • Isso é realmente legal, mas Cloudflare Tunnel não deve ser usado para streaming de mídia
    Pelos termos de uso isso é proibido, ou no mínimo não é o uso pretendido. O serviço pode acabar sendo bloqueado
    Em vez disso, é melhor usar Wireguard ou Tailscale
    Artigo relacionado

    • Por isso eu também aluguei um VPS de 5 dólares por mês e conectei via Tailscale
      Também é ótimo para sair do CGNAT, e para uma opção com GUI recomendo o Nginx Proxy Manager
    • Fico curioso se o Tailscale Funnel já passou a oferecer suporte a domínio personalizado
      No momento estou migrando para a combinação rathole + traefik. Fiquei testando até de madrugada e acabei virando a noite
    • O Cloudflare Tunnel expõe publicamente o serviço, enquanto Wireguard/Tailscale são VPNs
      O Tailscale (Headscale não) oferece um recurso de proxy reverso chamado Funnel, mas não permite usar domínio próprio
      Como alternativa ao CF Tunnel, o mais parecido é o Pangolin, e também há como fazer self-host do NetBird com função de proxy reverso
    • Pelo que eu me lembro, os termos da CF proibiam cache de mídia, não o streaming em si
  • Isso parece menos uma fantasia de “independência” e mais uma fantasia de virar administrador de sistemas

    • Eu gosto muito de não precisar me preocupar se vou perder acesso às músicas de que gosto por causa de licenciamento
    • Independência vem com responsabilidade. Não dá para separar uma coisa da outra
    • Por exemplo, no r/homelab há relatos de pessoas que montaram seu próprio NAS para guardar as fotos da esposa em vez de usar Google Photos
      Mas, sinceramente, pagar 5 dólares por mês para Google ou Apple parece uma escolha muito melhor. Fico me perguntando se ao menos fazem backup 3-2-1
  • Seria ótimo se existisse um grupo de voluntários na biblioteca local operando esse tipo de serviço
    Parece uma ótima oportunidade para crianças aprenderem a operar serviços, e para pessoas com menos familiaridade técnica aproveitarem open source

    • Mas o problema sempre é o suporte
      Ninguém quer ficar responsável pelo atendimento ao usuário. Por isso a maioria dos serviços funciona num modelo em que se paga para poder dizer: “procure o suporte deles”
  • Eu uso fnox para gerenciamento de segredos
    Ele suporta muito mais backends que sops, e sinto que a DX (experiência do desenvolvedor) também é melhor

    • Eu faço self-host do Infisical
    • Parece interessante. Estou usando SOPS agora, mas vale considerar como alternativa
  • Existe essa ideia de “fantasia do homem independente e preparado”, mas no fim ainda tem a Cloudflare no meio, então não é independência total

  • Cloudflare Tunnel é uma ferramenta realmente excelente
    Antes eu hospedava diretamente com o IP de casa, mas agora gerencio tudo com muito mais facilidade usando cloudflared
    Também fiquei menos preocupado com firewall ou invasões de rede
    Meu homelab agora é gerenciado por scripts bash idempotentes escritos pelo Claude
    Sinto que dependências ficam complexas por causa da vontade das pessoas de alterar propriedades, e é essa interação que cria bugs
    Então expressar tudo com scripts bash simples acaba sendo mais estável
    No momento uso systemd + contêineres podman, e deixei uma página de notas para meu próprio registro

    • Você não tem preocupações com privacidade pelo fato de a Cloudflare poder ver todos os dados?
      Queria saber se acha que a conveniência prática compensa essa desvantagem
    • Queria entender qual é a vantagem do Cloudflare Tunnel em comparação com simplesmente usar Wireguard
  • Não entendo por que todo mundo coloca isso na internet pública. Não seria só usar Tailscale?

    • É conveniente poder só instalar o app e definir uma URL pública, sem precisar que todo mundo esteja no mesmo tailnet
    • Tailscale é uma solução exagerada. Basta abrir as portas 80 e 443 e configurar corretamente a autenticação no proxy reverso que já fica seguro o suficiente. Opero assim há anos
    • Mas há casos em que usuários externos, como numa smart TV, precisam acessar o Jellyfin sem poder instalar Tailscale
  • Parece que o autor confundiu homelab com self-hosting
    Self-hosting é operar serviços de uso real; homelab é um ambiente de experimentação e aprendizado
    Eu não coloco meus dados ou serviços pessoais no homelab. É um espaço que pode quebrar

  • Já vi na Ucrânia uma empresa SaaS realmente processando tráfego de produção dentro de um bunker subterrâneo

  • Fiquei chocado ao ver que só as assinaturas de streaming davam 1.300 dólares por ano
    Então comprei um NAS e discos de 36 TB, montei a stack arr e cancelei todas as assinaturas
    A família inteira fez o mesmo e agora estamos economizando de 5 a 6 mil dólares por ano
    O NAS deve se pagar em poucos meses, e depois disso é tudo lucro
    Graças ao Claude Code, a configuração também ficou pronta em poucas horas
    Além disso, ficou muito mais agradável porque passei a ter uma curadoria de conteúdo sem ruído da Netflix ou Hulu

    • Outra grande vantagem é a possibilidade de fazer streaming em bitrate alto
      Ripando Blu-rays 4K e transmitindo em casa, a qualidade de imagem fica muito superior à dos serviços comerciais
    • Eu uso uma abordagem híbrida. Mantenho as assinaturas baratas, mas vejo a melhor qualidade sem anúncios no meu próprio servidor de mídia
      Hoje sinto que o custo-benefício dos serviços de streaming está no fundo do poço. Mesmo planos caros muitas vezes ficam limitados a 1080p
    • Fico curioso se isso é legal. A ideia é evitar upload?
    • Ou então dá para não gastar nem dinheiro nem tempo e simplesmente sair do vício em consumir conteúdo para encontrar outro hobby