The two reasons I built a homelab

I had been interested in having a homelab for years, but hardware is not cheap and I had never found a reason strong enough to commit to it. Then I had two.

Share
The two reasons I built a homelab
Photo by Alex Conradt / Unsplash

I had been interested in having a homelab for years, but hardware is not cheap and I had never found a reason strong enough to commit to it.

Then I had two.

I wanted another copy of my family photos and videos that I controlled. And I wanted to replace Kodi.

That was really it at the beginning. I did not set out to build a platform full of containers, local DNS names, backups, and a little server that quietly runs parts of my home. I wanted my own photos available locally and a media player that did not keep asking to be fixed.

Google Photos was not the problem

I still like Google Photos. In many ways it is the perfect photo service. It is convenient, works well, and gives me access to years of photos and videos without thinking about where they are stored.

The problem was that it was the only copy I could easily use. Everything depended on Google and an internet connection.

Maybe that is a little paranoid. But if the internet was down, or I was somewhere without access to Google, I wanted to know that my own family photos were still available to me. I also liked the idea that I could store and share family photos locally for people who did not use Google Photos themselves.

I briefly considered Apple Photos, but that would have meant relying on another large cloud service. I was not trying to leave Google Photos behind. I just wanted another copy that lived at home and was under my control.

That is what led me to Immich.

Kodi had done its time

The other reason was Kodi.

For a long time, Kodi was my local media setup. The Xiaomi smart box connected to the TV ran Kodi, and the media lived on an external hard drive connected to a Raspberry Pi 3B+. MySQL kept things in sync.

It had given me a good decade of service, so this is not me saying Kodi was bad. But the setup had become tiring. An update could break something and leave me setting up or scraping metadata again. Over time, some videos stopped playing nicely or the sound would stutter. I assume newer codecs and the ageing hardware had something to do with that.

I did not need every feature Kodi offered. I wanted a cleaner media server that was easier to keep running. Jellyfin looked like it could do that. It also had transcoding if I ever needed it, although that has turned out to matter far less than I expected.

I even installed Jellyfin on the Raspberry Pi to give it a real try. Every now and again the Pi would just crash.

Good times.

I tested the idea on my main PC first

Before buying anything, I ran both Immich and Jellyfin in Docker on my main PC. Docker was already part of my work, so it was an easy way to try them without immediately buying a server and hoping for the best.

I put a lot of photos into Immich and used it like that for months. Updates made me nervous at first because I knew some changes could be breaking. These were actual family photos, after all. But after going through a few updates, I started to understand the process and realised it was not as scary as it looked. Google Photos was still there too, so I was not placing all my trust in a new setup overnight.

Jellyfin also looked modern and simple when I used it locally. The media-server model made more sense to me than trying to keep the old TV box and Kodi setup alive forever.

After using them for a while, I realised I was no longer just playing with two applications. I wanted to rely on them.

The router came first

The first physical homelab step was not the server. It was the router.

I had wanted to replace the default ISP router for years. It was not very good, the Wi-Fi range was weak, and connections would drop for no obvious reason. I found a cheap second-hand Xiaomi router that could run OpenWrt. It also gave me Wi-Fi 6, better range, and the chance to make the home network independent from whatever the ISP supplied.

I bought it about a week before the server and immediately started flashing it and rebuilding the home network. That was more stressful than I expected. The internet went down for the whole house while I was doing it, so everyone was waiting to get back to YouTube or print work emails.

Eventually I had the old network working through the new router. It was more stable, the furthest room had a better connection, and I had a network that could survive a future ISP change without making me rebuild everything. That later mattered when I moved to Starlink.

The router story deserves its own article. But getting it working made the server idea feel more real.

I went in circles over the hardware

The obvious first idea was to reuse the Raspberry Pi I already had. It was cheap to run and already part of the old Kodi setup.

But it was too weak for what I wanted next. Immich needed more CPU, GPU, and RAM for facial recognition. I also wanted the possibility of two or three Jellyfin streams at once. The Pi had already shown me what happened when it was asked to do too much.

So I went in circles for a while. A Raspberry Pi 5. Maybe an Intel NUC. Maybe separate devices. Then NAS appliances from QNAP and Synology, because I would also need plenty of storage.

The NAS appliances looked convenient, but expensive. I wanted to run the homelab myself instead of buying a box that did everything for me. I wanted more control over the services and how they were put together.

Eventually I found a Beelink SER5. It looked like the right balance: low enough power use for something that would stay on, enough CPU and GPU for Immich and Jellyfin, and enough headroom to add things later.

I also ran the requirements through ChatGPT. It went through the specifications and agreed that the SER5 should be able to handle what I wanted. That gave me some confidence that I was not buying another device I would outgrow immediately.

Then I found one on Vinted at a reasonable price. At that point, it felt worth taking the risk.

It was not just plug in hard drives and go

The SER5 started with Debian. I set up Docker and Samba, worked through making storage available on the network, and put together backups and Restic scripts. I had the existing external hard drive to begin with. The DAS came later, almost as the last addition.

I had imagined storage in a very simple way: put hard drives somewhere, then have space.

There was more to it than that. Formatting, mounting, Samba shares, fstab entries, permissions, backups. I ran through each part one at a time. It was more than I had bargained for, but it also meant that I gradually understood what the server was doing instead of treating it like a magic box.

Immich and Jellyfin were the first two services. I already knew there could be more later. I had been looking at things like the Arr stack and Gitea, but those were not the reason I bought the machine.

Once the first pattern was in place, though, adding another service started to feel a bit like plugging another Lego block into something that was ready for it.

It grew from two ordinary needs

I did not have a full homelab architecture in my head when I started. I wanted another copy of my photos, and I wanted a better way to watch my local media.

Those two things gave me a reason to learn the rest: networking, storage, Docker, backups, and the boring parts that make a small server useful at home.

The system is much bigger now than I imagined at the time. But it started with those two needs, then grew a little bit at a time.

The next articles will cover the network, the server, Immich, Jellyfin, storage, and the other services that found a place there.