Last year I was paying for Plex Pass, Google One, iCloud, and a Backblaze subscription all at the same time. That is over $25 a month just to access my own files and watch my own movies. It hit me one afternoon that I was basically renting access to my own data.
So I built a home server. And honestly, it changed how I think about digital ownership.
This is not a theoretical guide. I am going to walk you through exactly what I used, what I installed, and the specific steps that made it work. You can follow this even if you have never touched a command line before.
What Can a Home Server Actually Do?
A lot more than most people think. Here is what mine handles on a daily basis in 2026:
- Streaming movies and TV shows to every device in my house via Jellyfin
- Automatic backups from three laptops and two phones
- A personal cloud (like Dropbox but on my own hardware)
- A Pi-hole network-wide ad blocker
- A local password manager via Vaultwarden
- Home automation through Home Assistant
All of this runs on one small machine sitting on a shelf in my closet. It draws about 15 watts of power. My electricity cost for running it 24/7 is roughly $1.50 to $2.00 per month depending on local rates.
Picking Your Hardware
This is where most guides lose people by suggesting you need a $500 machine. You do not.
Option 1: A Used Mini PC (My Recommendation)
I use a Beelink SER5 Max, which I picked up for around $170 on Amazon. It runs an AMD Ryzen 5 5560U, comes with 16GB of RAM, and has a 500GB NVMe SSD built in. That is more than enough to run everything I listed above simultaneously.
If you are outside the US, look for the Beelink Mini S12 Pro (around $130) or the CWWK N100 series. These ship globally and have become really popular in the homelab community through 2024 and 2025.
Option 2: A Raspberry Pi 5
The Raspberry Pi 5 (8GB RAM) costs about $80 from the official store or resellers. It is slower at transcoding video, but it handles backups, Pi-hole, and Vaultwarden without breaking a sweat. I would not use it as a primary Jellyfin server if you have more than two people streaming at once.
Option 3: Repurpose an Old Laptop
Seriously. If you have a laptop from 2017 or later collecting dust, that works. Just leave it plugged in, close the lid, and change the power settings so it does not sleep. I tested this on an old Lenovo ThinkPad T470 and it ran everything just fine.
Storage Drives
For media storage, I use a 4TB Seagate IronWolf NAS drive (around $90) connected via USB 3.0 in an enclosure. You can also buy a Western Digital Elements 4TB external drive for about $80 and it works fine. Fancy NAS enclosures are not required to start.
The Operating System: Ubuntu Server vs. Unraid vs. TrueNAS
Here is my honest take. If you are just starting out, use Ubuntu Server 24.04 LTS. It is free, has the best documentation, and works with basically everything.
Unraid (starts at $49 one-time license) is fantastic if you want a GUI and do not want to touch the command line much. I know people who swear by it. I personally prefer Ubuntu because I like knowing exactly what is running on my machine.
TrueNAS SCALE is excellent for pure storage and backup use cases. If media streaming is your main goal, I would skip it and stick with Ubuntu.
Installing Ubuntu Server 24.04
- Download the ISO from ubuntu.com/download/server
- Flash it to a USB drive using Balena Etcher (free, works on Windows/Mac/Linux)
- Boot your server machine from the USB (usually F12 or Delete at startup to access BIOS)
- Follow the installer β accept defaults except for storage: choose "Use entire disk" and enable LVM
- When it asks about OpenSSH, enable it. You will need this.
- Let it install and reboot
After reboot, log in with the username and password you set. You are now looking at a terminal. That is your server.
Setting Up Docker β This Is the Important Part
Almost everything you will install runs as a Docker container. Think of containers as self-contained apps that do not mess with each other or break your system. I spent way too long figuring this out before someone told me to just use Docker Compose from the start. Do not make my mistake.
Install Docker on Ubuntu
SSH into your server from your main computer. On Mac or Linux, open Terminal and type:
ssh yourusername@yourserverip
On Windows, use PuTTY or the built-in Windows Terminal. Then run these commands one at a time:
sudo apt update && sudo apt upgrade -y
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER
newgrp docker
Then install Docker Compose:
sudo apt install docker-compose-plugin -y
Test it works:
docker run hello-world
If you see a message saying "Hello from Docker!" you are good to go.
Installing Jellyfin for Media Streaming
Jellyfin is completely free and open source. No subscription, no account required. It streams to smart TVs, phones, tablets, and browsers. I have been using it since 2023 and I genuinely prefer it to Plex at this point.
Create a folder for your Docker configs:
mkdir -p ~/docker/jellyfin
cd ~/docker/jellyfin
nano docker-compose.yml
Paste this into the file:
version: "3"
services:
jellyfin:
image: jellyfin/jellyfin:latest
container_name: jellyfin
network_mode: host
volumes:
- /home/yourusername/jellyfin/config:/config
- /home/yourusername/jellyfin/cache:/cache
- /mnt/media:/media
restart: unless-stopped
Replace /mnt/media with the actual path to your media drive. To save in nano: press Ctrl+X, then Y, then Enter.
Start Jellyfin:
docker compose up -d
Now open a browser on any device on your network and go to http://yourserverip:8096. The Jellyfin setup wizard will walk you through the rest.
Setting Up Automatic Backups
For backing up other computers to your server, I use Syncthing. It is free, peer-to-peer, and runs on Windows, Mac, Linux, Android, and iOS.
Install it on your server via Docker:
docker run -d \
--name=syncthing \
-e PUID=1000 \
-e PGID=1000 \
-p 8384:8384 \
-p 22000:22000/tcp \
-p 22000:22000/udp \
-v /home/yourusername/syncthing/config:/config \
-v /mnt/backups:/data \
--restart unless-stopped \
lscr.io/linuxserver/syncthing:latest
Access the Syncthing web interface at http://yourserverip:8384. Then install the Syncthing app on each device you want to back up, and pair them using the device ID shown in the interface.
I have three laptops and my phone all syncing to my server automatically. It happens in the background. I do not think about it.
Bonus: Add a Personal Cloud With Nextcloud
If you want a Dropbox replacement, Nextcloud is the answer. It has apps for every platform, supports file versioning, calendars, contacts, and even video calls.
"Nextcloud is what I show people when they ask me if you can really replace Google Drive with something self-hosted. The answer is yes, and it is not even close anymore."
The easiest way to get it running is with the official AIO (All-In-One) Docker image. One command:
docker run \
--sig-proxy=false \
--name nextcloud-aio-mastercontainer \
--restart always \
--publish 80:80 \
--publish 8080:8080 \
--publish 8443:8443 \
--volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config \
--volume /var/run/docker.sock:/var/run/docker.sock:ro \
nextcloud/all-in-one:latest
Then go to https://yourserverip:8080 and follow the setup steps. The AIO interface handles everything including the database and Redis cache.
Making Your Server Accessible From Outside Your Home
This is optional but useful. The easiest method in 2026 is Cloudflare Tunnel β it is free and does not require you to open any ports on your router or have a static IP address.
- Create a free Cloudflare account and add a domain you own (a cheap .com domain from Porkbun costs about $9/year)
- In the Cloudflare dashboard, go to Zero Trust β Access β Tunnels
- Create a tunnel and copy the token it gives you
- On your server, run the cloudflared Docker container with that token
- Map your services (like Jellyfin on port 8096) to subdomains like jellyfin.yourdomain.com
After that, you can access your server from anywhere in the world with no VPN required. I stream movies to my phone when I travel using this exact setup.
Managing Everything With Portainer
Once you have a few containers running, keeping track of them gets messy. Portainer is a free web UI that lets you start, stop, and monitor all your Docker containers from a browser without touching the command line again.
Install it:
docker run -d \
-p 9000:9000 \
--name portainer \
--restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest
Access it at http://yourserverip:9000. Create your admin account on first launch.
What Does This Actually Cost?
Here is a real breakdown of what I spent to get my current setup running:
- Beelink SER5 Max mini PC: $170
- 4TB WD Elements external drive: $80
- USB 3.0 hub (for extra drives): $15
- Domain name (Porkbun): $9/year
- Software: $0 (everything mentioned here is free and open source)
Total upfront: around $265. Monthly ongoing: about $2 in electricity plus $0.75/month for the domain.
Compare that to paying $10/month for Plex Pass, $10/month for Google One 2TB, and $9/month for iCloud 200GB. That is $29/month or $348/year just to access your own stuff.
My setup paid for itself in under a year. And now I actually own my data.
Look, this takes a weekend to set up properly. You will hit a weird error at some point β I always do. The r/homelab and r/selfhosted communities on Reddit are genuinely helpful when you get stuck. Post your error message and someone will usually respond within an hour.
Once it is running though? You barely think about it. It just works, quietly, in the background. And that is the whole point.
