Jellyfin + qBittorent + Tailscale Media Server Setup

Call me a nerd, but I’ve always been a huge Marvel fan. And with Avengers: Doomsday on the horizon, my friends and I came to the only reasonable conclusion: we need to binge Marvel again. Not just the Avengers movies. Not just the greatest hits. I’m talking about sitting down and making our way through the whole thing—movies, series, all of it. There was only one problem. Getting everyone together in the same room every time we wanted to watch something was never going to happen. So I thought of a solution. Why not build our own streaming service? Not Netflix. Not Disney+. Something that belongs to us. There was just one small complication. All I have is a laptop, an external hard drive, and a dream.

Building the Server

The first thing I discovered was Jellyfin, an open-source media server that basically lets you turn your own computer into your personal streaming service. Perfect. I had an old laptop. I had an external hard drive. And, perhaps most dangerously, I had access to a Bash shell. What could possibly go wrong? I started learning how to set Jellyfin up and point it toward the external drive where my media library would live. But I quickly ran into one of those problems that sounds incredibly boring until you’re the person dealing with it: mounting the drive reliably. I didn't want to manually fix everything whenever the drive failed to mount. If I was going to build this thing, I wanted it to behave like an actual server. So I wrote a Bash script.

#!/bin/bash

        if ! mountpoint -q /mnt/media/ashton; then
            sudo mount -t ntfs3 -o force /dev/sdd2 /mnt/media/ashton
        fi

        sudo systemctl restart jellyfin

The script automatically mounts my external drive. If it encounters certain NTFS errors, it attempts to repair the filesystem, mounts the drive again, and then restarts Jellyfin. It’s a small thing, but watching a script you wrote actually solve a problem for you is ridiculously satisfying. Suddenly, this beat-up little laptop on my desk wasn't just a laptop anymore. It was the server.

And...We're Live

Once the external drive mounts successfully and Jellyfin starts, I can open the server and finally see this: A sign-in page. My sign-in page. There is something strangely magical about typing an IP address into your browser and being greeted by something that you built. I created my account, signed in, and there it was. My own little streaming service. Except there was one glaring problem. A media server without media is essentially a very elaborate empty shelf.

sign in page of jellyfin

Building the Library

For content I’m legally entitled to store and stream, I use tools such as qBittorrent to manage downloads and transfers. Once everything was organized and Jellyfin scanned the library, the project finally started looking less like a weekend experiment and more like an actual streaming platform. Movies got their own category. Series got theirs.

screenshot of the library

I filled the library with our Marvel binge material, then started adding some personal favorites and classics too. Because apparently building a server specifically to binge Marvel wasn't nerdy enough already. And this is where Jellyfin really shines. It takes folders sitting on an external hard drive and transforms them into something that actually feels like a streaming service—posters, descriptions, seasons, episodes, watch progress, profiles. Files become a library.

Becoming the Administrator

Then there's the dashboard. From here, I can see which devices are connected to my server, manage users, monitor activity, and eventually watch my friends appear as they start using it. For approximately five minutes, this amount of power makes you feel like the administrator of some enormous data center. Then you look beside you and remember the "data center" is an old laptop with an external hard drive plugged into it. Still counts.

jellyfin dashboard

But the dashboard revealed the next problem. Everything worked beautifully inside my network. My friends, unfortunately, do not live inside my house.

The Tailscale Problem

Normally, my Jellyfin server is accessible through an address on my local network. That's fine when I'm home. But what happens when I'm somewhere else? More importantly, how are my friends supposed to connect? That rabbit hole led me to Tailscale. Tailscale creates a private network between approved devices, allowing them to communicate securely even when they're sitting on completely different networks. In other words, my server could be sitting at home while I—or one of my friends—could be somewhere else entirely and still connect to it. I configured Tailscale, added the machines that could run Jellyfin, and suddenly my ridiculous little project crossed a very important threshold: it escaped my house. Now I could enter the server address from another connected device... ...and there was Jellyfin. The same sign-in screen. The same library. Anywhere.

The Avengers Initiative

Of course, there was one final piece missing. My friends. So I created individual Jellyfin accounts for everyone. Then came perhaps the most technically demanding part of the entire project: explaining to my friends how the hell to connect to it. I wrote them a guide explaining how to install Tailscale and Jellyfin, join the private network, find the correct server, and sign in using their individual accounts. Was the guide slightly overkill? Probably. Did I essentially write onboarding documentation for my friends so they could watch Spider-Man? Absolutely. And I regret nothing.

From a laptop and a Dream

And that's it. What started as: "Hey, we should binge Marvel before Avengers: Doomsday." Somehow I am learning about Jellyfin, Bash scripting, filesystem mounting, NTFS troubleshooting, media management, private networking, remote access, user accounts, and server administration. All because I wanted to watch superheroes punch aliens with my friends. But that's what I love about projects like this. You begin with a stupidly simple idea. Then you encounter a problem. So you learn something. That solution creates another problem. So you learn something else. And somewhere along the way, without really noticing it, you've built something. My setup isn't sitting inside a pristine server rack. There are no enterprise-grade machines humming away in some climate-controlled room. There's no team keeping everything online. There's just an old laptop. An external hard drive. A Bash script. A bunch of friends waiting to watch Marvel. And a dream. Now, when one of us feels like watching something, we don't have to be in the same house—or even on the same network. We just connect. Sign in. Pick a movie. And press play. Avengers: Doomsday, we're ready.