Back in August 2023, I had the pleasure of presenting two VMware Explore sessions about home labs. While preparing for those sessions, I realized that I hadn’t done a home lab update post in a long time. In fact, my last update post was four years ago in February 2020.
And a lot has changed in my lab. The use cases, architecture, the hardware, and even my areas of focus have changed significantly in the last four years. With VMware being acquired by Broadcom and my desire to retool and expand my skillsets, my home lab will be more important than ever. I will be using it as a tool to help achieve my goals and find my next path.
And while I was originally going to write about the lab infrastructure changes, I decided that my original post just wasn’t right. My home lab is practically a private cloud, and the tone of the post unintentionally came off as bragging.
That didn’t sit right with me, so I decided to scrap that post and start over. I want to focus on workloads and applications instead of hardware and infrastructure solutions, and I want to elevate some of the open-source projects that I’m using as learning tools.
And when I talk about hardware or infrastructure, it’s going to be about how that hardware supports the specific application or workload.
Home Lab Use Cases
I think it’s very important to talk about my lab use cases.
I had a slide that I used in two of my VMworld VMware Explore sessions that summed up my home lab use cases:
I really want to focus on the last two use cases on that slide: self-hosting open-source solutions and Minecraft. The latter has really driven the “roadmap” for my lab by forcing me to look for open-source solutions. I don’t have a budget, so I’ve been forced to look at open-source solutions to support my kids’ Minecraft servers.
Minecraft isn’t the only thing I’m self-hosting, though. I’ve found some awesome tools thanks to the r/self-hosted sub-Reddit, and I’ve used some of the tools there to fill in the gaps in my infrastructure.
Most of these solutions are containerized or offer a container-based option. I’m using containers whenever possible because it makes deploying and maintaining the application and its dependencies much easier than managing binary installs. Each application stack gets its own Debian-based VM, and I am using Traefik as my reverse proxy and SSL offload manager of choice.
I haven’t jumped into Kubernetes yet as I’m still getting comfortable with containers, and self-hosting Kubernetes adds another layer of complexity to my lab. It is on my to-do list.
All the solutions I’m using would be deserving of their own posts, but in the interest of time and wordcount, I’ll keep it fairly high level today.
Vaultwarden
There was a time, a long time ago, when I was a Lastpass family customer. It got harder to justify the yearly cost of Lastpass when self-hosted alternatives like Bitwarden were available (and…if I’m being honest…my family was not using the service). The Lastpass breach and security issues came to light about six months after I had cancelled my subscription and migrated my vault out, but it only justified my decision to move on.
I was originally using the self-hosted Bitwarden container. But I recently switched to Vaultwarden so I could start offering password vaults to the rest of my family as they are seeing the need for a password vault service.
Vaultwarden is one of the most important services in my lab. This service contains critical data, and I need to make sure it is backed up. I’m using a combination of this Vaultwarden backup container and Restic to protect the data in this application.
MinIO
MinIO is one of the few applications that I’ve deployed with infrastructure dependencies. I originally deployed MinIO in my lab when I was testing VMware Data Services Manager (DSM) as that product required S3-compatible storage.
I have a 3-node MinIO cluster in my lab. Each MinIO node has two data volumes, so I have a total of 6 data disks across my 3 nodes.
This is one of the few applications in my lab that is tied to specific hosts and hardware. Each MinIO node data volume is sitting on a dedicated local SSD, so each node is tied to an ESXi host in a workload cluster. This setup allows me to use erasure coding and provides some degree of data redundancy, but it makes host management operations a little more complex because I must shut down the MinIO node on a host before I can perform any maintenance operations.
Even though I’m no longer testing DSM in my lab, I still have MinIO deployed. I’m using it as the backend for other services in my lab that I will be talking about later in this post.
Wiki.JS
Home labs are rarely documented. This is something I’m trying to improve on with my lab as I’ve had a few processes that I’ve had to figure out or reverse engineer from looking at my shell/command history. I used to use Confluence SaaS free tier for documenting my home network, but SSO was a $30 per month add-on.
I also wanted a self-hosted option. I looked at a few wiki options, including Bookstacks, Dokuwiki, and a few others. But I’m also kind of picky about my requirements and wanted something that supported SSO out of the box and used PostgreSQL.
So I settled on wiki.js as my solution because it is open source, met all my technical requirements, and it fit in my budget.
I’m not taking full advantage of WikiJS yet. My focus has been importing content from Confluence and testing out the SSO features. But I plan to add more lab documentation and use it for some of my programming and lab side projects in the future.
Grafana Loki and Promtail
I’ve needed a log management solution for my fleet of Minecraft servers for a while now. Log management has been an issue on those, and some method to easily search the logs is kind of a requirement before I let my kids share the servers with their friends.
There are a lot of open-source solutions in this space, but I am settling on the Grafana stack. I’m starting with this stack because it seems to be a well-integrated stack for performance monitoring, log aggregation, and creating dashboards. Time will tell on that as I am just getting started with Grafana Loki. I have a small instance deployed today to get my Promtail config ironed out, and I will be redeploying it as I roll it out to the rest of my lab.
One thing I like about some of the newer log management systems is that they can use S3-compatible storage for log data. Loki isn’t the only solution that can do this but being a part of the Grafana stack set it apart in my mind and helped make it my first choice.
I’m using the Promtail binary for my Minecraft servers, and getting that config set up properly has been a pain. The documentation is very high level, and as far as I can tell, doesn’t include very many example configs to start from. Some of the issues I had to work through are scraping the systemctl journal, which required adding the promtail service user to a systemctl-journald group and getting the hostname and IP address added to all forwarded logs. The documentation covered some of what I needed, but there were some significant gaps in my opinion. It took a lot of trial, error, and experimentation to get where I wanted to be.
I need to write a longer blog post to talk about my setup and how I worked around some of the issues I faced once I get this rolled out into “production” and get some dashboards built. I will also be looking at Grafana’s version of Prometheus for performance monitoring in a later phase.
OwnCloud Infinite Scale
Have you ever exceeded the limits of the free tiers that Microsoft and Google offer on OneDrive or Google Drive? Or needed a Dropbox-like service that was self-hosted to meet data sovereignty or compliance requirements?
OwnCloud Infinite Scale (OCIS) is an open-source ground-up rewrite of OwnCloud Server using the Go programming language. It is a drop-in replacement for OneDrive, Google Drive, Dropbox and similar solutions. The client app supports files-on-demand (although this feature is experimental on MacOS). The server supports integration with multiple web-based office suites, OpenID Connect for SSO, and S3-compatible storage.
I use it for some of my file storage needs, especially the stuff that I don’t want to put on OneDrive or transferring data from my laptop to my lab. I expect to use the Spaces feature to replace some of my lab file servers and QNAP virtual appliances in my lab.
DDNS-Route53
DDNS-Route53 is a Go application that allows you to build your own Dynamic DNS service using AWS Route53. I was getting tired of having multiple dynamic DNS services tied to different domains, and I’ve started to standardize all my domains on Route53 and use this service to replace the few dynamic DNS services that I currently use.
Conclusion
These are just a few of the open-source projects I’ve been using in my lab. I have a few more that I’ve been testing out that I will talk about in future posts.
Open-source solutions are a great way to get more utilization out of your home lab while building or enhancing your technical skills. I’ll be talking more about this topic at the Wisconsin VMUG Usercon in April 2024. If you’re going to be there, please stop by my session.
You must be logged in to post a comment.