Homelab
Designed and operate a self-hosted platform end to end: a single-node k3s cluster plus hardened host services, all declared in Git. Its Forgejo CI builds and deploys this site.
- 1 min
- From merge to running in the cluster
- 17
- Platform services, all declared in Git
- 100%
- Repos restored and verified in the last drill
01
Why I built it
- I wanted my own platform to host my code, my services and this site.
- And a place to run it the way I’d run production: declared in Git, secured and backed up.
- Git
02
What it does
- Main server: Forgejo, secrets, SSO and DNS, with everything else in k3s.
- Storage node: NAS and backups.
- Agent host: work boxes for coding agents.
- Reached privately over Tailscale; only Cloudflare is public.
- Forgejo
- k3s
- Tailscale
- Cloudflare
03
How it’s built
- Every host and service is declared in Git, with Ansible and Flux.
- Every change starts as a pull request; after merge it rolls out in about a minute.
- SSO with passkeys in front of every admin UI, and secrets in OpenBao.
- Nightly backups with restic, and restores that are drilled.
- Coding agents open pull requests from a restricted account; I review and merge.
- Git
- Ansible
- Flux
- OpenBao
- restic
04
Outcome
- A platform I run like production, from one Git repo.
- Its CI builds and deploys this site.
- Git