Starting a homelab is one of the most rewarding journeys for any tech enthusiast. Whether you are a student, a developer, or just someone who loves tinkering with technology, a homelab provides a safe, sandboxed environment to experiment with networking, server administration, containerization, and data storage.

In this guide, we will walk through the essential steps to building your first homelab server in 2026 — from choosing hardware to deploying your first Docker service — keeping cost-efficiency and modularity at the forefront.

Why Build a Homelab?

Before we dive into hardware and software, let’s define why you would want to spend time and resources on a homelab.

  1. Learning Opportunity: There is no better way to master Linux, Docker, or Kubernetes than by running them on your own metal.
  2. Data Privacy: By hosting your own cloud storage (Nextcloud), media server (Jellyfin), or password manager (Vaultwarden), you take control of your data away from Big Tech.
  3. Sandbox Environment: Test new software, configurations, or CI/CD pipelines without fear of breaking your primary workstation.
  4. Convenience: Host useful services that make your daily life easier, like ad-blockers (Pi-hole) or local dashboard aggregators (Heimdall).

1. Hardware Selection: Start Small, Grow Large

One of the biggest pitfalls for beginners is “analysis paralysis” regarding hardware. You do not need a rack-mount server to start. In fact, for most, a decommissioned office PC or a low-power Mini PC is the perfect starting point.

Recommended Entry-Level Hardware

  • Used SFF (Small Form Factor) Office PCs: Look for Dell OptiPlex, HP EliteDesk, or Lenovo ThinkCentre units with Intel Core i5 or i7 processors (8th gen or newer). These are power-efficient, quiet, and cost $80–200 on eBay.
  • Mini PCs: Devices like the Beelink SER5, Minisforum UM690, or Intel NUC offer high performance in a tiny footprint, often consuming less than 15W at idle.
  • Old Laptops: A laptop with a broken screen is basically a server with a built-in UPS (the battery!) and keyboard. Just keep the lid open for airflow.

Key Considerations

  • RAM is King: In a homelab, CPU is rarely the bottleneck; RAM is. Aim for at least 16GB. If you plan to run many virtual machines (VMs), 32GB+ is ideal.
  • Storage: Start with a 256GB+ SSD for your OS and main apps. Add a large mechanical HDD later for media or backups.
  • Power Budget: Calculate annual electricity cost: watts × 24h × 365 / 1000 × kWh_rate. A 30W server costs ~$30/year at $0.12/kWh.

2. Choosing Your Operating System (The Hypervisor)

Once you have hardware, you need an OS. For a modern homelab, a hypervisor is highly recommended, allowing you to run multiple virtual machines and containers on a single machine.

Option A: Proxmox VE (Recommended)

Proxmox is based on Debian and provides a web-based interface for managing KVM virtual machines and LXC containers. It’s free, open-source, and has an incredibly active community.

Install Proxmox on bare metal:

# 1. Download the ISO from proxmox.com
# 2. Write to USB: sudo dd if=proxmox-ve_*.iso of=/dev/sdX bs=4M status=progress
# 3. Boot from USB and follow the installer prompts
# 4. After install, access web UI at https://192.168.1.10:8006

# Switch to no-subscription repo for free updates:
sed -i 's/^deb/# deb/' /etc/apt/sources.list.d/pve-enterprise.list
echo "deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription" >> /etc/apt/sources.list
apt update && apt dist-upgrade -y

Option B: Ubuntu Server + Docker

If you prefer a simpler setup without full virtualization:

# Install Ubuntu Server 24.04 LTS
# Then install Docker:
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker

# Test it:
docker run hello-world

3. Essential Software Services to Install

Once your hypervisor or OS is running, here are the must-have services:

Step 1: Set Up Docker (Inside Proxmox LXC or Ubuntu)

If using Proxmox, create a privileged LXC container for Docker (nesting enabled):

pct create 100 local:vztmpl/debian-12-standard_12.7-1_amd64.tar.zst \
  --hostname docker-host \
  --storage local-lvm \
  --memory 4096 \
  --cores 2 \
  --net0 name=eth0,bridge=vmbr0,ip=dhcp \
  --features nesting=1 \
  --rootfs local-lvm:20
pct start 100
pct enter 100

Inside the container, install Docker:

curl -fsSL https://get.docker.com | sh

Step 2: Deploy Pi-hole for Network-wide Ad Blocking

