Skip to content
Back to posts

When a Homelab Becomes a Personal Cloud

Building a Personal Cloud · Part 2

10 min read

Where the personal cloud begins

I have been thinking about where the boundary sits between a homelab and what I have started calling my personal cloud.

I am not sure there really is one. The more useful way to think about it is as an evolution.

A homelab often starts as somewhere to experiment. You buy a small machine, install Linux, run a few containers, try some networking, break things, rebuild them and slowly accumulate services. That is exactly how mine developed.

Over time, though, some of those experiments stop being experiments. They become things you use, then things you rely on. Eventually you find yourself caring less about the machine running them and more about whether the capability itself continues to exist.

At that point, the homelab has started taking on another role.

For me, that is where the idea of a personal cloud begins.

From experiments to infrastructure

The traditional homelab model is deliberately flexible. You might build a Kubernetes cluster one weekend, tear it down the next, install a new hypervisor, rebuild a server or run a service simply because it looks interesting. The infrastructure exists partly to give you somewhere to learn.

That experimental freedom is one of the most valuable things about having a homelab, and I do not think it disappears when the system starts becoming more useful.

What changes is that not everything remains ephemeral.

A service I deploy experimentally might turn out to solve a real problem. I start using it regularly, then build other workflows around it. Before long, it is no longer something I am merely testing.

My monitoring should still be running tomorrow. My reading system should still contain the things I saved last month. Remote access should work when I am away from home. Data should survive a reboot, a failed disk or the eventual replacement of the machine hosting it.

The homelab has not disappeared at that point. Its scope has expanded.

It still provides somewhere to experiment, but it is now also hosting persistent capabilities I depend on.

That combination is what I mean by a personal cloud.

What a personal cloud actually is

I think the most useful definition is fairly simple.

A personal cloud is a small, personally owned platform that provides persistent capabilities to the person operating it.

Those capabilities might include compute, storage, remote access, monitoring, document management, reading tools, automation, media, development environments or anything else that supports how that person works or lives.

The exact services are not especially important. Neither is the number of machines.

What matters is that the system is designed around capabilities rather than around individual pieces of hardware.

A personal cloud is therefore more than a server running containers. It is the collection of compute, storage, networking, identity, services and operational practices that allow those capabilities to exist reliably over time.

That also means it is not necessarily entirely local. It can span hardware in the home, personal devices and selected external services where they make sense.

The important thing is that the architecture exists primarily to serve the person who owns and operates it.

The shift is from machines to capabilities

Early on, it is natural to think in terms of machines.

I have a Mac mini. I have a Debian box. This one runs Docker. That one runs monitoring.

As the system develops, that description becomes less useful. What matters more is what those machines collectively provide.

I have somewhere to run persistent workloads. I have storage. I have remote connectivity. I have monitoring. I have applications that support particular workflows. I have a way to rebuild and recover parts of the system when something fails.

The hardware still matters, but it increasingly becomes an implementation detail underneath those capabilities.

This is familiar territory from platform engineering. A useful platform hides unnecessary implementation detail behind something more stable. The worker node is less important than the compute capability. The storage device is less important than the persistence it provides.

The same idea works well at home.

That leads to a principle I expect to keep coming back to as I build this out:

Capabilities should be durable. Implementations should be replaceable.

Persistent does not mean static

Calling something persistent does not mean I expect it to run forever in its current form.

Quite the opposite. Machines will eventually be replaced. Services will move. Software will change. I may swap one application for another or redesign parts of the network entirely.

What I want to preserve is the capability.

If I replace the machine running my reading system, I should still have a reading system. If a node dies, I should be able to rebuild the workloads that matter. If I decide one piece of software no longer suits me, the data and workflow around it should not disappear with it.

This is one of the differences between experimenting with infrastructure and operating it.

In a lab, rebuilding from scratch can be part of the point. In a platform, rebuilding should be possible without losing the things the platform exists to provide.

The system should be able to change without forcing everything that depends on it to start again.

The homelab remains the experimental engine

The move towards persistent infrastructure does not mean experimentation becomes less important. I think the opposite is true.

A personal cloud needs experimentation if it is going to remain useful.

My needs will change. New tools will appear. Better ways of solving existing problems will emerge. Entirely new problems will show up that I could not have anticipated when I first designed the system.

The homelab gives me somewhere to explore those possibilities.

I can deploy a new service because it looks promising, try a different architecture, test an integration or replace one component temporarily to see whether there is a better way of doing something.

Most experiments do not need to become permanent parts of the platform.

Some will fail. Some will be interesting but unnecessary. Some will solve problems I do not actually have.

Others will survive the trial period and prove themselves useful enough to keep.

Those are the experiments that can graduate into the persistent part of the personal cloud.

That creates a useful cycle: experiment, evaluate, keep what works, then operate it properly.

The homelab remains the foundation. Its scope expands from experimentation into infrastructure I depend on.

