~/homelab
Inside my home lab
A hands-on extension of my work as a Cloud Solution Architect: the place where I break things safely, learn new technology before I recommend it, and run the self-hosted services I use every day.

It started as a few VMs and has grown into a full stack: virtualization, containers, storage, observability, local AI and a hybrid connection into Azure.
Network
The network runs on Ubiquiti, with a Cloud Gateway at the core handling routing, firewall and VLANs. Workloads are segmented, so management traffic, IoT, trusted devices and lab VMs never share a broadcast domain.
A live site-to-site VPN connects the lab to my Azure virtual network through an Azure VPN gateway, so on-premises workloads reach Azure resources over private IPs without touching the public internet. Azure Private Endpoints and DNS Private Resolver keep service traffic private end to end. I wrote up both: the dual-region VPN gateway build and the Private Endpoints and DNS setup.
Compute
I ran VMware vSphere for many years before switching to Proxmox VE for a change of scenery. Today it’s a three-node cluster on Ceph storage, hosting Windows Server VMs (Active Directory domain controllers and DNS), Linux VMs and the infrastructure behind everything else.
The domain controllers double as the custom DNS servers for the Azure VNet, with conditional forwarders bridging on-premises DNS and Azure’s private DNS zones. It lets me work in the same kind of environment as my enterprise customers. See the Proxmox 8 to 9 upgrade and the Ubuntu Cloud-Init template for how the cluster is run.
Storage
TrueNAS provides NFS and SMB shares to the Proxmox cluster and hosts several container workloads, including the AI agent stack. Datasets are tiered, so critical config data, media and backups stay separate.
Containers and reverse proxy
Containers run on Docker, managed by Portainer, with Traefik handling the reverse proxy and automatic TLS certificates. Traefik picks up new containers from their Docker labels, so publishing a new service over HTTPS takes a two-line config change.
Observability
Metrics, logs and uptime all land in one place: Prometheus, Loki and Grafana, fed by Grafana Alloy and a set of exporters for Proxmox, TrueNAS and UniFi. The full build is in Proxmox 9 Observability.
AI and automation
I’m learning to run AI locally, with Ollama and LM Studio as the model backends and OpenClaw as a multi-agent orchestration layer. Each agent has one job: TACITUS answers infrastructure questions through Proxmox, TrueNAS and Prometheus integrations, and SCRIBE writes documentation.
MCP (Model Context Protocol) servers are self-hosted in Portainer over HTTP/SSE, so Claude, Claude Code, Cursor and VS Code can all connect to the same server instances without a separate deployment for each client.
Hybrid cloud
The lab is deliberately connected to Azure. With the site-to-site VPN, Private Endpoints and DNS configuration, it works as an on-premises extension of an Azure VNet. That mirrors real enterprise hybrid architectures, and gives me a realistic place to validate Azure networking patterns before I recommend them at work.
What’s running
Every service below runs in the lab. Each card opens its folder in my HomeLab repository on GitHub, with its Docker Compose file and setup notes.
Reverse proxy and remote access
- Traefik Reverse proxy with automatic TLS
- traefik-manager Web UI for Traefik routes
- Tailscale Subnet router and exit node
DNS and network
- Technitium DNS Authoritative and recursive DNS with ad blocking
- Unbound Validating, caching DNS resolver
- ntopng Network traffic analysis
- NetBox IPAM and DCIM source of truth
- phpIPAM IP address management
Observability
- Grafana Dashboards for the whole stack
- Prometheus Metrics, with 30-day retention
- Loki Log aggregation
- Grafana Alloy OpenTelemetry collector and log shipper
- Proxmox exporter Proxmox VE metrics for Prometheus
- TrueNAS exporter TrueNAS host metrics for Prometheus
- Unpoller UniFi metrics for Prometheus
- Uptime Kuma Uptime monitoring and alerts
- Dozzle Live Docker logs in the browser
- Scrutiny Drive health from SMART data
- ChangeDetection Alerts when a web page changes
Infrastructure and automation
- PegaProx Web UI for Proxmox VE clusters
- Semaphore Runs Ansible, Terraform and Bash jobs
- n8n Workflow automation
- Gitea Self-hosted Git
- code-server VS Code in the browser
- Termix Web SSH and remote desktop
AI and search
Home and dashboards
- Home Assistant Home automation with local control
- Heimdall App dashboard
- Homarr App dashboard with Docker integration
Files and documents
- Nextcloud Files, calendar and contacts
- ownCloud Infinite Scale File sync and sharing
- Paperless-ngx Searchable document archive with OCR
Reading and bookmarks
- Karakeep Bookmarks and read-later
- Linkwarden Bookmarks with full-page snapshots
- Readeck Clean read-later copies
- Calibre E-book library
- Libation Audible audiobook backups
Media
- Tdarr Distributed media transcoding
- Tdarr desktop node GPU transcode worker on an RTX 3090
- Unmanic Media library optimizer
- MeTube Web UI for yt-dlp
3D printing
- Bambu Buddy Command center for Bambu Lab printers
- Bambu Studio Bambu Lab slicer in the browser
- Printventory Library for 3D-printable files
Games
Want the details?
The guides walk through how each piece was built, including what broke along the way.