docker run -d --name pihole \
  -p 53:53/tcp -p 53:53/udp -p 8081:80 \
  -v pihole_etc:/etc/pihole \
  -v pihole_dnsmasq:/etc/dnsmasq.d \
  -e WEBPASSWORD=your-admin-password \
  -e TZ=Asia/Jakarta \
  --restart unless-stopped \
  pihole/pihole:latest

Important: Set your router’s DHCP to hand out your homelab IP as the primary DNS. All devices will now be ad-free.

Step 3: Deploy Jellyfin for Media Streaming

mkdir -p ~/docker/jellyfin/{config,cache}
docker run -d --name jellyfin \
  -p 8096:8096 \
  -v ~/docker/jellyfin/config:/config \
  -v ~/docker/jellyfin/cache:/cache \
  -v /path/to/media:/media:ro \
  --device /dev/dri:/dev/dri \
  --restart unless-stopped \
  jellyfin/jellyfin:latest

Step 4: Deploy Vaultwarden (Password Manager)

docker run -d --name vaultwarden \
  -p 4743:80 \
  -v ~/docker/vaultwarden:/data \
  -e WEBSOCKET_ENABLED=true \
  -e SIGNUPS_ALLOWED=false \
  --restart unless-stopped \
  vaultwarden/server:latest

Step 5: Set Up a Dashboard (Homepage)

docker run -d --name homepage \
  -p 3002:3000 \
  -v ~/docker/homepage:/app/config \
  --restart unless-stopped \
  ghcr.io/gethomepage/homepage:latest

4. Networking and Security

A homelab without proper network hygiene can quickly become a liability.

Static IP Configuration

Assign your server a static IP in your router’s DHCP reservation (recommended) or statically configure it:

# Ubuntu/Debian Netplan
cat > /etc/netplan/01-netcfg.yaml << 'EOF'
network:
  version: 2
  ethernets:
    eth0:
      addresses:
        - 192.168.1.10/24
      routes:
        - to: default
          via: 192.168.1.1
      nameservers:
        addresses: [1.1.1.1, 8.8.8.8]
EOF
netplan apply

Firewall Basics

# UFW (Ubuntu)
ufw allow OpenSSH
ufw allow 80,443/tcp  # Reverse proxy
ufw allow 51820/udp   # WireGuard
ufw enable
ufw status verbose

Reverse Proxy

Use Nginx Proxy Manager (Docker) to route external traffic to your services with automatic SSL via Let’s Encrypt:

docker run -d --name nginx-proxy-manager \
  -p 80:80 -p 443:443 -p 81:81 \
  -v ~/docker/nginx-proxy-manager:/data \
  --restart unless-stopped \
  jc21/nginx-proxy-manager:latest

Then in the UI at http://<homelab-ip>:81, add proxy hosts pointing service.yourdomain.com to the internal Docker IPs:8096 (Jellyfin), :4743 (Vaultwarden), etc.

VPN for Remote Access

Never expose admin panels directly. Use Tailscale for zero-config secure access:

# Install Tailscale
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
# Open the URL, authenticate with your Google/GitHub/Microsoft account

Now access your homelab services via the Tailscale IP from any device.

5. Backups

Configure automatic backups before you need them:

# Create backup script
cat > ~/backup-homelab.sh << 'EOF'
#!/bin/bash
BACKUP_DIR="/mnt/backup"
DATE=$(date +%Y%m%d-%H%M%S)

# Back up Docker volumes
docker run --rm -v homelab_data:/data -v $BACKUP_DIR:/backup \
  alpine tar czf /backup/homelab-data-$DATE.tar.gz -C /data .

# Keep only last 14 days
find $BACKUP_DIR -name "*.tar.gz" -mtime +14 -delete
EOF
chmod +x ~/backup-homelab.sh

# Add to crontab (runs daily at 3 AM)
(crontab -l 2>/dev/null; echo "0 3 * * * /root/backup-homelab.sh") | crontab -

Conclusion

Building your first homelab is an iterative process. Start with one machine and one service. Learn how it works, how to back it up, and how to keep it updated. As your curiosity grows, so will your lab.

Here’s a quick checklist to get started: - [ ] Acquire hardware (old desktop, Mini PC, or laptop) - [ ] Install Proxmox VE or Ubuntu Server - [ ] Set up Docker - [ ] Deploy Pi-hole (ad blocking) - [ ] Deploy Jellyfin (media) or Nextcloud (files) - [ ] Configure reverse proxy (Nginx Proxy Manager) - [ ] Set up Tailscale for remote access - [ ] Configure daily backups - [ ] Join r/homelab and share your setup!

Remember: the goal is to learn and to enjoy the process. Don’t worry about having the perfect setup on day one. Happy hosting!