
Ultimate Guide to Host Jellyfin (for Plex Users Wanting Free Remote Access)
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:
🌐 No-IP – https://www.noip.com
🌐 Cloudflare – https://www.cloudflare.com
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