
Complete beginner's guide to building a home server in 2026. Hardware options from $0 (old laptop) to $200 (N100 mini PC), Ubuntu Server installation, Docker setup, and your first services โ Pi-hole, Vaultwarden, Jellyfin.
A home server is a computer that runs 24/7 on your local network, hosting services you'd otherwise pay monthly subscriptions for โ or services that simply don't exist as cloud products. Ad blocking for your whole home. A private photo backup that actually respects your data. Media streaming without content libraries disappearing overnight.
This guide takes you from zero to a running home server in a weekend, without requiring a computer science degree.

A home server is just a PC that:
"Server" sounds intimidating, but you're not running enterprise infrastructure. A basic home server can be a $60 used mini PC or even an old laptop. The "server" part is just software.


| Cloud Service | Monthly Cost | Self-Hosted Alternative | Hardware Cost |
|---|---|---|---|
| Google One 2TB | $10/month | Nextcloud | ~$0 (existing hardware) |
| Plex Pass | $5/month | Jellyfin (free) | ~$0 |
| 1Password Family | $5/month | Vaultwarden | ~$0 |
| LastPass | $3/month | Bitwarden/Vaultwarden | ~$0 |
| Spotify | $11/month | Navidrome + your music | ~$0 |
| Total | $34/month ($408/year) | Self-hosted | $60โ$200 one-time |
Break-even: 2โ6 months, then you're saving $408/year.
You don't need specialized server hardware. Any of these work:
Dell Optiplex 3080 Micro ($55โ$80 on eBay):
Beelink EQ12 or similar N100 mini PC ($150โ$180 new):
If you have an old laptop gathering dust:
Downsides: Older laptops draw more power (15โ35W), harder to upgrade storage.
An old desktop can work but typically draws 60โ150W idle โ $70โ$180/year in electricity. Only worth it if you're doing heavy workloads (lots of VMs, Plex with 5+ streams) or if the hardware is free.
| Use Case | Storage Needed |
|---|---|
| Pi-hole, Uptime Kuma, lightweight apps | 32โ64GB SSD |
| Nextcloud (personal files, 1 user) | 500GBโ2TB |
| Jellyfin/Plex media library | 2โ20TB+ |
| Immich (photo backup, 1 user) | 500GBโ2TB |
| Full home server stack | 2TB+ recommended |
Budget storage strategy:
You'll install Linux. Don't be scared โ you interact with it via a web browser 90% of the time.
Recommended: Ubuntu Server 24.04 LTS
Why Ubuntu:
Alternatives:
After reboot, your server shows its IP address on screen:
Ubuntu 24.04 LTS servername tty1
servername login: _
Check the IP in your router's DHCP client list, or read it from the server screen.
From your main computer:
# macOS/Linux terminal
ssh username@192.168.1.100 # Replace with your server's IP
# Windows โ use PuTTY or Windows Terminal (built in on Win 11)
# Or install Windows Subsystem for Linux (WSL)
You now control your server from your laptop. You never need a keyboard/mouse attached to the server again.
Set a static IP (important):
Go to your router โ DHCP settings โ Find your server's MAC address โ Assign a permanent IP (e.g., 192.168.1.100). This prevents the IP from changing.
# Update everything
sudo apt update && sudo apt upgrade -y
# Install helpful tools
sudo apt install -y curl wget git htop iotop net-tools unattended-upgrades
# Enable automatic security updates
sudo dpkg-reconfigure unattended-upgrades
# Select "Yes" when prompted
# Check your server's IP
ip a
# Check disk space
df -h
# Check RAM usage
free -h
Docker is how you'll install almost every service on your home server. Instead of complex installation scripts, you just run a single command and the service appears.
# Install Docker (official method)
curl -fsSL https://get.docker.com | sh
# Add yourself to the docker group (so you don't need sudo)
sudo usermod -aG docker $USER
# Apply group change without logging out
newgrp docker
# Test it works
docker run hello-world
Docker Compose lets you define multiple services in one file:
# Compose is included with modern Docker, verify:
docker compose version
# Should show: Docker Compose version v2.x.x
Pi-hole blocks ads and tracking domains across your entire home network. It's the perfect first service: immediately useful, low resources, and teaches you the Docker pattern.
Create your first compose file:
mkdir -p ~/services/pihole
cd ~/services/pihole
nano docker-compose.yml
Paste this:
version: "3"
services:
pihole:
image: pihole/pihole:latest
container_name: pihole
restart: unless-stopped
ports:
- "53:53/tcp"
- "53:53/udp"
- "8080:80"
environment:
TZ: "America/New_York"
WEBPASSWORD: "changeme123"
volumes:
- ./etc-pihole:/etc/pihole
- ./etc-dnsmasq.d:/etc/dnsmasq.d
cap_add:
- NET_ADMIN
Start it:
docker compose up -d
# Check it's running
docker compose ps
# See logs
docker compose logs pihole
Now open http://192.168.1.100:8080/admin in your browser. You should see the Pi-hole dashboard.
Connect your network to Pi-hole:
All devices on your network now use Pi-hole for DNS. You'll immediately see ad queries being blocked in the dashboard.
The pattern is the same for every service:
mkdir -p ~/services/servicenamedocker-compose.yml with the service configdocker compose up -dUptime Kuma (monitor your services):
services:
uptime-kuma:
image: louislam/uptime-kuma:1
container_name: uptime-kuma
restart: unless-stopped
ports:
- "3001:3001"
volumes:
- ./data:/app/data
Vaultwarden (password manager):
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
ports:
- "8180:80"
environment:
SIGNUPS_ALLOWED: "false"
volumes:
- ./data:/data
Jellyfin (media server):
services:
jellyfin:
image: jellyfin/jellyfin:latest
container_name: jellyfin
restart: unless-stopped
ports:
- "8096:8096"
volumes:
- ./config:/config
- ./cache:/cache
- /mnt/media:/media:ro
devices:
- /dev/dri:/dev/dri # Intel GPU for hardware transcoding
# Start all services in current directory
docker compose up -d
# Stop all services
docker compose down
# See running containers
docker ps
# See all containers (including stopped)
docker ps -a
# Follow logs for a container
docker logs -f container_name
# Restart a container
docker restart container_name
# Update a container to latest version
docker compose pull && docker compose up -d
# Remove stopped containers + unused images (cleanup)
docker system prune -f
Your services are only accessible on your local network by default. To access them remotely:
Tailscale creates a private encrypted network between your devices. No port forwarding, no public IP exposure.
# Install on server
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
# Install Tailscale app on phone/laptop
# Both devices join your Tailscale network
# Access server via its Tailscale IP from anywhere
Install WireGuard on your server and clients. More setup but full control.
Cloudflare proxies traffic to your server without exposing your home IP. Good for sharing services with others.
Do NOT just forward ports from your router to every service โ this exposes them to the internet without authentication.
A server without backups is an accident waiting to happen.
3-2-1 Backup Rule:
Simple backup script:
#!/bin/bash
# Run nightly via cron: 0 2 * * * /home/user/backup.sh
BACKUP_DEST="/mnt/backup"
DATE=$(date +%Y%m%d)
rsync -av --delete ~/services/ "$BACKUP_DEST/services-$DATE/"
# Keep last 7 days
find "$BACKUP_DEST" -maxdepth 1 -name "services-*" -mtime +7 -exec rm -rf {} \;
echo "Backup complete: $(date)"
Add cron job:
crontab -e
# Add line: 0 2 * * * /home/username/backup.sh
Once you have services running, you want to know if something breaks.
Uptime Kuma (installed above) monitors services and sends alerts via:
Set up alerts for any service going down, and you'll know within 1 minute of an outage.
For system metrics (CPU, RAM, disk, temperatures):
docker run -d --name=netdata -p 19999:19999 --pid=host --network=host netdata/netdata1. Not setting a static IP Services become inaccessible when the DHCP lease expires and the IP changes. Set a static assignment in your router for the server's MAC address.
2. Storing data inside containers
Always use volume mounts (./data:/container/path). Data inside a container disappears when you recreate it.
3. Running as root
Don't sudo docker everything. Add yourself to the docker group (step 4) and run as your normal user.
4. No backups before experiments Before trying something new (new service, config change), back up your compose files and data directories.
5. Forgetting to set restart policies
Always include restart: unless-stopped in your compose files. Otherwise, services don't come back after a server reboot.
6. No UPS (Uninterruptible Power Supply) A sudden power outage can corrupt databases. A cheap UPS ($30โ$60) gives you 10โ20 minutes to gracefully shut down.
Week 1:
Week 2:
Week 3:
Month 2:
Q: Do I need to know Linux to run a home server?
You need to know very basic Linux commands (listed in this guide). You'll use the terminal to SSH in and run Docker commands, but most services are managed through web UIs. If you can follow a tutorial, you can run a home server. The learning curve is steepest in the first week, then flattens dramatically.
Q: How long does it take to set up a home server?
Installing Ubuntu + Docker + Pi-hole takes 2โ3 hours including hardware setup. Each additional service is 5โ20 minutes. A full stack (Jellyfin, Nextcloud, Home Assistant, Vaultwarden) realistically takes a weekend.
Q: Is it safe? Can I get hacked?
Your local services are not accessible from the internet unless you explicitly expose them. The default Docker configuration is local-only. Use Tailscale for remote access instead of port-forwarding, use strong passwords, and keep software updated (Watchtower automates this), and you'll be far more secure than most cloud services.
Q: What if something breaks?
Things will break occasionally. This is normal and part of the learning experience. Most issues have documented solutions on Reddit (r/selfhosted, r/homelab) or GitHub. Docker makes recovery easy: delete the container, fix the config, and restart. Your data survives in the mounted volumes.
Q: Do I need a domain name?
No. You can access everything via local IP address and port. A domain with SSL makes it more convenient (especially for mobile apps that require HTTPS), but it's not required to start.
Once you're comfortable with the basics:

Hardware
New to home servers? Start here. Compare hardware options, discover 8 popular use cases, and learn how to run 10 self-hosted services on an Intel N100 mini PC for just $10/year in electricity.

Builds
Complete docker-compose.yml to run Jellyfin, Nextcloud, Home Assistant, Pi-hole, Vaultwarden, Immich, Homepage, Uptime Kuma, Tailscale, and Portainer on an Intel N100 mini PC under 15W.
Use Cases
From replacing Netflix to running local AI, a home server running on 8W can do far more than you'd expect. Here are 15 real uses with app recommendations โ and the cost breakdown that makes it worth it.
Use our Power Calculator to estimate how much your server will cost to run 24/7.
Try Power Calculator