Saltar para o conteúdo

Minha Jornada Self-Hosted (Até Agora): Ou Como Aprendi a Parar de Me Preocupar e Amar Meu Raspberry Pi

Continuando a saga de self-hosted, acredito que agora encontrei os serviços mínimos que preciso para o presente. Depois de muita conversa com AI, leitura de tópicos no StackOverflow (sim, sou velho), discussões no Reddit e posts no Medium, consegui desenvolver boas habilidades em vários campos. Ah, também não posso deixar de comentar que esse hobby é caro, exige paciência e discussões estratégicas com a esposa sobre como esconder os fios que agora ocupam o rack da sala.

Minha principal preocupação sempre foi manter as coisas que eu preciso de forma segura, e foi aqui onde gastei a maior parte do meu tempo em estudo, tentativa e erro (muito erro). O meu YingYang interno era se mantinha serviços expostos na internet ou apenas em minha rede local. A segunda opção significava montar uma VPN para conseguir acessar tudo o que precisava, o que incluía mais uma camada de complicação que eu não tinha certeza se queria encarar.

Desde o primeiro post sobre selfhosted, fiz alguns investimentos em hardware. Comprei um switch semi gerenciável para separar algumas redes locais, para separar toda a parafernália que tenho entre IoT, “dispositivos smart” , computadores, servidores, e etc. O segundo item que comprei foi um desktop small form factor da HP (HP EliteDesk G4 SFF) para ser minha nuvem (NAS), hospedando serviços como NextCloud, Immich, Jellyfin e operando com TrueNas. Para a minha raspberry mantive esse website, meu serviço de filtragem de rede, uma VPN, uma instância do Grafana para meus sideprojects, um buscado (por que não?), um broker MQTT e meu servidor HTTPs para acessar tudo isso, tudo em container Docker para evitar poluir o Sistema Operacional da Raspberry.  

Mano, e a segurança?

Tentei primeiro deixar algumas coisas expostas, mas era muito difícil dormir tranquilo. Sempre pensando que algum chapéu colorido iria testar as minhas configurações (que, convenhamos, não foram feitas por um profissional). Ainda quando mantive as aplicações expostas, aprendi um pouco mais sobre a Cloudflare, configurar filtros de acesso por países (que não faz sentido porque qualquer um com VPN quebraria esse filtro), usar Zero-Trust e 2FA da Cloudflare e mais meia dúzia de configurações.

No começo parecia seguro. Configurei envio de email SMTP com uma conta que tenho no MailGun para 2FA, configurei Zero-Trust e alguns filtros, mas ainda assim para tudo isso funcionar, eu precisava bypassar meu firewall para acessar as aplicações. Isso parecia um ponto de falha esperando para acontecer. Depois de muita pesquisa, decidi manter a maioria das minhas aplicações locais com acesso via VPN, e apenas uma que eu compartilho com a minha família, exposta na internet mas com diversos filtros e configurações de segurança. Até porque preciso de um tempo para explicar a eles como funciona uma VPN sem que eles me olhem com cara de paisagem.

Tendo isso dito, vamos ver o que criei.

Investimentos em Hardware

Desde o primeiro post sobre self-hosted, fiz alguns investimentos em hardware. Comprei um switch semi gerenciável para separar algumas redes locais, organizando toda a parafernália que tenho entre IoT, “dispositivos smart”, computadores, servidores, e etc. O segundo item que comprei foi um desktop small form factor da HP (HP EliteDesk G4 SFF) para ser minha nuvem (NAS), hospedando serviços como NextCloud, Immich, Jellyfin e operando com TrueNAS.

Para a minha raspberry mantive esse website, meu serviço de filtragem de rede, uma VPN, uma instância do Grafana para meus side projects, um buscador (por que não?), um broker MQTT e meu servidor HTTPS para acessar tudo isso. Tudo em container Docker para evitar poluir o Sistema Operacional da raspberry.

O Stack da Raspberry Pi

Ghost

Já fiz post sobre ele, dá uma lida aqui: Building a Self-Hosted Blog: A Journey of Patience, Docker, and Coffee

PiHole + Unbound: Recuperando Meu DNS

A principal dor de cabeça foi montar a filtragem de rede e um resolvedor recursivo de DNS. Quis implementar isso para evitar que as minhas consultas de rede fossem para o fornecedor de internet e para outras empresas, como o Google, que utilizam isso para venda de dados. Pode parecer loucura, mas se alguém está ganhando dinheiro com o que eu gero, eu também quero ser remunerado. Caso contrário, eu faço por aqui porque hoje é possível.

