Skip to main content
Mini PC Lab logo
Mini PC Lab Tested. Benchmarked. Reviewed.
tutorials

How to Set Up a Plex Media Server on a Mini PC | Mini PC Lab

By Mini PC Lab Team · February 4, 2026 · Updated March 27, 2026

This article contains affiliate links. If you purchase through our links, we may earn a commission at no extra cost to you. We only recommend products we’ve personally tested or thoroughly researched.

Plex Media Server setup on mini PC hero image

Plex on a mini PC gives you Netflix-quality streaming from your own movie and TV collection, playable on any device — phone, TV, browser, or Plex app. This guide covers installation via Docker, library configuration, and hardware transcoding setup so your mini PC isn’t burning CPU to convert video formats.

Before You Start

Requirements:

  • Mini PC running Linux (Debian 12 or Ubuntu 24.04 recommended)
  • Docker installed — see our Docker setup guide if needed
  • Storage for your media library (external USB drive, NAS, or internal NVMe)
  • Plex account (free) at plex.tv — required for the initial claim token
  • Estimated time: 20–30 minutes

Hardware note: Hardware transcoding works well on Intel (Quick Sync) and AMD (VA-API with Radeon 780M). The Intel N150 handles 1080p hardware transcoding. For 4K, use an AMD Ryzen (SER9 PRO+) or Intel Core mini PC with Quick Sync. See our best mini PC for Plex guide for specific recommendations.


Step 1: Prepare Your Media Storage

Plex needs a consistent path to your media files. Set up your storage before configuring Plex.

For USB external drives:

# Find your drive
lsblk
# Example output shows /dev/sda with your drive

# Create a mount point
sudo mkdir -p /media/plex

# Auto-mount on boot — add to /etc/fstab
# First, find the UUID of your drive
sudo blkid /dev/sda1

# Add to /etc/fstab (replace UUID with yours)
echo "UUID=your-uuid-here /media/plex ext4 defaults,nofail 0 2" | sudo tee -a /etc/fstab

# Mount now
sudo mount -a

For internal NVMe (second drive or dedicated partition):

# Format if new (replace /dev/nvme1n1 with your device)
sudo mkfs.ext4 /dev/nvme1n1

# Get UUID
sudo blkid /dev/nvme1n1

# Mount
sudo mkdir -p /media/plex
echo "UUID=your-uuid-here /media/plex ext4 defaults 0 2" | sudo tee -a /etc/fstab
sudo mount -a

Recommended directory structure:

/media/plex/
├── Movies/
│   ├── The Matrix (1999)/
│   │   └── The Matrix (1999).mkv
│   └── Inception (2010)/
│       └── Inception (2010).mkv
├── TV Shows/
│   └── Breaking Bad/
│       ├── Season 01/
│       │   ├── Breaking.Bad.S01E01.mkv
│       │   └── Breaking.Bad.S01E02.mkv
│       └── Season 02/
└── Music/

Plex uses this naming format for automatic metadata matching. The year in parentheses for movies is required for accurate matching.


Step 2: Get Your Plex Claim Token

A claim token links your Plex installation to your Plex account during initial setup.

  1. Log in at plex.tv/claim
  2. Copy the token (it looks like claim-xxxxxxxxxxxxxxxxxxxx)
  3. You have 4 minutes to use it — generate it right before running the container

Step 3: Install Plex via Docker Compose

mkdir -p ~/services/plex
cd ~/services/plex

Create the docker-compose.yml:

services:
  plex:
    image: lscr.io/linuxserver/plex:latest
    container_name: plex
    network_mode: host          # Required for Plex device discovery
    environment:
      - PUID=1000               # Your user's ID (check with: id -u)
      - PGID=1000               # Your group's ID (check with: id -g)
      - TZ=America/New_York
      - VERSION=docker
      - PLEX_CLAIM=claim-xxxxxxxxxxxxxxxxxxxx  # Replace with your token
    volumes:
      - ./config:/config        # Plex config, database, metadata
      - /media/plex:/media      # Your media library
    devices:
      - /dev/dri:/dev/dri       # GPU passthrough for hardware transcoding
    restart: unless-stopped
docker compose up -d

Plex starts and is accessible at http://[YOUR-IP]:32400/web.


Step 4: Initial Plex Setup

Open http://[YOUR-IP]:32400/web in a browser.

  1. Name your server — something memorable like “Home Plex”
  2. Add libraries:
    • Click “Add Library” → select type (Movies, TV Shows, Music)
    • Set the folder path to /media/Movies (or wherever your media is inside the container — we mapped /media/plex on the host to /media in the container)
    • Click “Add Library” — Plex starts scanning

The initial library scan can take 5–30 minutes depending on your collection size. Plex fetches metadata, cover art, and episode descriptions from online databases.


