🐾 Miu's Lab

Home Assistant on Proxmox β€” Full Production Setup 2026

πŸ“… June 2026 ⏱ 15 min read Home Assistant Proxmox Self-Hosted

A battle-tested guide for running Home Assistant as a production-grade VM on Proxmox, with hardware passthrough, automated snapshots, and zero-downtime backup.

Why Proxmox + HA?

Home Assistant can run on a Raspberry Pi, a Docker container, or directly on bare metal. But for a production smart home β€” the kind that controls lighting, HVAC, shutters, and security β€” you need:

Option A: VM (Recommended)

A full Virtual Machine. Supports USB passthrough for dongles, full ACL isolation, and live migration across Proxmox nodes.

Create the VM

# Download the HAOS image
wget https://github.com/home-assistant/operating-system/releases/download/14.2/haos_ova-14.2.qcow2.xz
xz -d haos_ova-14.2.qcow2.xz

# Import to Proxmox storage (change local-zfs to your storage)
qm create 1000 --name "ha" --cores 2 --memory 4096 --net0 virtio,bridge=vmbr0
qm importdisk 1000 haos_ova-14.2.qcow2 local-zfs
qm set 1000 --scsihw virtio-scsi-pci --scsi0 local-zfs:vm-1000-disk-0
qm set 1000 --boot order=scsi0
qm set 1000 --machine q35
qm set 1000 --ostype l26

USB Passthrough (Zigbee/ZWave)

# Find your dongle
lsusb
# Bus 001 Device 005: ID 10c4:ea60 Silicon Labs CP210x UART Bridge

# Pass it to the VM
qm set 1000 --usb0 host=10c4:ea60

Performance Tuning

qm set 1000 --balloon 1
qm set 1000 --cpu host --numa 1
qm set 1000 --agent 1   # QEMU-GA for graceful shutdown
πŸ’‘
--cpu host gives HA access to hardware acceleration flags. Without it, addon containers can't use AVX/AVX2 and some ML-based integrations will fail silently.

Option B: LXC (Lightweight, No USB Passthrough)

For setups where Zigbee/ZWave runs on a dedicated coordinator (e.g., SLZB-06 over the network). Less overhead but no USB passthrough β€” if you need a local dongle, go VM.

pct create 2000 local:vztmpl/ubuntu-24.04-standard_24.04-2_amd64.tar.zst \
  --cores 2 --memory 2048 --swap 1024 \
  --net0 name=eth0,bridge=vmbr0,firewall=1 \
  --rootfs local-zfs:16 \
  --ostype ubuntu

# Install HA Core inside the LXC
pct enter 2000
apt install docker.io docker-compose-plugin
mkdir -p /opt/ha && cd /opt/ha

# docker-compose.yml for HA Core
cat > docker-compose.yml << 'EOF'
services:
  homeassistant:
    image: ghcr.io/home-assistant/home-assistant:stable
    container_name: ha
    volumes:
      - ./config:/config
    network_mode: host
    restart: unless-stopped
    environment:
      - TZ=Asia/Ho_Chi_Minh
EOF

docker compose up -d
⚠️
LXC users: you lose Addons, the Supervisor dashboard, and OTA updates. Fine for advanced users, not for beginners.

Backup Strategy (Critical)

This alone justifies the Proxmox approach.

Automated Snapshots

# Schedule: daily snapshot, keep 7
pvesh create /nodes/proxmox/qemu/1000/snapshot \
  --snapname daily-$(date +%Y%m%d) --vmstate 0

# Cleanup old ones (>7 days)
for snap in $(pvesh get /nodes/proxmox/qemu/1000/snapshot | jq -r '.[].name'); do
  date_part=$(echo $snap | grep -oP '\d{8}')
  [ -z "$date_part" ] && continue
  if [ $(date -d "$date_part" +%s) -lt $(date -d '7 days ago' +%s) ]; then
    pvesh delete /nodes/proxmox/qemu/1000/snapshot/$snap
  fi
done

Proxmox Backup Server (PBS)

# Add PBS datastore
pvesm set pbs1 --datastore ha_backups --content backup
# Run backup
vzdump 1000 --storage pbs1 --mode snapshot --compress zstd --remove 0

Key: --mode snapshot requires no downtime. HA keeps running, PBS reads the ZFS snapshot atomically.

HA Internal Backup

Go to Settings β†’ System β†’ Backups in HA. Set:

Production Networking

Don't put HA on the default VLAN with your security cameras.

VLAN Purpose Access
10 IoT β€” trusted (lights, thermostats) HA access βœ…
20 IoT β€” untrusted (TVs, cameras) HA outbound only
30 Management (Proxmox, router) HA admin access
99 Guest Blocked

MikroTik rule example:

/interface vlan add interface=bridge name=vlan10-iot-trusted vlan-id=10
/ip firewall filter add chain=forward src-address=192.168.10.0/24 \
  dst-address=192.168.20.0/24 action=accept comment="HA controls IoT"
/ip firewall filter add chain=forward src-address=192.168.20.0/24 \
  dst-address=192.168.10.0/24 action=drop comment="Block IoT β†’ HA"

Zigbee2MQTT + Matter

Zigbee2MQTT (Recommended)

# zigbee2mqtt config.yaml
data_path: /config/zigbee2mqtt
serial:
  port: /dev/ttyUSB0
  adapter: ezsp
mqtt:
  server: mqtt://core-mosquitto:1883
  user: mqtt_user
  password: !secret mqtt_password
advanced:
  homeassistant_discovery_topic: homeassistant
  homeassistant_status_topic: homeassistant/status

Matter via HA

Make sure the VM has host-model CPU and 2 GB+ RAM. Matter needs Thread, which needs a Thread Border Router (HomePod Mini, Apple TV, or Pi with OpenThread). HA 2026.1+ has native Matter support β€” no extra container needed.

Cost (VN Context)

ComponentEstimated Cost
Proxmox host (reuse existing server/NUC)0 β€” 8M VND
Zigbee Coordinator (SLZB-06 or Sonoff)500k β€” 1.5M
SSD for VM (240 GB)500k β€” 1M
Total one-time~1-10M VND
vs. HA Green (official hardware)4.4M
vs. Raspberry Pi 51.5-2.5M

If you already run Proxmox for other services, the marginal cost is literally zero.

The Bottom Line

Running HA on Proxmox gives you three superpowers:

  1. Snapshots before every config change β€” saved me dozens of times
  2. Live migration β€” zero-downtime hardware maintenance
  3. Resource isolation β€” a runaway addon won't crash your NVR or Plex

Skip the Raspberry Pi for production. Go VM.

Have questions? Found a bug in this guide? Reach out β€” I maintain this setup across multiple sites and update it with every HA release.