Recently Updated Pages
Service map
Every box and what it does, with a pointer to the book that covers it in depth. VM Address Wha...
The address plan and naming
A small, boring, consistent address plan saves you a surprising amount of grief. Here's the whole...
How a request reaches an app
Say you open https://app.example.com in a browser. Here's the whole journey: browser | https:/...
Lessons on data and observability
Match storage to the workload: databases get local disk on dedicated VMs, never NFS. Tune for th...
The big picture
Everything lives behind one firewall, on one private network. The only things exposed to the outs...
Seeing what the cluster is doing: logs to Loki
The lab already had a central log store (Loki — see its book in Core Infrastructure), with a Prom...
Every app gets its own credentials
This is a hard rule in the lab: no application ever connects as the database admin. Each app gets...
Tuning a database for the hardware it has
A freshly installed database ships with cautious, generic defaults. On a box you've sized deliber...
Three databases, on purpose
The platform runs three relational databases — PostgreSQL (10.100.100.13), MariaDB (10.100.100.14...
If you are new to this
A closing note, since teaching newcomers is half of why this lab exists. You don't learn infrastr...
Reproducible, disposable, observable
Three habits that show up in every corner of the lab: Reproducible. Every VM is a clone of one g...
Capacity is just arithmetic (done early)
Every VM was sized by doing the math first, against the one resource that actually runs out here:...
One edge, one door
Two things in this lab are deliberately funnelled through a single chokepoint each: All HTTPS te...
Least privilege, everywhere
The single most repeated decision in this lab: give each thing the narrowest access that lets it ...
Read this one even if you skip the rest
The other books are how. This one is why — the handful of principles that shaped every decision i...
Start here: what this lab is
This is a home lab. One Proxmox host, a pile of virtual machines, and a small-but-real platform r...
Assignment 2: GitOps-deploy your app with Argo CD
Goal: Use Argo CD to deploy the image you built in Assignment 1 onto the lab's live Kubernetes cl...
Assignment 1: Build-and-push pipeline on the lab runner
Goal: Write a GitHub-Actions-style workflow that builds a container image from your app and pushe...
Lesson: Pull-Based Deployment with Argo CD
What you'll learn The GitOps principle: Git as the single source of truth for what runs in your ...
Lesson: Bitbucket Pipelines & Jenkins
What you'll learn What Bitbucket Pipelines is and how its YAML compares to GitHub Actions. The J...