/jellytin

Primary LanguageShell

Jellytin

Put your local Jellyfin server in a tin, and securely serve it up on the internet 🚀

Intro

This project is especially helpful if you:

  1. Have a local Jellyfin server that you want to access over the internet
  2. Do not currently have any infrastructure to expose services to the internet
  3. Wish to hide + secure Jellyfin behind an identity provider
  4. Wish to use Jellyfin clients (Android, etc.)

If you're wondering, "why can't I just expose my Jellyfin server to the internet?" I recommend reading Collection of potential security issues in Jellyfin

The final deployment looks like this:

👤 -> VPS -> Nginx -> Tailscale -> Nginx -> Authentik -> Jellyfin

Dependencies

  • Virtual Private Server (VPS)
    • BuyKVM is $2/month, but any VPS with an IPv4 address will do
    • Additional layer of security, e.g. hide your personal IP
  • Nginx Proxy Manager
    • Management UI for Nginx
  • Tailscale
    • Tunnel from VPS to your local network
  • Authentik
    • Provide authentication via LDAP, SSO, etc.
  • Jellyfin
    • You should already have a Jellyfin server

Future Improvements

  1. Keep an eye on Jellyfin's SSO plugin and incorporate it here, once it is stable and no longer "100% alpha software."

  2. Await NPM's Fail2Ban feature request.

  3. Await NPM's CrowdSec feature request.

Footnote

If you're using a Raspberry Pi, then you will need the 64-bit OS.

Instructions

Install docker & docker-compose

Deploy Authentik

Deploy Nginx Proxy Manager

Purchase & Configure Cloudflare Domain

Harden Your VPS

Configure Tailscale

Deploy VPS Tunnel

Deploy NPM Tunnel

Configure Tunnel Routing

Configure Nginx -> Authentik

Configure Authentik -> Jellyfin

Deploy Authentik LDAP Service

Configure Jellyfin for LDAP Authentication

Create Jellyfin Users via Authentik

Configure NPM to Enable Jellyfin Client Apps


The End 🎉

You can use the helper script at ./all.sh to control this stack.