More importantly, the experimental side remains active. It is how the platform continues to discover new capabilities and adapt to needs I have not yet anticipated.

A personal cloud needs a stable core and an experimental edge

That suggests a useful way to think about the architecture itself.

A personal cloud has a stable core containing the capabilities that have proved valuable enough to depend on. These are the services where persistence, recovery, monitoring and maintainability matter.

Around that sits an experimental edge, where new ideas can be trialled without immediately taking on the same operational expectations.

The boundary between the two should not be rigid. Things can move across it.

A new service might begin as a container I deploy out of curiosity. If I stop using it, I remove it. If it becomes useful enough that I start depending on it, then it earns a different level of treatment: persistent storage, backups, documentation, monitoring and whatever else is appropriate.

That is a more useful model than treating every experiment like production infrastructure from day one.

It also avoids the opposite failure mode, where everything remains a fragile experiment forever.

The lab provides discovery. The platform provides durability.

A healthy personal cloud needs both.

A personal cloud is more than containers

Containers are a large part of how I currently run things, but they are not the personal cloud itself.

Once I think of the system as a platform, its scope becomes much broader.

There is compute to run workloads and storage to preserve their state. Networking determines how the different parts communicate and how I reach them. Identity controls who and what can access them. Monitoring tells me whether the system is working, while backups and recovery determine what happens when it is not.

Then there are the services themselves: the applications that actually provide useful capabilities.

All of this sits inside an operational layer of configuration, upgrades, automation and documentation.

That does not mean I want to reproduce an enterprise environment in miniature. If anything, the opposite is true.

Every additional component carries a cost. Every abstraction is another thing I may eventually have to troubleshoot. Every dependency creates another way the system can fail.

The goal is not maximum sophistication. It is enough structure that the system remains understandable, recoverable and adaptable as it grows.

Local-first, not local-only

Thinking of this as a personal cloud also changes how I think about its boundary.

My first instinct might be to define it as the hardware physically running in my home, but that quickly stops making sense.

Tailscale might provide connectivity between devices. Cloudflare might provide a controlled path from the public internet to a service. GitHub might hold configuration and automation. An external storage provider might eventually hold encrypted off-site backups.

Those services are outside my house, but they are still part of the architecture.

So I think of the system as local-first rather than local-only.

Where it makes sense, I want the compute and data close to me and under my control. But there is no reason to reject external services when they provide a better solution to a particular problem.

The interesting boundary is not physical location. It is ownership and intent.

This is a system I operate primarily for myself, built around capabilities I want to own, understand and control.

More hardware is not the objective

This way of thinking also makes machine count much less interesting.

Homelab culture can sometimes drift towards hardware accumulation. More nodes, bigger racks and increasingly elaborate infrastructure are interesting in their own right, particularly when the goal is experimentation.

But if I am thinking about the environment as a personal platform, additional hardware should solve an actual problem.

A machine might provide isolation between workloads. It might improve reliability, reduce power consumption, add storage capacity or suit a particular workload better than the existing nodes.

Those are good reasons to add one.

Each machine also creates more operational surface area: another OS to patch, another disk that can fail, another configuration to maintain and another dependency to understand.

A personal cloud could therefore consist of one machine or ten. That tells me very little about how good the platform is.

A better goal is to build the smallest system that reliably provides the capabilities I actually need, while retaining enough flexibility to explore the ones I might need next.

A different definition of maturity

Once the homelab starts taking on platform responsibilities, the questions I ask about it begin to change.

Instead of asking how many services I am running, I start asking whether I could rebuild the machine running them. Instead of asking whether I can expose a service to the internet, I ask whether I can reach it securely when I need it. Instead of asking whether I have backups, I ask whether I can actually restore from them.

I want to know what is running, where its state lives and what happens when part of the system disappears. I want services to recover cleanly after reboots and failures. I want the architecture to remain understandable six months after I last touched a particular component.

At the same time, I still want somewhere I can try something new without first designing its final architecture.

That balance matters.

Maturity does not mean eliminating experimentation. It means knowing which parts of the system are experiments and which parts have become infrastructure.

The next evolution of the homelab

I do not see the personal cloud as a rejection of the homelab.

I see it as one direction a homelab can naturally grow.

The lab remains where experimentation happens. New tools and ideas can be trialled there without any assumption that they deserve a permanent place in the system.

Some experiments prove useful enough to keep. Those services become part of everyday workflows. As dependence grows, reliability, recovery and maintainability begin to matter more.

At that point, they stop being merely things I am running and become capabilities the wider platform is expected to provide.

That, to me, is the personal cloud: a personally owned platform that combines persistent capabilities with an active experimental environment capable of discovering what should come next.

The homelab remains the foundation. Its scope expands from experimentation into infrastructure I depend on.

And because the experimental part remains, the platform is not just able to survive change. It is able to keep evolving with it.


Share this post:

Ongoing series

Building a Personal Cloud
Part 2 · 2 published