Last Updated:

Ultimate Guide to Host Jellyfin (for Plex Users Wanting Free Remote Access)

Joseph Jo

Why Switch from Plex to Jellyfin?

If you’re frustrated with Plex's recent shift towards paid remote access, Jellyfin is the perfect alternative. It's completely free and open-source, and with this guide, you’ll learn how to host Jellyfin using Docker and expose it remotely—without needing a VPN or any subscription.

What You’ll Need Before Starting

If you've been using Plex, you likely already have everything required:

  • ✅ A server or machine that can run Linux + Docker

  • ✅ Media files stored in accessible directories

  • ✅ A domain (free via services like No-IP or Cloudflare)

  • ✅ Optionally: a transcoding GPU or iGPU (unlocked for free with Jellyfin!)

Step 1: Create a Docker Compose File for Jellyfin

services:
  jellyfin:
    image: jellyfin/jellyfin
    container_name: jellyfin
    environment:
      - TZ=Asia/Kolkata   # Replace with your timezone
    volumes:
      - /home/user/jellyfin/config:/config
      - /home/user/jellyfin/cache:/cache
      - /media/movies:/movies
      - /media/shows:/shows
    ports:
      - 8096:8096
    devices:
      - /dev/dri/renderD128:/dev/dri/renderD128
    restart: unless-stopped

📌 Tip: If you previously enabled hardware-accelerated transcoding in Plex, reuse the same GPU/iGPU setup.

✅ Run it:

docker-compose up -d

Then open http://<your-server-ip>:8096 to complete the Jellyfin setup.

Step 2: Set Up Remote Access with Caddy (Reverse Proxy)

Using Caddy gives you automatic HTTPS with Let's Encrypt and an easy-to-manage reverse proxy.

🧱 Caddy Compose File:

services:
  caddy:
    container_name: caddy
    image: caddy:latest
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /home/user/caddy/Caddyfile:///etc/caddy/Caddyfile
      - /home/user/caddy/site:/srv
      - /home/user/caddy/data:/data
      - /home/user/caddy/config:/config

✏️ Sample Caddyfile:

yourdomain.com {
  reverse_proxy 192.168.1.100:8096
}

Replace yourdomain.com with your actual domain and 192.168.1.100 with your Jellyfin server's local IP.


Step 3: Open Ports for Remote Access

Make sure your router is forwarding ports 80 and 443 to your Caddy host.

If your public IP is dynamic, set up Dynamic DNS (DDNS) with a provider like:

You can also use Docker-based DDNS containers if your router doesn’t support DDNS natively.

Step 4: Launch and Test Remote Access

Deploy Caddy:

docker-compose up -d

✅ Now visit your domain in a browser (https://yourdomain.com) and enjoy free, remote Jellyfin access.

🛠 If you get certificate errors or timeouts, check:

  • Logs (docker logs caddy)

  • Router port forwarding

  • Domain resolution (use nslookup yourdomain.com)

Bonus: Use This Setup for Plex Too!

Even if you decide to keep Plex, you can use Caddy with the same reverse proxy setup to expose Plex instead of paying for Plex Pass remote features.

plex.yourdomain.com {
  reverse_proxy 192.168.1.101:32400
}

Conclusion: Cut the Cord with Plex’s Paywall

By following this guide, you've:

Deployed Jellyfin securely with Docker
Enabled remote access without VPN or subscriptions
Gained full control over your media hosting

Enjoy free, powerful, open-source media streaming with Jellyfin!

🔍 Related Searches We Target

  • how to host jellyfin server

  • jellyfin vs plex for remote access

  • best free plex alternative

  • jellyfin docker setup guide

  • access jellyfin without VPN

  • jellyfin reverse proxy caddy