Files
rs_website/templates/infrastructure.html
2026-03-27 07:57:13 -05:00

242 lines
11 KiB
HTML

{{define "title"}}Infrastructure — Ridgway Systems{{end}}
{{define "meta-desc"}}Hardware inventory and network diagram for the Ridgway Systems FreeBSD homelab.{{end}}
{{define "content"}}
<div class="page-header">
<h1>Infrastructure</h1>
<p class="page-desc">Physical hardware, network layout, and service placement.</p>
</div>
<section class="infra-section">
<h2>Hardware</h2>
<table class="hw-table">
<thead>
<tr>
<th>Host</th>
<th>Hardware</th>
<th>OS</th>
<th>Role</th>
</tr>
</thead>
<tbody>
<tr>
<td class="hw-name">fw01</td>
<td>SuperMicro 1U<br><span class="hw-spec">E3-1230v2 &bull; 16 GB RAM</span></td>
<td>OPNsense 26.1</td>
<td>Firewall, router, VPN, reverse proxy<br><span class="hw-spec">pf &bull; relayd &bull; WireGuard &bull; unbound</span></td>
</tr>
<tr>
<td class="hw-name">srv01</td>
<td>Dell R720<br><span class="hw-spec">Xeon E5-2620 &bull; 96 GB RAM</span></td>
<td>FreeBSD</td>
<td>Primary server<br><span class="hw-spec">Gitea &bull; httpd &bull; OpenSMTPD &bull; Prometheus &bull; Grafana &bull; Matrix</span></td>
</tr>
<tr>
<td class="hw-name">srv02</td>
<td>Dell R710<br><span class="hw-spec">Xeon X5560 &bull; 288 GB RAM</span></td>
<td>FreeBSD + Linux VMs</td>
<td>Backup, game servers<br><span class="hw-spec">nsd &bull; qemu &bull; Jellyfin &bull; secondary DNS</span></td>
</tr>
<tr>
<td class="hw-name">ws01</td>
<td>Desktop<br><span class="hw-spec">Intel Core i9-12900K &bull; 64 GB RAM</span></td>
<td>Fedora Linux 43</td>
<td>Daily driver, Ansible control node<br><span class="hw-spec">Development &bull; playbook management</span></td>
</tr>
<tr>
<td class="hw-name">ws02</td>
<td>Lenovo ThinkPad T14s<br><span class="hw-spec">AMD Ryzen Pro 5 8640HS &bull; 32 GB RAM</span></td>
<td>Fedora Linux 43</td>
<td>Mobile daily driver<br><span class="hw-spec">Development &bull; remote work</span></td>
</tr>
<tr>
<td class="hw-name">ws03</td>
<td>System76 Lemur Pro<br><span class="hw-spec">Intel Core i7-10210U &bull; 16 GB RAM</span></td>
<td>FreeBSD</td>
<td>FreeBSD testing machine<br><span class="hw-spec">Development &bull; testing</span></td>
</tr>
</tbody>
</table>
</section>
<section class="infra-section">
<h2>Network Diagram</h2>
<div class="netmap-wrap">
<svg class="netmap" viewBox="0 0 720 430" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Network topology diagram">
<!-- Internet -->
<g class="netmap-node" data-tooltip="Public internet — WAN uplink">
<rect x="285" y="10" width="150" height="38" rx="4" class="netmap-box netmap-box-internet"/>
<text x="360" y="34" class="netmap-label">Internet</text>
</g>
<!-- Internet → fw01 -->
<line x1="360" y1="48" x2="360" y2="88" class="netmap-line"/>
<!-- fw01 -->
<g class="netmap-node" data-tooltip="fw01 · SuperMicro 1U&#10;OPNsense 26.1&#10;&#10;Services: pf · relayd · WireGuard · unbound">
<rect x="220" y="88" width="280" height="44" rx="4" class="netmap-box netmap-box-fw"/>
<text x="360" y="107" class="netmap-label">fw01</text>
<text x="360" y="123" class="netmap-sublabel">OPNsense 26.1 · SuperMicro 1U</text>
</g>
<!-- fw01 → trunk line -->
<line x1="360" y1="132" x2="360" y2="160" class="netmap-line"/>
<!-- horizontal trunk -->
<line x1="60" y1="160" x2="660" y2="160" class="netmap-line"/>
<!-- VLAN drop lines -->
<line x1="60" y1="160" x2="60" y2="185" class="netmap-line"/>
<line x1="195" y1="160" x2="195" y2="185" class="netmap-line"/>
<line x1="360" y1="160" x2="360" y2="185" class="netmap-line"/>
<line x1="525" y1="160" x2="525" y2="185" class="netmap-line"/>
<line x1="660" y1="160" x2="660" y2="185" class="netmap-line"/>
<!-- VLAN 1 — Mgmt -->
<g class="netmap-node" data-tooltip="VLAN 1 · Management&#10;10.0.1.0/24&#10;&#10;Switches, OOB, firewall mgmt">
<rect x="10" y="185" width="100" height="38" rx="4" class="netmap-box netmap-box-vlan"/>
<text x="60" y="200" class="netmap-label netmap-label-sm">Mgmt</text>
<text x="60" y="215" class="netmap-sublabel">VLAN 1</text>
</g>
<!-- VLAN 10 — Servers -->
<g class="netmap-node" data-tooltip="VLAN 10 · Servers&#10;10.0.10.0/24&#10;&#10;srv01, srv02">
<rect x="145" y="185" width="100" height="38" rx="4" class="netmap-box netmap-box-vlan"/>
<text x="195" y="200" class="netmap-label netmap-label-sm">Servers</text>
<text x="195" y="215" class="netmap-sublabel">VLAN 10</text>
</g>
<!-- VLAN 20 — Desktop -->
<g class="netmap-node" data-tooltip="VLAN 20 · Desktop&#10;10.0.20.0/24&#10;&#10;ws01, personal devices">
<rect x="310" y="185" width="100" height="38" rx="4" class="netmap-box netmap-box-vlan"/>
<text x="360" y="200" class="netmap-label netmap-label-sm">Desktop</text>
<text x="360" y="215" class="netmap-sublabel">VLAN 20</text>
</g>
<!-- VLAN 30 — Game -->
<g class="netmap-node" data-tooltip="VLAN 30 · Game&#10;10.0.30.0/24&#10;&#10;Game clients, gaming VMs">
<rect x="475" y="185" width="100" height="38" rx="4" class="netmap-box netmap-box-vlan"/>
<text x="525" y="200" class="netmap-label netmap-label-sm">Game</text>
<text x="525" y="215" class="netmap-sublabel">VLAN 30</text>
</g>
<!-- VLAN 40 — IoT -->
<g class="netmap-node" data-tooltip="VLAN 40 · IoT/Guest&#10;10.0.40.0/24&#10;&#10;Untrusted / isolated devices">
<rect x="610" y="185" width="100" height="38" rx="4" class="netmap-box netmap-box-vlan"/>
<text x="660" y="200" class="netmap-label netmap-label-sm">IoT/Guest</text>
<text x="660" y="215" class="netmap-sublabel">VLAN 40</text>
</g>
<!-- Servers VLAN → hosts -->
<line x1="170" y1="223" x2="170" y2="255" class="netmap-line"/>
<line x1="170" y1="255" x2="145" y2="255" class="netmap-line"/>
<line x1="170" y1="255" x2="220" y2="255" class="netmap-line"/>
<line x1="145" y1="255" x2="145" y2="275" class="netmap-line"/>
<line x1="220" y1="255" x2="220" y2="275" class="netmap-line"/>
<!-- srv01 -->
<g class="netmap-node" data-tooltip="srv01 · Dell R720&#10;Xeon E5-2620 · 96 GB RAM&#10;FreeBSD&#10;&#10;httpd · Gitea · OpenSMTPD&#10;Prometheus · Grafana · Matrix">
<rect x="90" y="275" width="110" height="44" rx="4" class="netmap-box netmap-box-host"/>
<text x="145" y="293" class="netmap-label netmap-label-sm">srv01</text>
<text x="145" y="308" class="netmap-sublabel">Dell R720 · FreeBSD</text>
</g>
<!-- srv02 -->
<g class="netmap-node" data-tooltip="srv02 · Dell R710&#10;Xeon X5560 · 288 GB RAM&#10;FreeBSD + Linux VMs&#10;&#10;nsd · qemu · Jellyfin&#10;Game servers">
<rect x="165" y="275" width="110" height="44" rx="4" class="netmap-box netmap-box-host"/>
<text x="220" y="293" class="netmap-label netmap-label-sm">srv02</text>
<text x="220" y="308" class="netmap-sublabel">Dell R710 · FreeBSD</text>
</g>
<!-- Desktop VLAN → hosts -->
<line x1="360" y1="223" x2="360" y2="255" class="netmap-line"/>
<line x1="300" y1="255" x2="420" y2="255" class="netmap-line"/>
<line x1="300" y1="255" x2="300" y2="275" class="netmap-line"/>
<line x1="360" y1="255" x2="360" y2="275" class="netmap-line"/>
<line x1="420" y1="255" x2="420" y2="275" class="netmap-line"/>
<!-- ws01 -->
<g class="netmap-node" data-tooltip="ws01 · Desktop&#10;Intel Core i9-12900K · 64 GB RAM&#10;Fedora Linux 43&#10;&#10;Daily driver · Ansible control node">
<rect x="248" y="275" width="104" height="44" rx="4" class="netmap-box netmap-box-host"/>
<text x="300" y="293" class="netmap-label netmap-label-sm">ws01</text>
<text x="300" y="308" class="netmap-sublabel">Desktop · Fedora</text>
</g>
<!-- ws02 -->
<g class="netmap-node" data-tooltip="ws02 · Lenovo ThinkPad T14s&#10;AMD Ryzen Pro 5 8640HS · 32 GB RAM&#10;Fedora Linux 43&#10;&#10;Mobile daily driver">
<rect x="308" y="275" width="104" height="44" rx="4" class="netmap-box netmap-box-host"/>
<text x="360" y="293" class="netmap-label netmap-label-sm">ws02</text>
<text x="360" y="308" class="netmap-sublabel">ThinkPad T14s</text>
</g>
<!-- ws03 -->
<g class="netmap-node" data-tooltip="ws03 · System76 Lemur Pro&#10;Intel Core i7-10210U · 16 GB RAM&#10;FreeBSD&#10;&#10;FreeBSD testing machine">
<rect x="368" y="275" width="104" height="44" rx="4" class="netmap-box netmap-box-host"/>
<text x="420" y="293" class="netmap-label netmap-label-sm">ws03</text>
<text x="420" y="308" class="netmap-sublabel">Lemur Pro · FreeBSD</text>
</g>
</svg>
<!-- Tooltip element -->
<div class="netmap-tooltip" id="netmap-tooltip"></div>
</div>
<script>
(function() {
var tip = document.getElementById('netmap-tooltip');
document.querySelectorAll('.netmap-node').forEach(function(node) {
node.addEventListener('mouseenter', function(e) {
var text = node.getAttribute('data-tooltip') || '';
tip.textContent = text;
tip.classList.add('visible');
});
node.addEventListener('mousemove', function(e) {
tip.style.left = (e.pageX + 14) + 'px';
tip.style.top = (e.pageY - 10) + 'px';
});
node.addEventListener('mouseleave', function() {
tip.classList.remove('visible');
});
});
})();
</script>
</section>
<section class="infra-section">
<h2>Services</h2>
<table class="hw-table">
<thead>
<tr><th>Service</th><th>Host</th><th>URL</th></tr>
</thead>
<tbody>
<tr><td>Web / httpd</td><td>srv01</td><td>ridgwaysystems.org</td></tr>
<tr><td>Gitea</td><td>srv01</td><td>git.ridgwaysystems.org</td></tr>
<tr><td>Email (OpenSMTPD)</td><td>srv01</td><td>&mdash;</td></tr>
<tr><td>DNS (unbound)</td><td>fw01</td><td>internal resolver</td></tr>
<tr><td>DNS (nsd)</td><td>srv02</td><td>authoritative</td></tr>
<tr><td>Prometheus + Grafana</td><td>srv01</td><td>monitoring.ridgwaysystems.org</td></tr>
<tr><td>Matrix</td><td>srv01</td><td>matrix.ridgwaysystems.org</td></tr>
<tr><td>Jellyfin</td><td>srv02</td><td>jellyfin.ridgwaysystems.org</td></tr>
<tr><td>WireGuard VPN</td><td>fw01</td><td>vpn.ridgwaysystems.org</td></tr>
</tbody>
</table>
</section>
<section class="infra-section">
<h2>VLAN Layout</h2>
<table class="hw-table">
<thead>
<tr><th>VLAN</th><th>ID</th><th>Subnet</th><th>Purpose</th></tr>
</thead>
<tbody>
<tr><td>Management</td><td>1</td><td>10.0.1.0/24</td><td>Switches, OOB, firewall management</td></tr>
<tr><td>Servers</td><td>10</td><td>10.0.10.0/24</td><td>srv01, srv02 — all hosted services</td></tr>
<tr><td>Desktop</td><td>20</td><td>10.0.20.0/24</td><td>ws01 and personal devices</td></tr>
<tr><td>Game</td><td>30</td><td>10.0.30.0/24</td><td>Gaming VMs and clients</td></tr>
<tr><td>IoT/Guest</td><td>40</td><td>10.0.40.0/24</td><td>Untrusted / isolated devices</td></tr>
</tbody>
</table>
</section>
{{end}}