About¶
This is my homelab. There are many like it, but this one is mine.
What is a homelab?
Homelab is the name given to a server (or multi-server) setup that resides locally in your home and where you host several applications, virtualized systems, containerized applications and so on, either for testing and developing, or for home and functional usage. The hardware you use can be anything from an old laptop, a simple tower or mini-PC, to a RaspberryPi-like device, to a repurposed professional server that you can acquire from companies who discard them due to their age but are still usable, a combination of all of these, or anything in between.
See the r/homelab introduction for more information.
History¶
One of the biggest drivers behind this project was to get a much deeper familiarity with Kubernetes. I could play around with something like minikube on my laptop all day long, but I wanted something that would require me to treat it as production (or at least production-like) to get more hands on feel, break things, get frustrated (get others frustrated?), then fix them, rinse and repeat. That's pretty much how I like to learn.
I also got my hands on a few old cisco devices and used this opportunity to get more hands-on with networking, which is another area I wanted to improve my skills in. Eventually I want to have a homelab that would be fully-operational and ready for production workloads, so I could use it for my personal projects, as well as for testing and experimenting with new technologies.
I have a lot of experience with Ansible and Terraform, and I spent some time looking into how to provision the nodes. Most solutions were pretty heavy and cumbersome, to say the least. I eventually found Khue's homelab repo which just spins up a container to handle PXE booting the machines and then uses ansible for the rest. This immediately drew my attention as it was one of the pain-points I really wanted to automate. I also liked how his code was laid out and how the provisioning flow was structured - you provision baremetal machines, install k3s, and create ArgoCD resources, and then the latter is responsible for deploying everything else - so I used it as a base for my own homelab cluster. I wanted to make my cluster fully-operational first - working in small increments along the way - and modify it heavily afterwards. Forking his repo would require a lot of cleanups and unnecessary work, that's why my repo is technically not a "fork", although a lot of ideas and initial code was borrowed from his repo, for which he gets all the credits.
Ack¶
I've used a lot of resources on the internet while researching and learning on how to build my homelab. The following references, among other things, are of particular noteworthiness:
- Project TinyMiniMicro on servethehome.com
- Many examples from khuedoan/homelab
- Ephemeral PXE server inspired by Minimal First Machine in the DC
- ArgoCD usage and monitoring configuration in locmai/humble
- README template
- Run the same Cloudflare Tunnel across many
cloudflared
processes - MAC address environment variable in GRUB config
- Official k3s systemd service file
- Official Cloudflare Tunnel examples
- Initialize GitOps repository on Gitea and integrate with Tekton by RedHat
- SSO configuration from xUnholy/k8s-gitops
- Diátaxis technical documentation framework
- Official Terratest examples
- Self-host an automated Jellyfin media streaming stack
- App Template Helm chart by bjw-s-labs
- App configs from onedr0p/home-ops