Plex or Jellyfin Media Server
Run your own Netflix-style server for the videos and music you actually own. Plex and Jellyfin both work on the Pi — Plex is more polished, Jellyfin is fully open source and free of accounts. Pick one.
Direct play only. A Pi can serve files but it cannot transcode 1080p+ video in real time. Keep clients in sync with your library's formats (MP4/H.264 is safest) and you'll be fine. Anything that needs transcoding will stutter.
You'll need
- Raspberry Pi 4 (4GB+) or Pi 5
- External USB 3 hard drive or SSD for media (don't store media on the SD card)
- Wired Ethernet — Wi-Fi will choke on HD streams
- Raspberry Pi OS (64-bit) installed and updated
Option A: Plex
Add the Plex repository:
curl https://downloads.plex.tv/plex-keys/PlexSign.key | sudo apt-key add -
echo deb https://downloads.plex.tv/repo/deb public main | sudo tee /etc/apt/sources.list.d/plexmediaserver.list
sudo apt update
sudo apt install plexmediaserver
Open http://<pi-ip>:32400/web, sign in with a Plex account, and walk through the library setup wizard.
Option B: Jellyfin
curl https://repo.jellyfin.org/install-debuntu.sh | sudo bash
Open http://<pi-ip>:8096 and follow the first-run setup. No account required — local admin user only.
Mount your media drive
Find the drive:
lsblk
Get its UUID and filesystem:
sudo blkid
Add to /etc/fstab so it mounts on boot:
UUID=<uuid> /mnt/media ext4 defaults,nofail 0 2
The nofail flag is important — without it, a missing drive will block boot.
sudo mkdir -p /mnt/media
sudo mount -a
Organize for the scanner
Both servers identify content by folder structure:
/mnt/media/
Movies/
The Matrix (1999)/
The Matrix (1999).mkv
TV/
Severance/
Season 01/
Severance - S01E01 - Good News About Hell.mkv
Troubleshooting
- Playback buffers? Check the dashboard. If "Transcoding" shows up, change the client's quality setting to "Original" / direct play.
- Server not visible on the network? Check the firewall:
sudo ufw status. Allow ports 32400 (Plex) or 8096 (Jellyfin). - Drive doesn't mount on reboot? Test fstab safely with
sudo mount -abefore rebooting — fixes the error there instead of leaving you with a broken boot. - Remote access without VPN? Combine with Cloudflare Tunnel to expose the server safely.