3-Node Proxmox Cluster
Self-hosted services on three Proxmox nodes, backed up nightly and replicated every 15 minutes.

What it does
I built and run a three-node Proxmox cluster for self-hosted services: Nextcloud for file storage, Pi-hole for network-wide ad blocking, Nginx Proxy Manager for web traffic routing, and Uptime Kuma for uptime monitoring. The network is split into isolated VLANs with one shared login, and a GPU server runs AI models locally for the rest of the network.
Nightly snapshot backups and ZFS replication to a standby node every 15 minutes protect the data, and a set boot order brings key services back on their own after a reboot.
The demo shows the cluster audit, a Python script that reads cluster state through the Proxmox API with GET requests only.
How it works
- The audit checks quorum, storage, replication, backup jobs, guest placement, and disk health.
- Both scripts connect over verified HTTPS and take the cluster address from the environment.
- Backups and migrations go through
pve_ops.pyand run only after an explicit confirmation.
Built with
Proxmox VE · ZFS · Linux · Docker · Python · VLANs
Selected code
| File | What it shows |
|---|---|
| pve_audit.py | GET-only cluster audit that reports denied endpoints. |
| pve_ops.py | Named cluster actions; backup and migrate require confirmation. |
| backup-and-replication.md | Backup retention, replication cadence, and boot order. |
| tls.md | Certificate setup for the cluster API. |
| sanitize_audit.py | Turns raw audit output into the replay used for the demo. |
Design notes
- The audit has no POST, PUT, or DELETE path.
- If the API denies an endpoint, the report marks it incomplete instead of showing an empty section.
- HA settings are read from the Proxmox VE 9 rules endpoint, which replaced the HA groups endpoint.
- Replication shortens the recovery-point window but does not replace backups.