THOMAS MORANProjects
Running home labPortfolio updated regularly

Docker, networking, and home infrastructure project

Self-Hosted Home Media Server

I built a self-hosted media server on Windows 11 using Docker and a 2 TB external drive. The system connects a request interface, Radarr, Sonarr, Prowlarr, qBittorrent, and Jellyfin, while Tailscale gives my trusted devices private remote access.

Storage
2 TB external drive
Media quality
720p and 1080p
Movie size target
Up to about 12 GB
Remote access
Private Tailscale network

My role

System setup, Docker networking, storage planning, service integration, troubleshooting, and remote access

Technology

Windows 11DockerJellyfinRadarrSonarrProwlarrqBittorrentFlareSolverrTailscale

The challenge

A real problem with practical constraints.

The difficult part was making several independent services behave like one reliable system. A request needed to move through search, download, file storage, and library indexing without manual work. At the same time, I needed to keep large movie files from filling the drive and preserve each service's settings when a container restarted.

The response

A working system, not a slide deck.

I connected the containers through a shared Docker network and gave each service its own configuration and persistent storage folders. I set quality profiles to prefer 720p or 1080p, limited movie files to about 12 GB, and allowed a title to be upgraded later when a better approved copy became available. I then tested the full request-to-library workflow and used Tailscale for private access away from home.

System design

How information moves through the project.

01

Request

A movie or show is selected in the private request interface.

02

Search and management

Radarr or Sonarr works with Prowlarr to evaluate results against the approved quality profile.

03

Download and storage

qBittorrent saves the approved file to controlled storage on the 2 TB external drive.

04

Library and access

Jellyfin indexes the finished media, and trusted devices connect through Tailscale.

Engineering decisions

Choices that shaped the result.

These are the tradeoffs I would discuss in a technical interview.

01

Set storage limits before automating downloads

I limited the library to 720p and 1080p and targeted a maximum of about 12 GB per movie. This keeps storage use predictable while still allowing a future quality upgrade when it fits the same policy.

02

Keep container data persistent and organized

Each service uses its own configuration and data folders. This makes the system easier to troubleshoot and prevents a container restart from wiping out application settings.

03

Use a private network instead of exposing services

I chose Tailscale for remote access so the dashboards and media library stay on a private device network rather than being opened directly to the public internet.

Security by design

  • Administrative interfaces and download services are not intentionally exposed to the public internet.
  • Remote access is limited to trusted devices through the private Tailscale network.
  • Separate configuration and storage paths make service boundaries easier to understand and maintain.
  • The project is used only for media I am legally authorized to store and access.

Outcome

  • A request can move from selection to a managed Jellyfin library without manually transferring the file between services.
  • The 2 TB drive has defined quality and file-size limits instead of accepting unlimited media sizes.
  • Persistent folders preserve service settings and library information across container restarts.
  • I can reach the system securely from a trusted device while away from home.

Lessons learned

What I would carry into the next build.

LESSON 01

Container names, ports, networks, and storage paths have to be planned as one system.

LESSON 02

Automation is only reliable after every handoff is tested from the initial request through library indexing.

LESSON 03

Storage policy and private access are core design decisions, not cleanup work after the system is running.

Scope note

This is a private home lab for media I am authorized to use. It is not a public streaming service, its download tools are not exposed to the public internet, and the portfolio does not publish credentials or private configuration files.