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
n8nand 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.

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.