Back to all posts
Single Board Computers

Running a Home Server on Raspberry Pi 5: Six Months Later

After six months of running Docker containers, Pi-hole, and a media server on the Raspberry Pi 5, here is what worked, what broke, and what I would do differently.

Hensen3 min read
#raspberry-pi#home-server#docker#self-hosted
Running a Home Server on Raspberry Pi 5: Six Months Later

Six months ago I replaced my aging NUC with a Raspberry Pi 5. It was partly a cost experiment, partly curiosity about the new hardware. After running it 24/7, I have plenty of data and opinions.

The Hardware Setup

The core unit is a Raspberry Pi 5 8GB paired with:

  • NVMe HAT from Pimoroni (the official one lacks a heatsink)
  • 500 GB WD Blue SN580 NVMe SSD for the OS and containers
  • Official Pi 5 Active Cooler — essential for sustained loads
  • 27W USB-C GaN charger — the Pi 5 finally needs real power delivery

Total cost: approximately €145 including the microSD boot card kept as fallback.

What I Run

services:
  pihole:
    image: pihole/pihole:latest
    restart: unless-stopped

  jellyfin:
    image: jellyfin/jellyfin:latest
    restart: unless-stopped

  nginx-proxy-manager:
    image: jc21/nginx-proxy-manager:latest
    restart: unless-stopped

  vaultwarden:
    image: vaultwarden/server:latest
    restart: unless-stopped

  homepage:
    image: ghcr.io/gethomepage/homepage:latest
    restart: unless-stopped

Five Docker containers, all running comfortably with 4–5 GB of RAM free at idle.

Performance Reality Check

The Pi 5 is a Cortex-A76 chip clocked at 2.4 GHz — a genuine step up from the Pi 4's Cortex-A72. Real-world throughput for my use case:

  • Jellyfin 1080p transcoding: Struggles. Hardware acceleration via V4L2 works for H.264 but H.265 transcoding maxes the CPU at 100%.
  • Pi-hole DNS queries: Handles 10,000+ daily queries without flinching. Averages 0.4% CPU.
  • Nginx reverse proxy: Zero measurable overhead.
  • Vaultwarden: Idle, essentially free.

The takeaway: if you are serving pre-encoded media to clients that can direct play (modern smart TVs, recent phones), the Pi 5 is perfectly capable. Transcoding is its Achilles heel.

Thermal Management

With the official active cooler, temperatures under sustained Docker Compose load stay at 55–62°C. Under a compile job, it peaks at 78°C before throttling. Without any cooling at all, I saw thermal throttling start at 80°C during boot with multiple containers pulling images.

The active cooler is non-negotiable for server use.

Power Consumption

At idle with NVMe active: 4.8W Under load (all containers serving requests): 8.2W Peak (Docker image pulls, compile): 11W

Annualised at average €0.28/kWh, this box costs approximately €12 per year to run. My old NUC used 18W at idle.

What I Would Do Differently

  1. Buy the NVMe HAT on day one, not a week later. The SD card is painfully slow for Docker volume writes.
  2. Set up automated backups immediately using rsync to an external USB drive. I lost a Vaultwarden database entry learning this lesson.
  3. Use Wireguard instead of opening ports — the Nginx Proxy Manager port exposure made me paranoid until I switched everything to VPN-only access.

Verdict

For a low-power, always-on home server running lightweight services, the Pi 5 is excellent. It replaced a €200 NUC and uses a third of the power. Just keep your Jellyfin library on direct-play-friendly codecs.