Windows 11
GPU PassthroughFull desktop virtualized with the RX 6700 XT passed through via VFIO/IOMMU, giving bare-metal graphics performance inside a VM.
One machine, three workloads. A single-node Proxmox VE hypervisor consolidating a gaming desktop (with full GPU passthrough), a production-mirroring dev server for my SaaS, and a self-hosted media stack with VPN-enforced networking. The Proxmox host and every VM are on Tailscale, so the whole box is remotely accessible with zero exposed ports.
One physical Ryzen box running everything below concurrently.
Three guests running in parallel on the same host. Every one of them is on Tailscale, as is the Proxmox host itself.
Full desktop virtualized with the RX 6700 XT passed through via VFIO/IOMMU, giving bare-metal graphics performance inside a VM.
Debian VM running Jellyfin and always-on services, with a fail-closed WireGuard killswitch. If the VPN drops, traffic halts.
Mirrors my SaaS production environment, a three-container Docker stack, so builds and deploy scripts are tested before they touch CI/CD.
The goal was to replace a standalone gaming PC and several would-be cloud instances with a single machine running Proxmox VE, a Type 1 hypervisor built on KVM/QEMU. Everything below runs concurrently on one Ryzen 9 5900X with 40GB of RAM and two NVMe drives (1TB dedicated, 2TB shared pool).
The hardest problem in this build was giving a VM true graphics performance. Consumer GPUs can't be shared between host and guest, so the RX 6700 XT is handed exclusively to the Windows VM using VFIO:
vfio-pci driver claims the card at boot, preventing the host from ever initializing itThe result is a "desktop" that performs like bare metal but lives alongside server workloads, and can be snapshotted or rebuilt like any other VM. One fun failure mode this surfaced: Windows Boot Manager once hijacked the UEFI boot order and knocked the whole hypervisor offline, a good lesson in why guest OSes should never share boot priority with the host.
A lightweight Debian VM (2 cores, 2GB RAM, 1TB storage) running the always-on services:
The 2GB allocation was deliberate: these are I/O-bound services, and keeping the footprint small leaves headroom for the other guests.
A 4-core / 4GB VM that mirrors the production environment of my SaaS (a DigitalOcean droplet running a three-container Docker stack: main API, PDF generation engine, and a usage-billing microservice). Having a production-like environment locally means I can test container builds, compose changes, and deployment scripts before they ever touch CI/CD, without paying for a staging droplet.
| Guest | vCPU | RAM | Storage | Role |
|---|---|---|---|---|
| Windows 11 | 4 | 10GB | 1TB (dedicated NVMe) | Desktop/gaming, GPU workloads |
| Debbie (Debian) | 2 | 2GB | 1TB | Media + services |
| Reaper Dev | 4 | 4GB | 50GB | SaaS staging |
| Proxmox host | remainder | remainder | 2TB pool | Hypervisor |
CPU is intentionally not fully committed. The 5900X's 24 threads leave room for host overhead and future guests, and none of the workloads peak simultaneously.