[SKIP_TO_CONTENT]
Daniel Kindl
Main content
· 3 min read

Building Tangolab: Why I Finally Started a Homelab

[+] On This Page

Why build a homelab?

For a long time, I wanted a place where I could experiment with technologies outside my day-to-day work without worrying about breaking anything important.

Cloud platforms are good at what they do, but they abstract away much of the underlying infrastructure. I wanted to understand what actually happens underneath: installing an operating system, securing a server, managing containers, designing backups, and documenting everything well enough that I could rebuild it from scratch.

That’s how Tangolab started. It isn’t a production server or a cloud replacement, it’s a personal laboratory I can break without consequence.

Starting with what I already had

Rather than buying dedicated server hardware, I reused an old office PC that had been collecting dust under my desk.

Component Spec
CPU Intel Core i3-3220
Memory 8 GB DDR3
Storage 500 GB HDD
Network Gigabit Ethernet

By modern standards that’s modest, and the constraint is intentional. Limited resources force better decisions. Every running service has to justify the CPU time, memory, and storage it consumes, so instead of installing dozens of containers because I can, I have to think about what actually earns its place.

Design philosophy

Before installing anything, I wrote down a few principles I wanted to follow.

  • Prefer free and open-source software.
  • Keep the system lightweight.
  • Expose nothing to the public Internet.
  • Document every significant decision.
  • Design for future hardware migration.
  • Build something I can recover after a complete disk failure.

Those principles have influenced nearly every technical decision since.

Current architecture

Tangolab runs Debian 13 directly on the hardware, with Docker Compose managing the application stack.

Service Role
PostgreSQL Shared database
OneDev Git hosting and CI
Wiki.js Internal documentation
Uptime Kuma Service monitoring
Glances Host metrics
Restic Nightly backups
Tailscale Private remote access

Everything lives on a dedicated Docker network, application data is separated from the operating system, and backups run automatically every night. Nothing is exposed publicly, and all remote access goes through Tailscale.

Documentation first

One goal I set from the beginning was to treat documentation as part of the project rather than something I’d write afterwards.

Every architectural decision, hardware change, backup procedure, security finding, and future improvement is documented inside the homelab itself using Wiki.js. If the machine dies tomorrow, I don’t want to rely on memory. I want enough documentation to rebuild the environment from scratch.

More educational than expected

The part I expected to learn from was getting everything running. Reviewing every configuration afterwards taught me considerably more.

During a security audit I found several problems I had introduced myself: weak backup credentials, incorrect file ownership, missing firewall rules, and permission problems that were silently preventing offsite backups from working. None of them were hard to fix. Finding them taught me much more than following installation guides ever could, mostly because each one was a gap between what I thought I had configured and what was actually running.

What’s next?

Tangolab is still very much version 1. The next improvements I have planned:

  • testing backup restores end-to-end
  • adding a reverse proxy
  • upgrading the storage
  • increasing available memory
  • improving monitoring
  • eventually migrating everything to newer hardware

Because the project is built around documentation and reproducibility, those upgrades should be evolutionary rather than requiring a complete rebuild.