A 2014 Mini PC. Two Services. Zero Monthly Fees.

Post #013 — Homelab

A 2014 Mini PC. Two Services. Zero Monthly Fees.

Self-Hosting Immich and Jellyfin on an Intel NUC

This started as a practical decision. I had an Intel NUC from 2014 sitting on a shelf — stress-tested, cleaned, and confirmed working. I had a NAS full of movies and family photos. And I had two services on my list that I kept putting off: a self-hosted photo library and a local media server.

The NUC became the host. The only real question was whether an 8GB i3 machine from over a decade ago could handle both without falling apart.

It can.


What This Covers.

THE SHORT VERSION

This isn't a step-by-step tutorial. What I want to document here is the sequence — the order things need to happen in — and the honest friction that came with it. If you've been curious about self-hosting but assumed it required deep Linux knowledge, this might change your mind.

The rhythm is simple:

01

Ubuntu Server 24.04 LTS

Minimal install. No GUI. Just SSH access and a command line. The install itself took less than 15 minutes — bootable USB, follow the prompts, done.

02

Docker

One command installs the entire Docker engine. From this point forward, every service runs in its own container. No conflicts, no dependency hell.

curl -fsSL https://get.docker.com | sudo sh
03

NAS Mount via CIFS

The movies and photos live on the WD EX2 NAS. Rather than copy everything to the NUC, I mounted the NAS shares directly. The NUC reads from the NAS in real time.

04

docker-compose.yml

One file. Five containers. Jellyfin, Immich server, Immich machine learning, Redis, and PostgreSQL — all defined together, all starting with a single command.

docker compose up -d
05

fstab — Persistent Mounts

Without this step, the NAS mounts disappear on every reboot. Adding two lines to /etc/fstab makes them permanent. The NUC mounts the shares automatically every time it boots.

06

OPNsense Static DHCP

The NUC needs a fixed IP. Not on the NUC itself — in the router. OPNsense assigns the same IP every time based on the MAC address. No configuration changes needed on the server side.


Two Services, One Machine.

WHAT'S RUNNING

Jellyfin
192.168.2.114:8096

Local media server. Movies and series stream from the NAS through the NUC to any device on the network. No subscription. No account required.

Immich
192.168.2.114:2283

Self-hosted photo library. Automatic backup from phones, face recognition, map view, timeline — everything a cloud service offers, running locally.


The Part Nobody Mentions.

HONEST STATUS

The services work. But at the time of this deployment, OPNsense wasn't stable yet — it was the next item on the list, not the current one. That created a specific problem worth documenting.

Without a firewall managing DHCP, the NUC's IP address isn't guaranteed. Every restart is a question mark. The bookmark you saved yesterday might point nowhere today.

The deliberate choice: I could have set a static IP directly on the NUC — it's a few lines in a config file. But that would have created a conflict the moment OPNsense came online and started managing the network. The plan was already in motion. Hardcoding the IP on the machine would have meant undoing it later. So I didn't.

Instead, the NUC runs on DHCP. When the IP changes — which it does, occasionally — I find it the way a headless server should be found: through the network, not by plugging in a monitor.

That's where SSH earns its place. Once you know the new IP from the router's lease table, you're back in. No keyboard. No screen. No interruption to the services themselves — they keep running regardless.

This is also where my situation diverges from a simple home setup. This property spans ~1,250 m², runs two active businesses, and has over 30 devices on the network across multiple access points. The ISP equipment is locked down — no admin access, no app, no lease table. There's no way to check what IP was assigned without a dedicated firewall in the loop.

If your setup is simpler — one router, a handful of devices, and access to the admin panel — this friction probably doesn't apply to you. Most home routers let you assign a fixed IP from the app in under a minute. But if you're operating at scale without a firewall, you're flying blind in exactly the way I was.

OPNsense is the next post. That's where the IP becomes permanent and the network becomes visible.




Does a 2014 Machine Handle It?

THE HONEST ANSWER

Yes — with reasonable expectations. The NUC runs both services simultaneously without breaking a sweat during normal use. Streaming a movie while Immich indexes photos in the background? No problem.

Where you feel the age is in Immich's machine learning pipeline. Face recognition and smart search require real processing. On first run, with hundreds of photos to analyze, it takes time. Not hours — but long enough that you notice it's working.

For a household media server and photo library, an 8GB NUC from 2014 is more than enough.

docker ps
immich_server — Up 20 hours (healthy)
jellyfin — Up 20 hours (healthy)
immich_ml — Up 20 hours (healthy)
immich_postgres — Up 20 hours
immich_redis — Up 20 hours

It boots, mounts the NAS, starts the containers, and disappears into the background. That's exactly what a server should do.


What's Next.

HONEST STATUS

The NUC is running. The services are stable. The next phase involves Home Assistant on a dedicated OptiPlex — which opens the door to smart plugs, NFC automation, door sensors, and on-demand wake for the NAS.

That's a separate post. For now, the media server is live, the photos are organized, and the monthly subscription cost for both is zero.

The fear of Linux was bigger than Linux itself. The installation was straightforward. The commands were learnable. The part that's genuinely hard isn't the server — it's the network.


Related Posts

  • The NUC Wasn't the Problem. The Power Strip Was. — Post #010
  • Got the Firewall Running Again. — Post #011
  • Undust the EX2 — Bringing My NAS Back to Life — Post #012
This post contains Amazon affiliate links. If you purchase through them, I may earn a small commission at no extra cost to you. Every product listed here is something I personally own and use.

Comments

Popular posts from this blog

From Fear to Control: What Self-Hosting Gave Me

When One Problem Turns Into Two

Google Photos Was Free. Until It Wasn't. Here's My Setup Now.