01
Request
A movie or show is selected in the private request interface.
Docker, networking, and home infrastructure project
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.
My role
System setup, Docker networking, storage planning, service integration, troubleshooting, and remote access
Technology
The challenge
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
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
01
A movie or show is selected in the private request interface.
02
Radarr or Sonarr works with Prowlarr to evaluate results against the approved quality profile.
03
qBittorrent saves the approved file to controlled storage on the 2 TB external drive.
04
Jellyfin indexes the finished media, and trusted devices connect through Tailscale.
Engineering decisions
These are the tradeoffs I would discuss in a technical interview.
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.
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.
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
Outcome
Lessons learned
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.