A working homelab is the cheapest possible production environment. This one runs Kubernetes on Proxmox/Talos with two-loop GitOps, 30+ Docker services, and the nginx that's serving you this page.
anthonyr.com is one of the conf files in the same git repo this HTML lives in. Deploy is git pull → nginx -t → reload — deploy-by-commit, with the config test gating the reload.
Data-driven K8s infrastructure on Proxmox/Talos Linux with two-loop reconciliation:
It's run as a patterns platform — the place to keep the GitOps muscle memory. Production homelab workloads deliberately stay on Docker Compose; knowing when not to reach for Kubernetes is part of the job.
Services that don't need to live in K8s run as Docker Compose stacks orchestrated by Dockge. A sample of what's running:
The entire nginx config tree is a git working tree, and a single script (syncAndRestart.sh) runs the deploy sequence:
git fetch && git pullnginx -t — config syntax check (gates everything below)nginx -s reload — only if the test passesThe pull is kept a deliberate, attended step rather than an unattended auto-pull cron — a supply-chain safeguard, so a compromised or bad commit can't reach the public edge without a human in the loop. The site you're reading is colocated in the same repo as the nginx config: commit, push, run the deploy, and the config test either passes or the old config keeps serving. The same pattern quietly fronts a whole menagerie of other vhosts — self-hosted apps, admin dashboards, media and automation services, and a handful of personal sites — each terminated and reverse-proxied through the same battle-tested include stack.
Logs from five hosts ship into Loki; a FastAPI service asks a Claude model to read them like an on-call SRE and writes prioritized incident reports on a cron. The non-obvious part is a persistent issue-ledger that gives the LLM cross-run memory — every report tells me what's new, still ongoing, or newly resolved, instead of re-flagging the same warning forever. False-alarm guards, push alerts with P1 escalation, bounded token cost. Full writeup →
The whole homelab is documented in one git repo, and the documentation keeps itself honest: collector scripts SSH into each host and regenerate inventory snapshots deterministically, so git log over the generated tree is a live infrastructure drift ledger. A weekly cron on the Proxmox host re-runs the collectors and auto-commits any drift. Every host page carries a hard-death rebuild runbook; secrets are structurally excluded by fail-closed sanitization that aborts if key material survives redaction. The point: infrastructure documented well enough that an AI agent — or a stressed human at 3am — can operate it.
Playbooks for system patching, reboot management, hardware inventory, and historical data collection across the homelab fleet. Not glamorous; the kind of automation you only notice when it's missing.
I run my own infrastructure the way real infrastructure runs: idempotent provisioning, declarative reconciliation, encrypted secrets in source control, observable failures with paging. The homelab is not a toy — it's the reproducibility lab for the patterns that ship at SanMar.