Sobre o projeto

Um repositório de homelab pessoal que trata todo o cluster como infraestrutura-como-código. O stack roda em k3s, com playbooks, roles e inventário do Ansible como a fonte da verdade editável; um diretório Docker Compose renderizado existe apenas no host Raspberry Pi. O repositório documenta que uma migração do Docker Compose para k3s foi concluída em 14-08-2026, quando o Docker foi desinstalado do nó do servidor principal, e o registro fatia por fatia é mantido em uma pasta de arquivo como histórico. Três hosts são descritos. daniel-box é o control plane do k3s e executa quase todas as cargas de trabalho, incluindo o edge Traefik, SSO Authelia e emissor OIDC, DNS Pi-hole, armazenamento Longhorn, CrowdSec e um endpoint público WireGuard; o Ansible roda nele. daniel-server é um nó agente k3s com iGPU Intel usada para transcodificação Jellyfin/Tdarr, armazenamento LVM e manipulação de desligamento UPS/NUT. daniel-pi é o único host Docker restante, mantido apenas na LAN, executando uma segunda instância do WireGuard mais um pequeno stack de utilitários. O Ingress é centralizado no Traefik, roteando através de CRDs IngressRoute, com o Authelia controlando rotas protegidas via middleware forward-auth e emitindo tokens OIDC para apps que os suportam. O Cloudflare faz o proxy de hostnames públicos, enquanto nomes locais são resolvidos pelo Pi-hole na LAN. O README observa que a segmentação de rede não é aplicada genericamente: apenas algumas roles definem NetworkPolicies e, onde as políticas existem, apenas regras de ingress são aplicadas pelo CNI do cluster. O deployment é dividido em um play de Docker e um play de k8s, ambos impulsionados pela containers_list de cada host. O play de Docker resolve um grafo de dependências usando filtros toposort personalizados e declarações upstream meta/deps.yml por role, para que as dependências subam primeiro e execuções marcadas puxem dependências não atendidas. O play de k8s faz o toposort de roles e deriva arestas para o Traefik (para instalação de CRD) e Authelia (para middleware) a partir dos próprios templates de role, com um depends_on explícito para arestas que nenhum template carrega. Os filtros são testados via pytest em um hook de pre-commit. Comandos são documentados para implantar um único serviço, um dry run, tudo ou o alvo Pi, além de playbooks separados de bring-up e bootstrap. Preocupações transversais incluem segredos criptografados com SOPS/age descriptografados em tempo de execução, com gitleaks no pre-commit e um backup de chave out-of-band; observabilidade com Prometheus, Grafana, Loki e Tempo com dashboards provisionados como código; backups agendados do Longhorn para Backblaze B2 com tiering por volume documentado e procedimentos de recuperação de desastres; pull requests via Renovate para versões de imagens fixadas e revisões de hooks; e ferramentas de segurança incluindo TOTP/OIDC do Authelia, CrowdSec com agentes por nó, fail2ban e UFW com default-deny para entrada. Quality gates rodam através de uma ferramenta de pre-commit cobrindo lint de YAML/JSON, ansible-lint, gitleaks, validação de template renderizado, sincronização de registro de rotação de segredos, ruff e pytest. Orientações estão incluídas para adicionar novos serviços, seja como roles de k8s renderizando manifestos de Deployment/Service/IngressRoute/PVC, ou como roles de Docker para o Pi.