Self-Hosted Blog Part 1 - Overview
Recently I’ve been thinking of sharing some of my harder won lessons from the last few years of starting a company. There’s a number of topics in my backlog, like what is a basic sales process and how to run it? How do you learn to lead other sales people? How should you think about marketing and marketing team leadership? How do you find the right price for your product? Is your sales play a replacement play or a complementary play? How do you find budget for your new widget? All great topics, but I’m going to inaugurate this new blog with something I’d totally recommend you not do: host a blog on a bare metal cluster running at home.
There’s a ton of ways to create a blog. Wordpress. Medium. Blogspot. Most of them can be up and running in a few clicks. If all I cared about was being read, there are many easy ways to accomplish the task. But, why not the hard way?
If you don’t know me, I’m the co-founder and CEO of Cribl, which is an observability company. When using our software, I need some workload to observe. This blog served as a real workload I could run and use our software to observe its behavior. I also like to continue to get my hands dirty with technology and keep current. I envisioned a number of somewhat silly requirements in order to learn:
- Kubernetes running on hardware at my house
- The blog hosted in that infrastructure
- Blog created in some kind of static site generator to keep it simple and portable
- Blog authored in markdown using git for versioning
I picked Kubernetes first as the core requirement, somewhat jokingly, seeing as it feels like a lot of engineering projects start from “use this tech”. My requirement was to have a real workload running in k8s in order to use Cribl’s software to observe it. Rather than hosting it in the cloud, I decided to do it on bare metal. I have a Gigabit connection at home, so we should be able to serve more than enough traffic. The rest of the requirements are relatively reasonable and modern. I’d like to author the blog using markdown and publish it using a CI/CD pipeline.
Doing k8s on bare metal at home created a number of interesting questions to answer.
- What kind of hardware should I run it on?
- How do I get kubernetes running outside a cloud?
- How do I build the static site and deploy it to this cluster?
- How do I expose this to the internet?
- How far can I scale this thing?
- What single points of failure am I willing to live with?
In this series, I’ll walk through deciding on the hardware, getting kubernetes running, getting the site built, exposing the site to the internet, some performance testing, and I’ll wrap up with the final architecture.
By the end, we’ll have a Kubernetes cluster running on bare metal serving a blog at a scale big enough to take quite a bit of traffic. The basic flow will look like this:
Updated 3-27-22 Several updated instructions for environmental changes present a year later.
Posts in this Series
- Self-Hosted Blog Part 1 - Overview
- Self-Hosted Blog Part 2 - The Hardware
- Self-Hosted Blog Part 3 - OS & Kubernetes
- Self-Hosted Blog Part 4 - The Blog
- Self-Hosted Blog Part 5 - Container
- Self-Hosted Blog Part 6 - Build
- Self-Hosted Blog Part 7 - Kubernetes
- Self-Hosted Blog Part 8 - Internet Accessibility
- Self-Hosted Blog Part 9 - Performance