O resolvedor que optei foi o Unbound. A ideia é que todas as requisições passem por ele, retorne o IP e fique tudo privado, incluindo DNS-Over-HTTPS (DoH). Configurar isso em Docker em uma raspberry foi um inferno. Tive que aprender a mexer nas configurações de rede do Linux como o /etc/hosts e /etc/resolv.conf, reencaminhamento de tráfego pelo roteador, abertura de portas e mais uma dúzia de pormenores por estar em Docker.

Com o Unbound configurado, subi o PiHole, que é o meu filtro de rede. É um programa incrível, onde posso colocar várias listas de bloqueio e tirar, em nível de rede, todos os anúncios, trackers, sites maliciosos, e mais uma porção de lixo. Além disso, eu uso ele como meu DHCP para ter mais controle sobre cada equipamento na minha rede, atribuindo IPs fixos e não dependendo unicamente do roteador da empresa de internet. Por ele também configuro meus endereços locais para conseguir acessar tudo.

VPN: O Portal para Casa

Uma das dúvidas que tinha era como eu conseguiria manter o meu acesso às coisas da minha rede local mesmo fora de casa. A solução foi uma VPN, mas essa VPN deveria ter obrigatoriamente aplicativos em iOS, Android, macOS e Windows, para que todos da minha família conseguissem acessar, inclusive eu.

Optei por configurar um Wireguard por ser opensource e base de várias outras VPNs, além de ter aplicativos para quase todas as plataformas. Uma das coisas que mais gostei, mesmo o aplicativo sendo bem simples, é a parte de ativação On-Demand, em que ativa automaticamente quando eu saio da minha rede local e desativa quando chego em casa. Foi bem tranquilo de configurar e usar.

Mas como queria complicar minha vida, tentei usar o NetBird como VPN, que me permitia ter um controle muito maior de acesso aos recursos que tenho, com várias configurações e peripécias. Mantive ele funcionando por 1 mês no lugar do Wireguard, mas achei muito trabalhoso manter e configurar, então desativei por ser overkill para o que precisava. Um dos principais pontos negativos foi o aplicativo para iOS sempre desconectar e ser muito bugado. Nunca sabia se estava conectado ou não, e não tinha a opção de conexão on-demand (o que acho que é coisa básica). Acho que quando eu escalar mais as minhas coisas em casa, precisarei rever esse ponto, mas por hora deixei inativo.

Servidor HTTPS: De NPM para Caddy

Finalizando essa parte chata e tediosa de rede, para conseguir prover acesso aos serviços, comecei com um NGINX Proxy Manager. É um excelente serviço, boa UI, bem simples de configurar e que usei por uns bons meses. Quando tentei usar o NetBird, esbarrei em algumas dificuldades com o NPM em redirecionamento de serviços em gRPC e outros protocolos mais novos. Acredito que a dificuldade foi por pouco conhecimento, mas nem com AI consegui resolver.

A solução foi ir para um outro serviço mais novo, tão robusto quanto e open source, que é o Caddy. Ao contrário do NPM, ele não tem UI, e toda a configuração é feita em um arquivo chamado Caddyfile. Obviamente tive uma curva de aprendizado, mas é um arquivo bem amigável e tranquilo de configurar. Além disso, é feito em Go e é basicamente esquecível de tão estável que é. Nele consegui configurar tudo o que precisava e ainda versionar em GitHub cada alteração que fazia. É graças a ele que você consegue ler esse texto agora.

Buscador Privado: SearXNG

Se eu já estava cavando fundo na parte de privacidade, acho que o que mais geramos de dados está no que pesquisamos no Google. A cada pesquisa que fazemos, alimentamos um modelo deles de interesse da nossa pessoa, e isso vira ads, comércio e etc. Por um tempo usei alguns outros buscadores privados como o Brave Search e o DuckDuckGo, mas lendo uns blogs descobri o SearXNG, que eu poderia também self-hostear. Achei incrível e decidi testar.

Ele tem um monte de configurações com relação a busca de conteúdo, configurações de cookies e coisas que nem sei usar ainda. Funciona perfeitamente bem, mas tem um ponto importante: eu não quero deixar isso público para qualquer um usar meu buscador, com perigo de derrubar tudo o que tenho por alta demanda. Ah, tem outro ponto importante: a desgraça do Safari não deixa usar buscadores customizados, apenas se usar na configuração de nova janela, o que resolve em partes. Então uso ele somente localmente e no Firefox.

Confesso que muitas vezes ele é subutilizado, mas é legal ter.

Grafana & Broker MQTT: Observabilidade para Nerds

Como queria me aventurar em observabilidade e também ter uma ferramenta de visualização de dados, fiz o deploy de um Grafana com Prometheus para testar meus projetos de IoT e ter mais visualização do estado da minha raspberry, como uso de CPU, memória, disco, gerar alertas e livrar minha cabeça de pequenas preocupações. Já havia usado Grafana anteriormente, mas não tinha ido tão fundo nas configurações, regras de alertas, integrações e mais outras facilidades que a ferramenta oferece.

