A couple weeks ago I decided to try self-hosting a couple of my services and try to reduce my cloud-dependence. Spending money on cloud services is fine, but nothing beats the feeling of having your own server at home. I also wanted to learn more about Docker and managing a homelab so it all just made sense.

So I got myself a Raspberry Pi 5, a 256GB microSD card and a somewhat nice-looking case and started my journey.

Raspberry Pi 5
Raspberry Pi 5 case. I'm not a fan of RGB lighting but it is what it is.

I started with a couple of services I wanted to self-host:

  • AdGuard Home - a DNS server that blocks ads and trackers
  • Immich - a self-hosted photo and video backup solution
  • Gitea - a self-hosted Git service
  • Homebridge - a self-hosted home automation solution

I also went ahead and installed portainer to manage my Docker containers.

AdGuard Home

This was the first service I set up. It was pretty straightforward until I realized I was still seeing ads everywhere. After my initial dissapointment I kept digging a bit more and found out that iCloud Private Relay and AdGuard are not friends. Sucks, but I can live with disabling it for now.

Immich

I was really excited about this one. I wanted to start saving local copies of my photos and videos in case something happens to my iCloud account. Spinning up the container was easy enough to start uploading stuff right away.

Immich UI
My dog wasn't very happy with that Lion costume...

To my surprise, it also includes a face recognition feature with a model that runs locally. I’m sold. To be fair, a Raspberry Pi 5 is not the best hardware for running the model, but it works well enough. I’m not in a hurry to tag every person in my library, so I can live with the slow performance.

Immich faces
Running on ~485 photos for the first time made the Raspberry work those cores.

Conclusion

I’m not gonna go over every single service I set up, but I can say that I’m really happy with the results so far. I have a couple more services I want to try out, but I want to take my time and not rush into it. It’d ruin the fun of learning and tinkering with my new toy.