Virtualization is the heart of a modern homelab. It allows you to run dozens of services on a single physical machine, turning one server into an entire infrastructure. Proxmox Virtual Environment (PVE) is the industry-standard, open-source platform for this, combining KVM-based virtual machines with lightweight LXC containers.

This guide covers the journey from bare metal to a fully functional virtualization host with working networking, storage, and firewall configuration.

Why Proxmox?

Proxmox is built on Debian, which means it is incredibly stable. It offers: - Unified Management: One dashboard for VMs, containers, backups, and storage. - KVM & LXC: Choose full virtualization (VMs) for OS independence or containerization (LXC) for extreme performance. - Built-in Backups: Snapshot and backup scheduling without third-party tools. - High Availability: Easily expand to a cluster as your lab grows. - ZFS Support: Integrated ZFS for data integrity, compression, and snapshots.

Prerequisites

Before starting, ensure you have: 1. Hardware: A PC or server with at least 8GB of RAM and an Intel/AMD CPU supporting virtualization (VT-x or AMD-V). 2. Connectivity: Ethernet cable connected to your main switch. 3. USB Drive: At least 8GB to flash the Proxmox ISO.

Step 1: Preparing the ISO

Download the latest Proxmox VE ISO from the official download page. Use dd on Linux or a graphical tool like BalenaEtcher on Windows/macOS to write the ISO to your USB drive:

# Linux: Find your USB device first
lsblk
# Write the ISO (replace /dev/sdX with your USB device)
sudo dd if=proxmox-ve_*.iso of=/dev/sdX bs=4M status=progress
sync

Step 2: The Installation Process

  1. Boot: Insert the USB into the target machine and boot from it via BIOS/UEFI.
  2. Select “Install Proxmox VE from the boot menu.
  3. Target Disk: Choose the disk for Proxmox. Warning: This wipes all data on the target disk.
  4. Location & Time: Set your timezone and keyboard layout.
  5. Admin Password: Set a strong root password (use a password manager).
  6. Email: Enter a valid email for system notifications.
  7. Management Network: Configure your primary interface:
  8. Hostname: Use pve01.yourdomain.local (FQDN format required)
  9. IP Address: Choose a static IP within your LAN range (e.g., 192.168.1.10/24)
  10. Gateway: Your router’s IP (e.g., 192.168.1.1)
  11. DNS: 1.1.1.1, 8.8.8.8

Once installed, the system will reboot. Access the management UI at https://<YOUR_IP>:8006. Accept the self-signed certificate warning — you can replace it with a Let’s Encrypt certificate later.

Step 3: Initial Post-Install Tweaks

3.1 Configure Repositories

Proxmox includes enterprise repos by default. For homelab use, switch to the no-subscription repository:

# Comment out enterprise repo
sed -i 's/^deb/# deb/' /etc/apt/sources.list.d/pve-enterprise.list

# Add no-subscription repo
echo "deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription" >> /etc/apt/sources.list

# Update
apt update && apt dist-upgrade -y

3.2 Configure Storage

By default, Proxmox uses LVM-thin. For a homelab, ZFS is strongly recommended for data integrity, compression, and snapshots:

# Check available disks
lsblk

# Create a ZFS pool with a single disk (replace /dev/sda with your data disk)
zpool create -f -o ashift=12 tank /dev/sda

# Enable compression
zfs set compression=lz4 tank

# Create a dataset for VM storage
zfs create -o mountpoint=/tank/vm tank/vm

Then in the Proxmox Web UI: Datacenter → Storage → Add → ZFS and point it to your pool.

3.3 Network Bridge Configuration

Proxmox uses a Linux bridge (vmbr0) for VM networking. Verify your bridge configuration:

cat /etc/network/interfaces

A typical config looks like:

auto lo
iface lo inet loopback

auto enp1s0
iface enp1s0 inet manual

auto vmbr0
iface vmbr0 inet static
    address 192.168.1.10/24
    gateway 192.168.1.1
    bridge-ports enp1s0
    bridge-stp off
    bridge-fd 0

3.4 Firewall Basics

Enable the Proxmox firewall at the datacenter level:

# Enable firewall on the node
pve-firewall start
systemctl enable pve-firewall

# Check rules
pve-firewall status

In the Web UI: Datacenter → Firewall → Options → Enable: Yes. Whitelist your management IP under Datacenter → Firewall → Rules.

3.5 Remove the Subscription Nag

# Hide the subscription popup in the UI
sed -i "s/data.status !== 'Active'/false/g" /usr/share/pve-manager/js/pvemanagerlib.js
systemctl restart pveproxy

Step 4: Creating Your First Container

Before building VMs, LXC containers are lighter and ideal for Docker hosts:

# Download a Debian 12 template
pveam update
pveam download local debian-12-standard_12.7-1_amd64.tar.zst

# Create a container (CT 100, 2 cores, 4GB RAM, 20GB disk)
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 \
  --rootfs local-lvm:20 \
  --password your-secure-password

# Start the container
pct start 100

# Attach to its shell
pct enter 100

Step 5: Enabling Nested Virtualization

To run Docker inside an LXC container (or VMs inside a VM), enable nesting:

# For a specific container
echo "features: nesting=1" >> /etc/pve/lxc/100.conf

# Or via command line
pct set 100 --features nesting=1

# Restart the container
pct restart 100

Troubleshooting

Web UI not loading

Check that pveproxy is running: systemctl status pveproxy. Restart with systemctl restart pveproxy.

VMs fail to start with “KVM acceleration not available”

Ensure virtualization is enabled in BIOS. Check with:

egrep -c '(vmx|svm)' /proc/cpuinfo

If it returns 0, reboot into BIOS and enable Intel VT-x or AMD SVM.

No network in container

Ensure the bridge is configured correctly and STP is disabled:

bridge link show
brctl show vmbr0

Conclusion

You now have a fully functional Proxmox node with ZFS storage, firewall protection, and a running LXC container. The next logical steps are: 1. Deploy Docker inside your LXC container 2. Set up a reverse proxy (like Nginx Proxy Manager) 3. Configure automated backups to a Proxmox Backup Server

Remember: always set up automated backups for your VMs in Datacenter → Backup before running production workloads.