After the remote access setup, it is finally time to start hosting actual services.
For me, self-hosting is about control, privacy, and flexibility. Services like photo backup and media streaming are things I use often, so running them on my own hardware gives me more ownership over my data and how these tools work.
This is the point where the homelab starts becoming practical, not just configured.
We'll start with using Docker to containerize these services.
If you are not familiar with Docker, you can check out this article.
On macOS, I recommend using Docker Desktop.

It is the easiest way to get Docker working properly on a Mac, and it gives you a simple interface to manage containers, images, volumes, and Compose projects.
On Mac, just use Docker Desktop. Recommend CLI-only setups unless you already know exactly what you are doing.
Once Docker Desktop is installed and running, you are ready to start using Docker Compose.
Again, if you are not familiar with Docker Compose, you can check out this article.
For image backup, I use Immich.
Immich is one of the best self-hosted options for photo and video backup. It feels modern, is easy to use, and works well as a personal Google Photos alternative.
The setup is simple:
If you want to plug and play, you can refer to my Immich setup. Comment the traefik labels, .env file(try learning, kinda unavoidable) if you don't know about them.
For media streaming, I use Jellyfin.
Jellyfin has some problems on macOS, according to the documentation, when using Docker Compose, so we will install it manually for the app here.
You can check this post if you want to start downloading media online and host it on your server.
With Docker installed, it becomes much easier to try new services without messing up the base system. And with Immich and Jellyfin running, the Mac mini starts doing useful work.
In the following episode, I will continue with more services and start organizing the stack properly with cleaner Docker Compose files, a reverse proxy, and better storage layout.