Why This Stack
The goal was not to be cheap — hosted services are cheap enough that the economics rarely justify self-hosting on pure cost grounds. The goal was to understand the infrastructure layer better and to have operational control over certain workloads. This stack is the result of about eighteen months of iteration. Proxmox handles virtualization. Coolify is the application management layer that makes deploying from a Git push work without writing docker-compose files from scratch. Cloudflare Tunnel eliminates the need for a public IP and handles the TLS termination at the edge.
The Stack
| Tool | Role | Cost / Tier |
|---|---|---|
| Proxmox VE 8 | Hypervisor — runs VMs and LXC containers | Free (enterprise support optional) |
| Docker (rootless) | Container runtime on each VM | Free |
| Caddy v2 | Reverse proxy, automatic TLS for internal services | Free |
| Coolify v4 | PaaS layer — deploys from Git, manages containers | Free self-hosted |
| Backblaze B2 | Object storage, off-site backups | $0 first 10GB, then $0.006/GB/mo |
| Cloudflare Tunnel | Secure ingress without public IP | Free |
The Deployment Flow
Push to a Git branch. Coolify picks it up via webhook. Builds the container. Runs health checks. Routes traffic via Caddy. The path from commit to live is under two minutes for small services. This is the thing that makes the homelab setup feel less like a hobby project and more like infrastructure.
Cloudflare Tunnel is the part that surprised me most. Zero port forwarding. Zero firewall rules to maintain. The tunnel connects outbound from your network to Cloudflare and traffic flows back through it. The operational simplification is real.
I'd configure backup verification from day one, not day ninety. Backblaze B2 is cheap and reliable but I had a period where I was backing up corrupted files without realizing it. The restore test is the backup. Do it monthly. Also: Proxmox's HA clustering is worth setting up if you have two nodes. I ran single-node for a year and the first drive failure was a bad day.