Lately I have been a little obsessed with home labs. They feel incredibly useful for software engineers, and I wanted to share my first experience building one.

Why

It started because my Twitter timeline was suddenly full of people setting up servers at home. My first reaction was: why?

For a long time, my mental model was simple. I thought a server only existed to serve something to the internet.

Turns out, I was wrong.

The real value of a home server is not just about hosting public applications, even though it can do that too. The bigger benefit is control and customization inside your own network. Once I understood that, the appeal became obvious:

  • Centralized storage: a place to back up important files, photos, and videos without depending entirely on cloud services I do not fully control.
  • Self-hosted applications: a place to run tools like n8n and my own apps.
  • Learning and experimentation: a safe environment to explore new technologies, DevOps practices, and server administration without worrying about breaking something important.
  • Data privacy: more control over my own data, with less dependence on large tech platforms.

All of that really resonated with me. As a software engineer, I loved both the learning opportunity and the idea of owning more of my own digital infrastructure.

The Hardware

Once I decided to do it, the first question was hardware.

At first I thought about using a Raspberry Pi because it is low power and relatively affordable. But after chatting with a few friends, they suggested starting with a mini PC instead.

In the end, I bought a single HP EliteDesk mini PC with an Intel i5, 2 cores / 4 threads, 16 GB of RAM, and a 128 GB SSD.

Untitled

The Software

With the hardware sorted out, the next step was choosing the operating system and software stack. That turned into another rabbit hole.

  • Operating system: I considered Ubuntu Server, Debian, and even Windows Server. In the end, I chose Ubuntu Server because it is widely used, easy to learn, and has great community support. I was also already somewhat familiar with Ubuntu from my development setup.
  • Virtualization and containers: I also considered whether I should run services in isolated environments. Docker was the obvious choice. It adds a bit more complexity, but the isolation and management benefits felt worth it, so I installed Docker as well.

Challenges and Learnings

The journey definitely was not effortless, but I learned a lot along the way. Setting up my first home server gave me a much better understanding of server administration, networking, and containerization.

Overall, it was a very rewarding experience, and I am excited to keep exploring what I can build with it.