Building a 4-Node Proxmox Cluster on HP EliteDesk Mini PCs
How to assemble a production-grade Proxmox VE 9 cluster from four HP EliteDesk 705 G4 mini PCs — hardware selection, quorum strategy, firewall, and the gotchas that cost a Saturday.
Josh Hall··8 min read
When I decided to build a proper homelab, the calculus was simple: enough compute for a real Proxmox cluster, several AI inference containers, and an electricity bill I could ignore. The answer was HP EliteDesk 705 G4 mini PCs — four of them, acquired refurbished for around $120 each.
This is the guide I wish existed when I started.
Cluster Architecture
Hardware: why EliteDesk G4
The HP EliteDesk 705 G4 packs an AMD Ryzen 5 Pro 2400G (4c/8t, 65W TDP) in a 1-litre form factor. At idle: 12–18W per node. Four nodes at full bore: ~200W — one 20A circuit, one modest UPS.
Spec
Value
Notes
CPU
Ryzen 5 Pro 2400G
4c/8t, Vega 11 iGPU (CPU inference only)
RAM
2× SO-DIMM DDR4
Expandable to 32 GB
Storage
M.2 2280 NVMe
256 GB fitted; SATA bay optional
Networking
1× Gigabit Intel i219-V
Wired only — WiFi ignored
Price
~$120 refurbished
HP Certified Refurbished on eBay/Amazon
⚠️No GPU inference
The Vega 11 iGPU has BIOS-locked 512 MB shared VRAM — too small for any practical model. These nodes are CPU inference only. ROCm installation was attempted and failed on Ubuntu 24.04 (package unavailable, installer 404). Real GPU upgrade would require a discrete AMD card in a PCIe riser setup — beyond scope here.
Task 1: Prepare your hardware
1Acquire four EliteDesk 705 G4 units1–3 days
Search eBay, Amazon Warehouse, or HP’s Certified Refurbished store for “HP EliteDesk 705 G4 mini”. Target the G4 revision (Ryzen 2400G). Avoid G3 (older A-series APU) and G5 (higher cost, similar performance for this workload).
Check each listing for:
RAM installed (8 or 16 GB)
NVMe included or add-on needed
AC adapter included (65W barrel jack)
2Expand RAM on nodes 1 and 410 min each
Nodes 1 and 4 serve as your primary management hosts and should have 16 GB for headroom. The G4 takes two DDR4-2400 SO-DIMMs. Remove the bottom panel (two screws), slide out the existing DIMM(s), install 2×8 GB.
Nodes 2 and 3 at 8 GB is workable for now — sufficient for Ollama 7B models and monitoring containers.
3Install NVMe drives5 min each
Each node needs an M.2 2280 NVMe SSD. 256 GB is adequate for the Proxmox OS plus local container storage. 512 GB gives comfortable room for more containers or snapshot storage.
Brands that consistently work in this form factor: Samsung 970 Evo, WD Blue SN570, Kingston NV2.
Replace /dev/sdX with your USB device (confirm with lsblk first).
2Install on each node — assign static IPs during setup20 min each
Boot from USB. The installer prompts for:
Country/keyboard/timezone — set once
Disk — select your NVMe; defaults are fine
Network — this is critical: set the static IP here matching your plan
🚨Set IPs correctly before clustering
Changing a node’s management IP after cluster formation requires editing Corosync config. It’s painful. Assign your final IPs during installation — do not use DHCP.
Use this IP plan:
Node
Hostname
IP
Node 1
pvelab01
10.25.144.70
Node 2
pvelab02
10.25.144.71
Node 3
pvelab03
10.25.144.72
Node 4
pvelab04
10.25.144.73
3Switch to the no-subscription repository on all nodes5 min each
Proxmox ships configured for the enterprise repository, which requires a paid subscription. Switch to the free no-subscription repo before running updates:
On each remaining node, run the join command pointing at node 1’s IP:
pvelab02 / 03 / 04 — join cluster
pvecm add 10.25.144.70
You’ll be prompted for root@pvelab01’s password. After joining, verify on any node:
Verify cluster membership
pvecm status
pvecm nodes
All four nodes should show online and quorum votes should total 4.
3Verify in the web UI2 min
Open https://10.25.144.73:8006 in your browser (bypass the self-signed cert warning). Log in as root. The left sidebar should show all four nodes under your cluster name.
Task 4: Configure the firewall
1Enable the cluster firewall with DROP input policy5 min
In the Proxmox web UI: Datacenter → Firewall → Options → Firewall: Yes. Set input policy to DROP.
Then add rules via Datacenter → Firewall → Add:
Direction
Action
Source
Proto
Ports
Purpose
in
ACCEPT
10.25.144.0/24
any
any
Full LAN access
in
ACCEPT
192.168.1.0/24
tcp
8006,22
Home network: web UI + SSH
⚠️Warning
Enable the firewall after adding your allow rules, or you’ll lock yourself out. The UI applies rules immediately on save.
Understanding quorum in a 4-node cluster
Corosync requires a majority of nodes to agree before the cluster operates. In a 4-node cluster, quorum is 3.
If you need to take two nodes offline simultaneously (hardware maintenance), set expected votes first:
Temporarily reduce quorum expectation
pvecm expected 2
# do your maintenance
pvecm expected 4 # restore after nodes rejoin
🚨Never run pvecm expected 1
Setting expected votes to 1 disables split-brain protection entirely. Use expected 2 for 4-node maintenance, never 1.
What’s next
With the cluster running, the next step is deploying LXC containers. The first workload: a 3-node Ollama CPU inference cluster with Open WebUI load balancing across all three nodes.
The HP EliteDesk 705 G4 links in this post are Amazon affiliate links. I earn a small commission if you purchase through them.