Uma das coisas que estou analisando agora é a temperatura e umidade do meu apartamento, correlacionando o esforço que meu aquecedor a gás tem de fazer para chegar em uma temperatura de conforto. Esses aquecedores de grelha que ficam na parede são horríveis, gastam muito gás e levam mais de 6 horas para aquecer 2 graus no apartamento. Então meu próximo sonho é ter um split no apartamento.

Esse projeto é um ESP32, conectado ao meu broker Mosquitto self-hosted, enviando dados de um DHT22. O projeto está em MicroPython para testar até onde consigo criar algo com uma das linguagens menos performáticas em um hardware limitado.

O NAS: Onde a Mágica Acontece

NextCloud: Meu Império na Nuvem Pessoal

Eu sempre fui um jumper entre iOS e Android, e o que mais era complicado era o gerenciamento dos dados entre eles. Além de toda a minha incomodação com meus arquivos no Google Drive, o terrível gerenciamento de arquivos que o iCloud possui, e até os bugs do Proton Drive. Depois de alguns meses nos fóruns de self-hosted, li sobre o NextCloud. É uma cloud perfeita, com tudo o que o Google Drive oferece, de graça, open source e que eu poderia incluir no meu universo de aplicações.

Eu não consigo dizer o quão maravilhado fiquei com isso e foi a primeira aplicação que quis colocar no meu NAS. Ele tem Office, edição de documento online e colaborativo, calendário, contatos, notas, tudo privado, em um lugar só. Tem noção de quanto isso é valioso? Também tem aplicativo para todas as plataformas para fazer backup automático e é a aplicação que compartilho com a minha família.

Apesar de já estar configurado, com alguns arquivos de teste que subi, não estou usando 100% porque o disco do meu NAS é um disco antigo de notebook que eu tinha. Quero montar um RAID-1 inicialmente, e quero começar com discos de 8TB. O problema é que a AI está comendo todos os hardwares do mundo e um disco desses está quase €300, e estou postergando a compra disso.

Bem, mesmo sem o disco ideal, está estável, com acesso rápido e sem corromper nenhum arquivo. Obviamente os dados que estão aqui eu tenho backup.

Immich: Resgatando Minhas Fotos

Bem, o que mais além de arquivos damos de informação gratuita para treinar AI de Big Techs? Nossas fotos, obviamente. E aí eu pensei: bem, o NextCloud já tem uma seção de fotos e posso usá-la. Testei por um tempo e não gostei. Queria algo que tivesse um pouco mais de inteligência e que eu pudesse gerenciar minhas fotos com mais liberdade.

Então fui pesquisar e descobri o Immich, outro aplicativo mágico e absurdamente incrível que é idêntico ao Google Photos, privado e ainda conta com machine learning offline para identificar pessoas e organizar as fotos. Tudo o que o Google Photos tem, o Immich tem, sendo gratuito. Tem mapa que coloca as fotos de cada local organizadas por localização, remoção de duplicatas, revisor de arquivos grandes, compartilhamento de álbuns, aplicativos para todas as plataformas. É incrível e finalmente posso ter meu local privado, cross platform, para as minhas fotos.

Óbvio, que assim como o NextCloud, estou sem meu disco e mantenho ainda as fotos no iCloud e no Immich.

Jellyfin: A Substituição do Netflix (Trabalho em Progresso)

O último aplicativo que instalei e estou ainda aprendendo a mexer é o Jellyfin. A ideia é substituir o Netflix por ele, até porque €23 por mês é muito overkill para o que eu e minha esposa consumimos de Netflix.

Está vazio por hora. Ainda estou lendo as documentações para aprender a configurar e como usar, e também está pendurado naquele único disco no NAS que não quero mais estressar.

Conclusões

O mundo self-hosted me abriu os olhos do quanto a gente desconhece a internet e quantas coisas incríveis estão disponibilizadas gratuitamente, sendo mantidas por pessoas que usam seu tempo para contribuir para que esses projetos aconteçam. A comunidade do open source é incrível e sempre que possível contribuo para os projetos como forma de incentivá-los e que isso perpetue por muito tempo.

Não foi fácil chegar até esse nível. Tive que ler muita coisa, aprendi muita coisa, e cada dia mais me afundo no meu homelab e em que mais posso ter sem depender das Big Techs, apenas do meu conhecimento, curiosidade e comunidade. Óbvio que ter isso em casa reduz muito a comodidade de ter a infraestrutura do Google, ou a preocupação de que seus dados podem sumir se fizer alguma cagada, mas isso é o que me move.

Em breve mais atualizações.