Homelab Journey Part 5: Running My Core Services

A homelab can turn into a service collection if you let it.

There is always another dashboard to try. Another container list. Another “awesome self-hosted” project that looks useful for five minutes. The problem is not installing services. The problem is keeping them useful after the novelty wears off.

So I try to be fairly strict now. A service has to earn its place.

It should solve a real problem, hold data I care about, or support the rest of the lab. If it does none of those things, it is probably just clutter with a web UI.

Home Assistant

Home Assistant is one of the core reasons the lab exists.

It started as a way to understand power usage and automate a few practical things. It became the place where house state comes together: sensors, lights, alarms, notifications, energy monitoring, and the small automations that remove repeated jobs.

The important part is that it has to stay reliable. A clever automation that annoys people is worse than no automation. A dashboard full of metrics that does not help you decide what to do is just noise.

For me, Home Assistant is not about making the house feel futuristic. It is about making the house easier to understand.

Immich

Immich is the emotional one.

I moved photos because I stopped trusting that the convenient answer was the safe answer. Photos matter. They are not just another pile of files. Losing them hurts in a different way.

Running Immich at home gives me control, but it also creates responsibility. Photo libraries are heavy. They want storage, CPU, backups, and patience. On Raspberry Pi hardware, that means accepting the limits. Imports are not instant. Background jobs can be slow. The storage layer matters more than the container.

Still, it earns its place because the problem is real. I want my photos somewhere I can inspect, back up, and restore.

Paperless-ngx

Paperless-ngx is there because paper is irritating.

Letters, bills, statements, manuals, and forms all have a habit of becoming small piles that nobody wants to sort. Paperless gives me a place to put them, search them, and stop pretending I will maintain a perfect folder structure by hand.

It is not magic. Bad scans are still bad scans. OCR takes time. Document types and tags need a bit of care. But once the system is running, it changes the habit. The question becomes “has this been scanned?” rather than “where did I put that?”

That is a good trade.

Gitea

Gitea is small and useful.

I do not need it to replace GitHub for everything. I use it as a local place for personal repositories, configuration, experiments, and anything that benefits from being close to the rest of the homelab.

The main value is control. The homelab repository, service notes, and small internal projects can live somewhere I manage. It is lightweight enough that it feels right on the cluster, and it does not try to become more than it is.

That is exactly the kind of service I like.

Traefik and Portainer

Traefik and Portainer are support services, but they matter.

Traefik handles routing and certificates. Without it, each service would need its own awkward access pattern. Portainer gives me a quick view of what is running across the Swarm.

Neither is the source of truth. The source of truth is still the repository and the deployment process. But both tools make the system easier to operate, especially when I am coming back after a few weeks away.

That is enough reason to keep them.

The small supporting services

There are always a few smaller pieces around the edge. Monitoring, DNS, MQTT, backup jobs, and utility containers. These are not exciting, but they are the connective tissue.

The rule is the same. If a supporting service reduces confusion or makes recovery easier, it can stay. If it exists only because it looked interesting on a Sunday afternoon, it probably gets removed later.

What I try not to run

I try not to run services that create work without changing a real workflow.

That includes dashboards I will never check, note-taking tools I will not actually use, media systems I do not have time to maintain, and anything that needs constant babysitting on Pi hardware.

The hardware is limited. My time is more limited.

The useful test

The useful test is simple:

Would I miss this if it disappeared?

If the answer is yes, it belongs in the lab and deserves proper backups. If the answer is no, it is probably an experiment, and I should treat it like one.

That distinction helps. Core services get care. Experiments get permission to be temporary.

The homelab works better when it is not trying to run everything. It works better when it runs the things I actually use.