<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Proxmox on Russell ‛Russ’ Frith</title><link>https://russfrith.com/tags/proxmox/</link><description>Recent content in Proxmox on Russell ‛Russ’ Frith</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Mon, 30 Mar 2026 13:33:33 -0400</lastBuildDate><atom:link href="https://russfrith.com/tags/proxmox/index.xml" rel="self" type="application/rss+xml"/><item><title>Practical Proxmox</title><link>https://russfrith.com/posts/practical-proxmox/</link><pubDate>Mon, 30 Mar 2026 13:33:33 -0400</pubDate><guid>https://russfrith.com/posts/practical-proxmox/</guid><description>How I’m Running My Office Infrastructure Like Something I’d Trust in Production</description><content:encoded><![CDATA[<p>Proxmox gets a lot of attention in home lab circles, and I get why. But my use case pushed past hobby territory into services that are genuinely important to my small business and my personal life.</p>
<p>Once the stakes changed, so did the approach. Something you&rsquo;re willing to let break overnight is very different from something you actually need to work. That meant building with intention: defined structure, real recovery paths, and a level of trust you don&rsquo;t usually demand from a weekend project.</p>
<p>This isn&rsquo;t about building the flashiest setup. It&rsquo;s about applying production thinking at personal scale, without pretending I have an enterprise budget behind it.</p>
<h2 id="the-goal-treat-it-like-production-without-the-budget">The Goal: Treat It Like Production (Without the Budget)</h2>
<p>I don&rsquo;t want a toy.</p>
<p>I want something that:</p>
<ul>
<li>Survives mistakes</li>
<li>Recovers quickly</li>
<li>Mirrors real-world architecture decisions</li>
<li>Doesn&rsquo;t require babysitting</li>
</ul>
<p>That means fewer &ldquo;cool experiments&rdquo; and more boring, intentional structure.</p>
<p>Proxmox is the foundation, but it&rsquo;s not the strategy. It&rsquo;s just the tool that lets the strategy work.</p>
<h2 id="the-core-philosophy-separation-over-convenience">The Core Philosophy: Separation Over Convenience</h2>
<p>The biggest mistake in most home labs is collapsing everything into one flat network on one giant VM host.</p>
<p>It works — until it doesn&rsquo;t.</p>
<p>I&rsquo;ve moved toward clear separation:</p>
<ul>
<li><strong>Management network</strong> – where Proxmox, switches, and controllers live</li>
<li><strong>Server network</strong> – where actual workloads run</li>
<li><strong>User network</strong> – normal devices</li>
<li><strong>IoT / guest / camera networks</strong> – isolated and restricted</li>
</ul>
<p>This mirrors how real environments are structured, and more importantly, it forces you to think about access, routing, and failure boundaries.</p>
<p>If everything can talk to everything, you haven&rsquo;t designed anything — you&rsquo;ve just delayed the problem.</p>
<h2 id="proxmox-the-control-plane-not-the-junk-drawer">Proxmox: The Control Plane, Not the Junk Drawer</h2>
<p>Proxmox isn&rsquo;t where I dump random services anymore. It&rsquo;s the control plane, and that distinction matters.</p>
<p>Instead of treating it as a place to &ldquo;run stuff,&rdquo; I treat it as:</p>
<ul>
<li>A hypervisor with clean networking boundaries</li>
<li>A predictable host with minimal drift</li>
<li>A system that should almost never change</li>
</ul>
<p>Most of the actual work happens inside LXCs and VMs that can be destroyed and rebuilt at will.</p>
<p>If I hesitate to delete something, that&rsquo;s a smell. In a real environment, rebuildability matters more than preservation.</p>
<h2 id="hardware-boring-and-replaceable">Hardware: Boring and Replaceable</h2>
<p>Rebuildability doesn&rsquo;t mean much if the box itself is a snowflake.</p>
<p>I run Proxmox on an HP EliteDesk 800 G6, not because it&rsquo;s special, but because it&rsquo;s the opposite; it&rsquo;s a common corporate refurbish, sold in volume, cheap enough that losing one isn&rsquo;t a budget event.</p>
<p>That&rsquo;s the actual point: pick hardware that&rsquo;s common enough to replace or duplicate without a special order. A few reasons this matters more than it seems:</p>
<ul>
<li><strong>Failure stops being a crisis.</strong> If a node dies, you buy the same (or equivalent) machine and restore, instead of scrambling to source a part.</li>
<li><strong>It sets up real redundancy.</strong> Once one node is expendable, adding a second or third for clustering and failover is a natural next step, not a special project.</li>
<li><strong>It keeps the &ldquo;control plane should barely change&rdquo; idea honest.</strong> A host you can&rsquo;t easily replace is a host you&rsquo;ll be afraid to touch — which undermines the whole philosophy.</li>
</ul>
<p>You don&rsquo;t need a rack of matched enterprise servers to think like production. You need hardware boring enough that its failure is a shrug, not an outage.</p>
<h2 id="containers-vs-vms-be-intentional">Containers vs. VMs: Be Intentional</h2>
<p>There&rsquo;s a temptation to default everything to Docker. I don&rsquo;t.</p>
<ul>
<li><strong>LXCs</strong> for lightweight, single-purpose services</li>
<li><strong>VMs</strong> when isolation actually matters</li>
<li><strong>Docker</strong> inside LXCs when it simplifies deployment</li>
</ul>
<p>That last one is controversial, but it works well if you&rsquo;re disciplined.</p>
<p>The key isn&rsquo;t the tool — it&rsquo;s consistency. If every service is deployed differently, you&rsquo;re not building flexibility, you&rsquo;re building future confusion.</p>
<h2 id="storage-backups-are-the-product">Storage: Backups Are the Product</h2>
<p>The most important part of the entire setup isn&rsquo;t compute. It&rsquo;s storage and backups. Everything else is replaceable.</p>
<p>The strategy:</p>
<ul>
<li><strong>Primary workloads</strong> run on Proxmox</li>
<li><strong>Backups</strong> go to a separate storage system</li>
<li><strong>Snapshots</strong> are used for short-term recovery</li>
<li><strong>Backups</strong> are used for &ldquo;oh no&rdquo; moments</li>
</ul>
<p>There&rsquo;s a big difference between:</p>
<blockquote>
<p>&ldquo;I can roll back a bad update&rdquo;</p>
</blockquote>
<p>and</p>
<blockquote>
<p>&ldquo;I can rebuild everything after losing a node&rdquo;</p>
</blockquote>
<p>If you don&rsquo;t have the second one, you don&rsquo;t have a system — you have something that works right up until it doesn&rsquo;t.</p>
<h2 id="naming-and-ip-strategy-future-you-matters">Naming and IP Strategy: Future You Matters</h2>
<p>One of the most underrated improvements is consistency in naming and IP allocation. Not because it looks nice — because it reduces thinking when something goes wrong.</p>
<ul>
<li>Gateways are always <code>.1</code></li>
<li>Core services live in predictable ranges</li>
<li>Management IPs are easy to recognize</li>
<li>Temporary systems don&rsquo;t collide with permanent ones</li>
</ul>
<p>When something breaks, you shouldn&rsquo;t have to guess what <code>10.101.200.73</code> is. You should already know whether it belongs there.</p>
<h2 id="networking-where-things-actually-break">Networking: Where Things Actually Break</h2>
<p>Most of the real work has gone into networking, not Proxmox. VLANs, firewall rules, DNS, NAT — this is where the complexity lives, and it&rsquo;s also where most guides fall short.</p>
<p>A few lessons:</p>
<ul>
<li>Direction matters more than you&rsquo;d think (<code>in</code> vs. <code>out</code> rules will get you)</li>
<li>DHCP and DNS are the first things to check, not the last</li>
<li>&ldquo;It should work&rdquo; is not a debugging strategy</li>
</ul>
<p>The moment things started behaving like a segmented network instead of a flat LAN, everything became more predictable — even if it took more upfront thought to get there.</p>
<h2 id="the-stack-build-slowly-not-broadly">The Stack: Build Slowly, Not Broadly</h2>
<p>There&rsquo;s a long list of services I could run. That doesn&rsquo;t mean I should run them all at once.</p>
<p>The current approach is simple:</p>
<ol>
<li>Get the foundation stable</li>
<li>Add one service at a time</li>
<li>Make it observable (logs, uptime, access)</li>
<li>Make it recoverable</li>
<li>Then move on</li>
</ol>
<p>It&rsquo;s tempting to spin up ten containers in a weekend. It&rsquo;s better to have three that you actually understand and trust.</p>
<h2 id="cloudflare--reverse-proxy-one-door-in">Cloudflare + Reverse Proxy: One Door In</h2>
<p>Externally, everything comes through a single path:</p>
<ul>
<li>Cloudflare Tunnel</li>
<li>Reverse proxy routing internally</li>
</ul>
<p>No exposed ports. No one-off configurations per app. If a service needs to be public, it goes through the same entry point as everything else.</p>
<p>That&rsquo;s not just cleaner — it&rsquo;s how you avoid creating invisible risk over time.</p>
<h2 id="what-this-actually-enables">What This Actually Enables</h2>
<p>This setup isn&rsquo;t just for fun. It supports:</p>
<ul>
<li>Development environments that behave like production</li>
<li>Internal tools that don&rsquo;t rely on third-party services</li>
<li>Experiments that don&rsquo;t risk everything else</li>
<li>A platform for building real products</li>
</ul>
<p>That last one is the point. If your environment doesn&rsquo;t make it easier to build or run something useful, it&rsquo;s just expensive entertainment.</p>
<h2 id="final-thought">Final Thought</h2>
<p>A good setup isn&rsquo;t about how much you run. It&rsquo;s about how confidently you can change it.</p>
<p>If you can tear something down and bring it back cleanly, you&rsquo;re doing it right.</p>
<p>If you&rsquo;re afraid to touch it, you&rsquo;ve already limited what it can become.</p>
<hr>
<p>Focus less on tools and more on structure. The tools will change. The structure is what makes everything else work.</p>
]]></content:encoded></item></channel></rss>