3 min read

Home Server Mk. 1

Home Server Mk. 1

Home server, home lab, tinker station, I don't know what to call the Frankenstein of a computer I've built, but it's far and away my favorite thing to play with. This is the story of how it came to be.

It started with a computer case and motherboard my former employer was dumping, it was a workstation at one point in time. I bought a used server motherboard, Xeon processor, ECC RAM, and for kicks I stuck my old GeForce 1080 GPU in it. That sentence makes it sound like it happened over night, but it took well over a year to get all of the hardware assembled into what it is today. This blog is hosted on that Frankenstein.

Now, the question remains, why? I got an A.S. in Computer Science and continued on to a B.S. in Information Technology. I thoroughly enjoyed most of the development I did, but I generally lack direction. I wanted to have a place where I could try and develop different applications, quickly iterate over designs, prototype, and most importantly scrap junk easily when needed. So I decided I'd scrap together my home server.

I started by building little bash scripts for a former employer, eventually I was developing whole pages and programs in PHP. That got old real fast, as it turns out I have a strong distaste for front end development. Laravel helped ease that pain, some. What it really did was introduce me to frameworks, my web development teacher always told me "you're going to need to know how to write HTML from scratch," == false, it never hurt though.

The way that Laravel loads it's parts was fascinating to me, you could edit a page and then refresh the browser and see the changes immediately, it was like magic. I wanted to build my own Laravel application, I had no idea what I was going to do with it, but I was going to do it. I heard another buzz word at that time and thought, I'll containerize it too!

So without a real plan I started by following this lovely guide from Digital Ocean:
https://www.digitalocean.com/community/tutorials/how-to-install-and-set-up-laravel-with-docker-compose-on-ubuntu-22-04

It was all going fairly well, learning how to prepare an application to be containerized, how to get them to communicate, but when it came time to make it available to external connections I was introduced to the boss fight. NGINX, which having never heard of it before, only read it, I pronounced it en–jinx. It was only a little embarrassing this first time a friend corrected me on that pronunciation. Learning NGINX was no joke, it was the better part of 6 months of debugging every time I needed to expose a new service. I learned all about reverse proxying, configuring HTTPS, caching, and so much more.

Once I finally had a stable application, accessible from the web, it was time to do something with it. I didn't really have any idea where I was going to start, or what I was going to do. I was worried about resource utilization, this was my first dedicated server after all and I wanted a web interface to monitor it. So I set out to learn how to monitor a system. I learned all about CAdvisor, Prometheus, and Grafana. By their powers combined I had put together a monitoring page. This would be the foundation for several projects that would be built on the back of the monolithic app that would be referred to as J.A.R.V.I.S. Just A Really Versatile Information System.

app.png

Now in many of my positions I have/or currently function as a subject matter expert, and that means being able to explain to others what something is, how it works, etc. So I wrote guides for setting up that project using WSL and on a bare metal server (Ubuntu.) I would not recommend using either of those guides or that project, it was my Home Server Mk. 1. Full of flaws, bad logic, half finished ideas, etc.

All of the skills I learned along the way prepared me for the adventure that would be my Home Server Mk. 2.