Step 5: Enable Hardware Transcoding

Hardware transcoding uses your mini PC’s GPU to convert video formats instead of the CPU. This is the difference between smooth 4K playback and a maxed-out CPU.

Enable in Plex settings:

  1. Open Plex web UI → Settings (wrench icon)
  2. Navigate to Settings → Transcoder
  3. Enable “Use hardware acceleration when available”
  4. Enable “Use hardware-accelerated video encoding”

Verify GPU access on the host:

# Check GPU render node exists
ls /dev/dri/
# Should show: card0  renderD128

# Check GPU is detected by the Intel/AMD driver
ls -la /dev/dri/renderD128

Add your user to the render group for GPU access:

# Check what group owns renderD128
ls -la /dev/dri/renderD128
# Example: crw-rw---- 1 root render ...

# Add your user (and the docker user) to that group
sudo usermod -aG render $USER
sudo usermod -aG video $USER

Intel Quick Sync verification:

# Install Intel media driver tools
sudo apt install -y intel-media-va-driver vainfo

# Check VA-API support
vainfo 2>&1 | grep VAProfileH264
# Should show H264 encode/decode capabilities

AMD Radeon 780M VA-API verification:

# Install AMD VA-API driver
sudo apt install -y mesa-va-drivers vainfo

# Check support
vainfo 2>&1 | grep -i H264
# Should show H264 capabilities via radeonsi

Test hardware transcoding:

Start playing a video in Plex and force transcoding by setting quality to a lower setting than the source. Go to Plex Dashboard → Active Streams. If you see “(hw)” next to the transcode activity, hardware acceleration is working.


Step 6: Enable Remote Access

To watch Plex outside your home network:

  1. Settings → Remote Access
  2. Enable “Allow me to access my media outside my home”
  3. Plex uses relay servers by default — no port forwarding required

Optional: Direct connection (better performance):

Forward port 32400 on your router to your mini PC’s IP. In Plex Remote Access settings, enter your external IP and port 32400. Plex will test the direct connection.

Best option for remote access: Tailscale

Connect your phone and server via Tailscale instead of opening ports. Your Plex server appears on the Tailscale network and direct playback works without relay servers. No router configuration needed.


Jellyfin as a Free Alternative

Jellyfin is a fully open-source, free alternative to Plex with no subscription requirement for hardware transcoding. If you don’t want a Plex Pass, Jellyfin handles everything Plex does including hardware transcoding via VA-API.

# ~/services/jellyfin/docker-compose.yml
services:
  jellyfin:
    image: lscr.io/linuxserver/jellyfin:latest
    container_name: jellyfin
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=America/New_York
    volumes:
      - ./config:/config
      - /media/plex:/data/media
    ports:
      - "8096:8096"
    devices:
      - /dev/dri:/dev/dri       # Hardware transcoding
    restart: unless-stopped

Access at http://[YOUR-IP]:8096. The setup wizard is similar to Plex. Enable hardware transcoding under Admin → Dashboard → Playback → Hardware Acceleration → select “Video Acceleration API (VAAPI).”


Troubleshooting

Hardware transcoding shows “Conversion failed”

Usually a driver or permission issue. Verify /dev/dri/renderD128 exists, your user has render group access, and vainfo shows VA-API capabilities. Restarting Docker after adding user to render group is required.

Library scan finds no media

Check that your folder names match Plex’s expected format. Movies need the year: Movie Name (2024)/Movie Name (2024).mkv. TV shows need Season folders: Show Name/Season 01/Show.S01E01.mkv. Verify file permissions — Plex runs as the PUID/PGID you specified.

Plex shows buffering on remote playback

Check bandwidth first: 1080p direct play needs ~10Mbps upload. If upload is limited, enable transcoding and set a lower quality cap in Plex settings. For 4K remote playback, hardware transcoding is required on most network connections.

”Not claimed” — server doesn’t appear in Plex web

The claim token expired (4-minute window). Stop the container, remove the config directory, regenerate a new claim token, and run docker compose up -d again. Only needed once.


What to Do Next

  • Add Overseerr for request management — users can request new movies/shows
  • Add Tautulli for Plex usage statistics and notifications
  • Set up Radarr + Sonarr + qBittorrent for automated media acquisition
  • See our best mini PC for Plex guide if you need more transcoding headroom

Quick Price Summary


→ Check Current Price: Beelink EQ14 on Amazon — Intel N150, 1080p hardware transcoding via Quick Sync, 6W idle → Check Current Price: Beelink SER9 PRO+ on Amazon — Ryzen 7, Radeon 780M for 4K VA-API transcoding, 8W idle → Check Current Price: GMKtec K11 on Amazon — Ryzen 9 8945HS, best iGPU for simultaneous 4K streams