210 lines
13 KiB
HTML
210 lines
13 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<title>PD Future-State Topology</title>
|
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;600;700&display=swap" rel="stylesheet">
|
|
<style>
|
|
:root {
|
|
--bg: #020617;
|
|
--panel: #0f172a;
|
|
--panel-2: #111827;
|
|
--text: #e2e8f0;
|
|
--muted: #94a3b8;
|
|
--cyan: #22d3ee;
|
|
--emerald: #34d399;
|
|
--violet: #a78bfa;
|
|
--amber: #fbbf24;
|
|
--rose: #fb7185;
|
|
--slate: #94a3b8;
|
|
--line: #1e293b;
|
|
}
|
|
* { box-sizing: border-box; }
|
|
body {
|
|
margin: 0;
|
|
font-family: 'JetBrains Mono', monospace;
|
|
color: var(--text);
|
|
background:
|
|
linear-gradient(var(--line) 1px, transparent 1px),
|
|
linear-gradient(90deg, var(--line) 1px, transparent 1px),
|
|
var(--bg);
|
|
background-size: 40px 40px;
|
|
}
|
|
.wrap { max-width: 1600px; margin: 0 auto; padding: 24px; }
|
|
.header, .card, .diagram-shell {
|
|
background: rgba(15, 23, 42, 0.88);
|
|
border: 1px solid #1f2937;
|
|
border-radius: 16px;
|
|
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.35);
|
|
}
|
|
.header { padding: 20px 24px; margin-bottom: 20px; }
|
|
h1 { margin: 0 0 8px; font-size: 28px; }
|
|
.subtitle { color: var(--muted); line-height: 1.6; }
|
|
.diagram-shell { padding: 16px; overflow-x: auto; }
|
|
svg { width: 100%; min-width: 1450px; height: auto; display: block; }
|
|
.grid {
|
|
display: grid;
|
|
grid-template-columns: repeat(3, 1fr);
|
|
gap: 16px;
|
|
margin-top: 20px;
|
|
}
|
|
.card { padding: 16px 18px; }
|
|
.card h3 { margin: 0 0 12px; font-size: 16px; }
|
|
.card ul { margin: 0; padding-left: 18px; color: var(--muted); line-height: 1.7; }
|
|
.footer { margin-top: 16px; color: var(--muted); font-size: 12px; }
|
|
@media (max-width: 1100px) { .grid { grid-template-columns: 1fr; } }
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class="wrap">
|
|
<div class="header">
|
|
<h1>PD Future-State Topology</h1>
|
|
<div class="subtitle">
|
|
Target-state operator map for the post-upgrade homelab: PD becomes the primary production platform, NOMAD remains the trusted secondary lane, Rocinante is optional AI specialization, and Serenity is drained then retired after storage adoption.
|
|
</div>
|
|
</div>
|
|
|
|
<div class="diagram-shell">
|
|
<svg viewBox="0 0 1500 940" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="PD future-state topology diagram">
|
|
<defs>
|
|
<marker id="arrow-cyan" markerWidth="10" markerHeight="10" refX="8" refY="3" orient="auto" markerUnits="strokeWidth">
|
|
<path d="M0,0 L0,6 L9,3 z" fill="#22d3ee" />
|
|
</marker>
|
|
<marker id="arrow-emerald" markerWidth="10" markerHeight="10" refX="8" refY="3" orient="auto" markerUnits="strokeWidth">
|
|
<path d="M0,0 L0,6 L9,3 z" fill="#34d399" />
|
|
</marker>
|
|
<marker id="arrow-rose" markerWidth="10" markerHeight="10" refX="8" refY="3" orient="auto" markerUnits="strokeWidth">
|
|
<path d="M0,0 L0,6 L9,3 z" fill="#fb7185" />
|
|
</marker>
|
|
<marker id="arrow-amber" markerWidth="10" markerHeight="10" refX="8" refY="3" orient="auto" markerUnits="strokeWidth">
|
|
<path d="M0,0 L0,6 L9,3 z" fill="#fbbf24" />
|
|
</marker>
|
|
</defs>
|
|
|
|
<rect x="20" y="20" width="1460" height="900" rx="18" fill="none" stroke="#334155" stroke-width="1.5" />
|
|
|
|
<path d="M745 115 L745 170" stroke="#22d3ee" stroke-width="3" fill="none" marker-end="url(#arrow-cyan)"/>
|
|
<path d="M540 405 L400 405" stroke="#34d399" stroke-width="3" fill="none" marker-end="url(#arrow-emerald)"/>
|
|
<path d="M960 405 L1110 405" stroke="#a78bfa" stroke-width="3" fill="none" marker-end="url(#arrow-cyan)"/>
|
|
<path d="M745 640 L745 760" stroke="#fbbf24" stroke-width="3" fill="none" marker-end="url(#arrow-amber)"/>
|
|
<path d="M1240 535 C1320 560, 1360 620, 1360 710" stroke="#fb7185" stroke-width="3" fill="none" stroke-dasharray="8 6" marker-end="url(#arrow-rose)"/>
|
|
<path d="M250 520 C180 570, 160 640, 180 725" stroke="#34d399" stroke-width="3" fill="none" marker-end="url(#arrow-emerald)"/>
|
|
<path d="M1180 220 C1290 240, 1360 300, 1380 390" stroke="#fbbf24" stroke-width="2.5" fill="none" stroke-dasharray="7 5" marker-end="url(#arrow-amber)"/>
|
|
|
|
<rect x="600" y="50" width="290" height="65" rx="10" fill="#0f172a" />
|
|
<rect x="600" y="50" width="290" height="65" rx="10" fill="rgba(30,41,59,0.55)" stroke="#94a3b8" stroke-width="1.5" />
|
|
<text x="745" y="77" fill="#e2e8f0" text-anchor="middle" font-size="15" font-weight="700">Internet / Remote Edge</text>
|
|
<text x="745" y="97" fill="#94a3b8" text-anchor="middle" font-size="11">Pangolin VPS, public DNS, external access</text>
|
|
|
|
<rect x="510" y="170" width="470" height="470" rx="18" fill="none" stroke="#fbbf24" stroke-width="1.5" stroke-dasharray="10 6" />
|
|
<text x="530" y="195" fill="#fbbf24" font-size="12">Production / Servers lane</text>
|
|
|
|
<rect x="60" y="300" width="340" height="270" rx="14" fill="#0f172a" />
|
|
<rect x="60" y="300" width="340" height="270" rx="14" fill="rgba(6,78,59,0.35)" stroke="#34d399" stroke-width="1.6" />
|
|
<text x="85" y="330" fill="#e2e8f0" font-size="18" font-weight="700">N.O.M.A.D.</text>
|
|
<text x="85" y="352" fill="#34d399" font-size="12">Trusted secondary / resilience lane</text>
|
|
<text x="85" y="385" fill="#cbd5e1" font-size="12">• Project NOMAD offline stack</text>
|
|
<text x="85" y="408" fill="#cbd5e1" font-size="12">• Pelican / Wings / game servers</text>
|
|
<text x="85" y="431" fill="#cbd5e1" font-size="12">• Backup Technitium resolver</text>
|
|
<text x="85" y="454" fill="#cbd5e1" font-size="12">• Small bounded utility workloads</text>
|
|
<text x="85" y="500" fill="#94a3b8" font-size="11">Second failure domain. Do not turn into a second PD.</text>
|
|
|
|
<rect x="540" y="220" width="420" height="360" rx="16" fill="#0f172a" />
|
|
<rect x="540" y="220" width="420" height="360" rx="16" fill="rgba(6,78,59,0.42)" stroke="#34d399" stroke-width="1.8" />
|
|
<text x="570" y="253" fill="#e2e8f0" font-size="24" font-weight="700">PD (upgraded HL15 Beast)</text>
|
|
<text x="570" y="277" fill="#34d399" font-size="13">Primary production core on bare-metal TrueNAS Scale</text>
|
|
|
|
<rect x="570" y="305" width="180" height="110" rx="10" fill="rgba(76,29,149,0.36)" stroke="#a78bfa" stroke-width="1.4" />
|
|
<text x="590" y="330" fill="#e2e8f0" font-size="14" font-weight="700">Storage</text>
|
|
<text x="590" y="354" fill="#cbd5e1" font-size="11">• imported Serenity capacity</text>
|
|
<text x="590" y="374" fill="#cbd5e1" font-size="11">• new 20TB+ HDD pool</text>
|
|
<text x="590" y="394" fill="#cbd5e1" font-size="11">• SSD/NVMe app + VM tier</text>
|
|
|
|
<rect x="770" y="305" width="160" height="110" rx="10" fill="rgba(8,51,68,0.36)" stroke="#22d3ee" stroke-width="1.4" />
|
|
<text x="790" y="330" fill="#e2e8f0" font-size="14" font-weight="700">Apps + DBs</text>
|
|
<text x="790" y="354" fill="#cbd5e1" font-size="11">• Docker / compose</text>
|
|
<text x="790" y="374" fill="#cbd5e1" font-size="11">• shared Postgres/MariaDB/Redis</text>
|
|
<text x="790" y="394" fill="#cbd5e1" font-size="11">• identity / monitoring / media</text>
|
|
|
|
<rect x="570" y="440" width="180" height="110" rx="10" fill="rgba(120,53,15,0.32)" stroke="#fbbf24" stroke-width="1.4" />
|
|
<text x="590" y="465" fill="#e2e8f0" font-size="14" font-weight="700">Media + ARR</text>
|
|
<text x="590" y="489" fill="#cbd5e1" font-size="11">• qbit/ARR move here after cutover</text>
|
|
<text x="590" y="509" fill="#cbd5e1" font-size="11">• path locality follows the disks</text>
|
|
<text x="590" y="529" fill="#cbd5e1" font-size="11">• removes Serenity dependency</text>
|
|
|
|
<rect x="770" y="440" width="160" height="110" rx="10" fill="rgba(136,19,55,0.30)" stroke="#fb7185" stroke-width="1.4" />
|
|
<text x="790" y="465" fill="#e2e8f0" font-size="14" font-weight="700">Cyber VM lane</text>
|
|
<text x="790" y="489" fill="#cbd5e1" font-size="11">• AD / Windows / Linux labs</text>
|
|
<text x="790" y="509" fill="#cbd5e1" font-size="11">• segmented VLAN</text>
|
|
<text x="790" y="529" fill="#cbd5e1" font-size="11">• default-deny to production</text>
|
|
|
|
<rect x="1110" y="300" width="310" height="250" rx="14" fill="#0f172a" />
|
|
<rect x="1110" y="300" width="310" height="250" rx="14" fill="rgba(76,29,149,0.36)" stroke="#a78bfa" stroke-width="1.6" />
|
|
<text x="1135" y="330" fill="#e2e8f0" font-size="18" font-weight="700">Rocinante</text>
|
|
<text x="1135" y="352" fill="#a78bfa" font-size="12">Optional AI specialist</text>
|
|
<text x="1135" y="385" fill="#cbd5e1" font-size="12">• Keep if PD does not get the 4090</text>
|
|
<text x="1135" y="408" fill="#cbd5e1" font-size="12">• Otherwise overflow / experimental AI</text>
|
|
<text x="1135" y="431" fill="#cbd5e1" font-size="12">• Must justify its ongoing power + sprawl</text>
|
|
<text x="1135" y="477" fill="#94a3b8" font-size="11">Heavy inference can stay separate if desired, but production does not depend on that.</text>
|
|
|
|
<rect x="545" y="690" width="400" height="180" rx="16" fill="#0f172a" />
|
|
<rect x="545" y="690" width="400" height="180" rx="16" fill="rgba(120,53,15,0.30)" stroke="#fbbf24" stroke-width="1.6" stroke-dasharray="10 6" />
|
|
<text x="570" y="720" fill="#e2e8f0" font-size="18" font-weight="700">Serenity</text>
|
|
<text x="570" y="742" fill="#fbbf24" font-size="12">Transition-only platform</text>
|
|
<text x="570" y="775" fill="#cbd5e1" font-size="12">Now: storage owner, torrent locality, reranker, backup DNS node</text>
|
|
<text x="570" y="798" fill="#cbd5e1" font-size="12">Then: drain services, adopt storage into PD, remove dependency</text>
|
|
<text x="570" y="821" fill="#fb7185" font-size="12">End-state: retire to reduce power draw and operational sprawl</text>
|
|
|
|
<rect x="1140" y="650" width="280" height="200" rx="14" fill="#0f172a" />
|
|
<rect x="1140" y="650" width="280" height="200" rx="14" fill="rgba(136,19,55,0.28)" stroke="#fb7185" stroke-width="1.6" />
|
|
<text x="1165" y="680" fill="#e2e8f0" font-size="18" font-weight="700">Lab VLAN policy</text>
|
|
<text x="1165" y="712" fill="#cbd5e1" font-size="12">• Lab -> production: deny by default</text>
|
|
<text x="1165" y="735" fill="#cbd5e1" font-size="12">• Trusted admin -> lab: explicit allow</text>
|
|
<text x="1165" y="758" fill="#cbd5e1" font-size="12">• Lab -> DNS/NTP/internet: allow</text>
|
|
<text x="1165" y="781" fill="#cbd5e1" font-size="12">• Resource-cap VMs to protect production</text>
|
|
<text x="1165" y="804" fill="#cbd5e1" font-size="12">• Malware / truly sketchy work should still move elsewhere</text>
|
|
|
|
<rect x="80" y="660" width="300" height="170" rx="14" fill="#0f172a" />
|
|
<rect x="80" y="660" width="300" height="170" rx="14" fill="rgba(30,41,59,0.52)" stroke="#94a3b8" stroke-width="1.4" />
|
|
<text x="105" y="690" fill="#e2e8f0" font-size="18" font-weight="700">Operating principles</text>
|
|
<text x="105" y="722" fill="#cbd5e1" font-size="12">1. PD is the production center of gravity</text>
|
|
<text x="105" y="745" fill="#cbd5e1" font-size="12">2. NOMAD stays the trusted secondary lane</text>
|
|
<text x="105" y="768" fill="#cbd5e1" font-size="12">3. Cyber labs can share hardware, not trust</text>
|
|
<text x="105" y="791" fill="#cbd5e1" font-size="12">4. Design around Serenity retirement</text>
|
|
</svg>
|
|
</div>
|
|
|
|
<div class="grid">
|
|
<div class="card">
|
|
<h3>What belongs on PD</h3>
|
|
<ul>
|
|
<li>Primary ZFS storage, production Docker, databases, media, identity, monitoring, and DNS source-of-truth</li>
|
|
<li>qBittorrent + ARR stack after the storage move, because path locality should follow the disks</li>
|
|
<li>AI primary too if the 4090 lands there</li>
|
|
</ul>
|
|
</div>
|
|
<div class="card">
|
|
<h3>What remains off PD</h3>
|
|
<ul>
|
|
<li>NOMAD keeps offline knowledge, game hosting, and backup DNS</li>
|
|
<li>Rocinante stays only if heavy inference separation is still useful</li>
|
|
<li>High-risk or sketchy cyber work should eventually move to a dedicated lab node</li>
|
|
</ul>
|
|
</div>
|
|
<div class="card">
|
|
<h3>What this means for Serenity</h3>
|
|
<ul>
|
|
<li>Remove obvious service sprawl early</li>
|
|
<li>Preserve storage/torrent locality only until PD owns the storage directly</li>
|
|
<li>Retire Serenity once its storage and remaining roles are drained</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="footer">Generated as a repo-owned planning artifact for the PD rebuild, segmentation plan, and Serenity retirement path.</div>
|
|
</div>
|
|
</body>
|
|
</html> |