An Emerging Homelab

Coming into 2020, I had quite a few raspberry pi devices (raspis). None of them were doing anything super interesting though. I had learned some basic sysadmin processes while deploying a few services like VPNs, SSH servers, and even a Discord Bot, but I was hitting some issues. I found managing all the devices, configurations, and services to be quite burdensome. I knew enough to see this as an issue, but not quite enough to address/solve it.

At this time, I was also getting into some classes where learning Docker made my life simpler. I began learning about containers, docker networks, architecting multiple services together with docker-compose, and then I hit gold: Docker Swarm Mode. It allowed multiple physical hosts to work together to run apps and services. I used this "swarm" approach when working on some distributed software in school and it simplified the whole deployment and management of the system my team was working on. There is much to say about that project, but it's not the point of this post.

Around this time I also discovered communities like:

I loved seeing people's labs & builds, and just the sheer usefulness of it! This was sort of the final push for me to dive headfirst into learning the technology behind it all, and of course, making cool things. This hobby has eaten a chunk of my spare time, but it has been so rewarding and worth it. I've learned how to design systems with containers, been able to use this knowledge in my final large project as an NCSU Senior, and the know-how has been immensely useful through my most recent internship. It feels good to learn, experiment, and have confidence in my home lab.

Some of the diagrams I've seen online have inspired me to make my own, and it is still a work in progress.

{% zoom "./home-tech-setup-v4-august-31-2020.jpg", "a home diagram attempt", "a home diagram attempt
August 31, 2020", "w-80 w-70-ns"%}

There is still so much more to learn (Infrastructure as Code (IaC) looks especially neat), and I look forward to always having a place to experiment with and test out whatever I may be working on personally and professionally.


Here is a timeline of how I acquired my devices, it's mostly here as a record for me though 😄.

December 26, 2017 - The Beginning

Received my first raspi from my girlfriend for Christmas (sethspi).

{% zoom "./christmas-tree-2017.jpg", "it all started under this tree", "it all started under this tree
December 26, 2017", "w-80 w-50-ns"%}

January 3, 2018 - A Friend

Was talking with some family about my raspi and what I was planning on using it for. They bought another raspi kit in return for me running a VPN for them because they travel quite a bit (cohenpi).

May, 2018 - A Suprise

One evening I was coming home from classes and I saw a black piece of plastic on the side of the road. It turned out to be a raspi 3B, and I found a power cable, popped in a micro SD card, and I had another addition to my fleet!

{% zoom "./wolf-village-artic.jpg", "earlier picture of the place", "earlier picture of the place
May 7, 2017", "w-80 w-50-ns"%}

August 13, 2018 - What a nice hat you have there

Bought a new case for galeapi after getting a Sense HAT on vacation over the summer from a Fry's Store. At this point in time, I had 2 raspi 3Bs.

{% zoom "./2-raspis-with-hat.jpg", "first 2 raspis", "first 2 raspis
August 15, 2018", "w-80 w-50-ns"%}

July 15, 2019 - It was so shiny I just had to get it

Ordered a raspi 4B with 4GB of ram (buffpi)

March 21, 2020 - Fixing the mess

Then, I had acquired 4 raspis and it was getting a little wild wherever they were. Dad and I built a cedar wood rack for them and its beautiful! As of 4-20-2020, I installed DietPI on all of the devices in hopes of making them easier to manage with the different services I planned to run. Also, each raspi is connected to a docker swarm.

{% zoom "./4-raspis-in-cedar-organizer.jpg", "testing out the new organizer", "testing out the new organizer
March 21, 2020", "w-80 w-50-ns"%}

July 23, 2020 - New housing to chill out in

As I was experimenting and adding more services to my fleet of devices, they were having some cooling troubles. It was time for an upgrade. I bought a fancier enclosure from Amazon with some built-in cooling and it looks so neat! I also experimented with some wiring and manually putting in a switch on the RGB leads for the case. At this time, I replaced OpenVPN with Wireguard.

July 26, 2020 - A non-ARM device

One of my friends was getting rid of some devices and I took this as an opportunity to address some of the limitations of my current fleet. Every device I had up to this point, was ARM-based. That limited me and brought some complications when the software I wanted to use was compiled for other systems. I also was wanting a device to run Openmediavault to handle file sharing and backups as well as a pretty media server (Jellyfin). I ended up buying a Dell Optiplex and adding it has been amazing, even though it took me 2 days to figure out how everything should be setup together.

Having more devices, covering ARM and x86_64 architectures, utilizing this surplus of storage, running ethernet all the way, and getting storage/cooling under control has been so great!

December 25, 2020 - A really nice rack

Christmas has come and Dad & I bought a server rack! I am so excited! Spending most of the evening working on and building the beast has been super enjoyable. It looks amazing and I have now consolidated the server & networking gear and my personal PC into one (power protected & battery backed) spot. It has a nice place to put my relatively new ring light (for when the sun is too bright in the background of video calls) 🙂

{% zoom "./new-rack-december-2020.png", "a beautiful rack indeed", "a beautiful rack indeed
December 25, 2020", "w-80 w-60-ns"%}

{% zoom "./desk-and-rack-december-2020.png", "it even looks ok beside the temporary desk", "it even looks ok beside the temporary desk
December 25, 2020", "w-80 w-60-ns"%}

Lastly, as I migrate everything into this server rack, it seems reasonable to update my homelab diagram.

{% zoom "./home-tech-setup-v5-december-25-2020.jpg", "my homelab feels more at home", "my homelab feels more at home
August 31, 2020", "w-80"%}

January 15 (& 25), 2022 - More Power

I came across some Dell Optiplex 7040's at a good price online, and they were a significant upgrade from my Raspi 2s, and even the 3020 from earlier. I started by buying one, moving some services over, monitoring the resource usage. It went amazing, so I fully replaced the Optiplex 3020 and now have two twin 7040's that do most of the work running my services.

It was also this time, that I started to feel a little curious about naming. I had two new devices to name and so far I have not been following anything meaningful, just naming devices on whims (bennie, lenny, buffpi). I decided I needed a naming scheme and over a few days came to the idea of using the brightest stars in my {% xlink "", "favorite constellation Orion" %}. Plus, these stars actually have names, I found multiple places where just numbers and greek letters were used.

January 28, 2022 - Greatly Simplifying Diagrams

The diagram I shared earlier was very fun to make, but it is QUITE confusing and unwieldy. It was also tedious to keep up to date and track changes to. I'm a software developer, tracking changes is 50% of what I do, so I began looking into a code-first approach to visuazling my services and networks.

I discovered the python package {% xlink "","diagrams" %} and after some tinkering, had a script to generate separate networking and docker service diagrams for my lab.

This is amazing and really simplfies things, and throwing everything into a git repo makes it feel right at home.

March 6, 2023 - More changes

Some devices have been retired & renamed, the service diagram now pulls some of its data directly from traefik's API, and overall things have been running smoothly for quite a while. The lab purrs quietly, works hard, and continues to be a joy to work and learn with.

I wonder what will be next for this homelab, thanks for reading 👍