Initial docs: Nextcloud AIO office suite (Collabora + Whiteboard)
- Full deployment reference for office.rmf44.xyz - Architecture, procedure, troubleshooting, operations pages - 4 SVG diagrams (topology, container-tree, data-flow, request-flow) - Mirrors gite_replacement template structure - Verified via 70/70 ad-hoc checks on 2026-08-10
This commit is contained in:
@@ -0,0 +1,180 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1140 720" font-family="-apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif">
|
||||
<defs>
|
||||
<style>
|
||||
.lbl { fill: #e6e6e6; font-size: 13px; }
|
||||
.lbl-sm { fill: #a8b0bd; font-size: 11px; }
|
||||
.lbl-tiny { fill: #8088a0; font-size: 10px; }
|
||||
.ttl { fill: #ffffff; font-size: 16px; font-weight: 600; }
|
||||
.section { fill: #7aa2f7; font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 1.2px; }
|
||||
.box { fill: #1f2230; stroke: #2a2e3f; stroke-width: 1.5; }
|
||||
.box-internal { fill: #252938; stroke: #3b4255; stroke-width: 1.5; }
|
||||
.box-public { fill: #1f2c3a; stroke: #4a78b5; stroke-width: 2; }
|
||||
.box-netbird { fill: #2a2535; stroke: #6b5aa0; stroke-width: 2; }
|
||||
.box-storage { fill: #1f2e28; stroke: #4a8a6b; stroke-width: 2; }
|
||||
.box-retired { fill: #1f2230; stroke: #5a3a3a; stroke-width: 1.5; stroke-dasharray: 4 3; }
|
||||
.x-link { stroke: #5a6072; stroke-width: 1.5; fill: none; }
|
||||
.x-link-primary { stroke: #7aa2f7; stroke-width: 2; fill: none; marker-end: url(#arr-b); }
|
||||
.x-link-mesh { stroke: #9d7ad9; stroke-width: 2; fill: none; stroke-dasharray: 6 4; marker-end: url(#arr-p); }
|
||||
.x-link-storage { stroke: #6cba92; stroke-width: 2; fill: none; marker-end: url(#arr-g); }
|
||||
.x-link-retired { stroke: #a86b6b; stroke-width: 1.5; fill: none; stroke-dasharray: 4 3; marker-end: url(#arr-r); }
|
||||
.x-link-fail { stroke: #d97a7a; stroke-width: 2; fill: none; marker-end: url(#arr-r); }
|
||||
</style>
|
||||
<marker id="arr-b" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto">
|
||||
<path d="M0,0 L10,5 L0,10 z" fill="#7aa2f7"/>
|
||||
</marker>
|
||||
<marker id="arr-p" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto">
|
||||
<path d="M0,0 L10,5 L0,10 z" fill="#9d7ad9"/>
|
||||
</marker>
|
||||
<marker id="arr-g" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto">
|
||||
<path d="M0,0 L10,5 L0,10 z" fill="#6cba92"/>
|
||||
</marker>
|
||||
<marker id="arr-r" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto">
|
||||
<path d="M0,0 L10,5 L0,10 z" fill="#a86b6b"/>
|
||||
</marker>
|
||||
</defs>
|
||||
|
||||
<rect width="1100" height="720" fill="#0f1117"/>
|
||||
|
||||
<text x="40" y="38" class="ttl">Nextcloud Office — Public Topology</text>
|
||||
<text x="40" y="58" class="lbl-sm">office.rmf44.xyz · Caddy on hawker · AIO on homework03 · NFS on desslok</text>
|
||||
|
||||
<!-- Section labels -->
|
||||
<text x="80" y="110" class="section">Public Internet</text>
|
||||
<text x="380" y="110" class="section">Edge (hawker)</text>
|
||||
<text x="660" y="110" class="section">Compute (homework03)</text>
|
||||
<text x="940" y="110" class="section">Storage (desslok)</text>
|
||||
|
||||
<!-- User/Internet -->
|
||||
<rect x="80" y="140" width="180" height="80" rx="6" class="box-public"/>
|
||||
<text x="170" y="170" text-anchor="middle" class="lbl">Browser / WebDAV client</text>
|
||||
<text x="170" y="190" text-anchor="middle" class="lbl-sm">user requests</text>
|
||||
<text x="170" y="206" text-anchor="middle" class="lbl-tiny">https://office.rmf44.xyz</text>
|
||||
|
||||
<!-- Cloudflare DNS -->
|
||||
<rect x="80" y="260" width="180" height="50" rx="6" class="box"/>
|
||||
<text x="170" y="282" text-anchor="middle" class="lbl">Cloudflare DNS</text>
|
||||
<text x="170" y="298" text-anchor="middle" class="lbl-tiny">A · 192.255.159.202</text>
|
||||
|
||||
<!-- hawker box -->
|
||||
<rect x="380" y="140" width="220" height="280" rx="8" class="box-public"/>
|
||||
<text x="490" y="166" text-anchor="middle" class="lbl">hawker (ColoCrossing, Buffalo NY)</text>
|
||||
<text x="490" y="184" text-anchor="middle" class="lbl-sm">192.255.159.202 / 100.79.4.103</text>
|
||||
|
||||
<!-- Caddy -->
|
||||
<rect x="400" y="210" width="180" height="68" rx="6" class="box-internal"/>
|
||||
<text x="490" y="234" text-anchor="middle" class="lbl">Caddy (caddy-caddy-1)</text>
|
||||
<text x="490" y="252" text-anchor="middle" class="lbl-sm">TLS + reverse proxy</text>
|
||||
<text x="490" y="268" text-anchor="middle" class="lbl-tiny">:443 → 100.79.142.164:11000</text>
|
||||
|
||||
<!-- NetBird client -->
|
||||
<rect x="400" y="298" width="180" height="48" rx="6" class="box-netbird"/>
|
||||
<text x="490" y="316" text-anchor="middle" class="lbl">NetBird (wt0)</text>
|
||||
<text x="490" y="333" text-anchor="middle" class="lbl-tiny">100.79.4.103 · P2P mesh</text>
|
||||
|
||||
<!-- Note -->
|
||||
<text x="490" y="370" text-anchor="middle" class="lbl-sm" fill="#9d7ad9">+ retired OnlyOffice torn down</text>
|
||||
<text x="490" y="386" text-anchor="middle" class="lbl-tiny" fill="#9d7ad9">see procedure.html §4.4</text>
|
||||
<rect x="400" y="395" width="180" height="18" rx="3" class="box-retired"/>
|
||||
<text x="490" y="408" text-anchor="middle" class="lbl-sm" fill="#a86b6b">[retired] onlyoffice-files-1</text>
|
||||
|
||||
<!-- Compute homework03 -->
|
||||
<rect x="660" y="140" width="240" height="380" rx="8" class="box-public"/>
|
||||
<text x="780" y="166" text-anchor="middle" class="lbl">homework03 (10.0.0.73)</text>
|
||||
<text x="780" y="184" text-anchor="middle" class="lbl-sm">Debian 13 · Docker 29.6.2 · 15 GB</text>
|
||||
|
||||
<!-- NetBird client -->
|
||||
<rect x="680" y="210" width="200" height="48" rx="6" class="box-netbird"/>
|
||||
<text x="780" y="228" text-anchor="middle" class="lbl">NetBird (wt0)</text>
|
||||
<text x="780" y="245" text-anchor="middle" class="lbl-tiny">100.79.142.164</text>
|
||||
|
||||
<!-- Mastercontainer -->
|
||||
<rect x="680" y="278" width="200" height="60" rx="6" class="box-internal"/>
|
||||
<text x="780" y="300" text-anchor="middle" class="lbl">nextcloud-aio-mastercontainer</text>
|
||||
<text x="780" y="316" text-anchor="middle" class="lbl-sm">orchestrator · admin UI</text>
|
||||
<text x="780" y="330" text-anchor="middle" class="lbl-tiny">host :80 · :8080 · :8443</text>
|
||||
|
||||
<!-- Apache -->
|
||||
<rect x="680" y="358" width="200" height="50" rx="6" class="box-internal"/>
|
||||
<text x="780" y="380" text-anchor="middle" class="lbl">nextcloud-aio-apache</text>
|
||||
<text x="780" y="397" text-anchor="middle" class="lbl-tiny">:11000 → PHP-FPM</text>
|
||||
|
||||
<!-- Sidecar group -->
|
||||
<rect x="680" y="428" width="200" height="80" rx="6" class="box"/>
|
||||
<text x="780" y="448" text-anchor="middle" class="lbl-sm">5 sidecars</text>
|
||||
<text x="780" y="466" text-anchor="middle" class="lbl-tiny">nextcloud · database · redis</text>
|
||||
<text x="780" y="481" text-anchor="middle" class="lbl-tiny">collabora · whiteboard</text>
|
||||
<text x="780" y="497" text-anchor="middle" class="lbl-tiny">notify-push · database-dump</text>
|
||||
|
||||
<!-- NFS mount -->
|
||||
<rect x="940" y="358" width="140" height="50" rx="6" class="box-storage"/>
|
||||
<text x="1010" y="378" text-anchor="middle" class="lbl-sm">/srv/nc-files/</text>
|
||||
<text x="1010" y="395" text-anchor="middle" class="lbl-tiny">NFS v4.1 mount</text>
|
||||
|
||||
<!-- Storage desslok -->
|
||||
<rect x="940" y="140" width="140" height="200" rx="8" class="box-storage"/>
|
||||
<text x="1010" y="166" text-anchor="middle" class="lbl">desslok (10.0.0.105)</text>
|
||||
<text x="1010" y="184" text-anchor="middle" class="lbl-sm">FreeBSD · ZFS slab</text>
|
||||
|
||||
<rect x="955" y="210" width="110" height="40" rx="4" class="box-internal"/>
|
||||
<text x="1010" y="227" text-anchor="middle" class="lbl-sm">/slab/container_storage/</text>
|
||||
<text x="1010" y="244" text-anchor="middle" class="lbl-tiny">office/</text>
|
||||
|
||||
<rect x="955" y="260" width="110" height="30" rx="3" class="box"/>
|
||||
<text x="1010" y="279" text-anchor="middle" class="lbl-tiny">nextcloud/</text>
|
||||
|
||||
<rect x="955" y="294" width="110" height="30" rx="3" class="box"/>
|
||||
<text x="1010" y="313" text-anchor="middle" class="lbl-tiny">backups/</text>
|
||||
|
||||
<!-- Backup pipeline note -->
|
||||
<rect x="660" y="540" width="420" height="120" rx="6" class="box"/>
|
||||
<text x="870" y="562" text-anchor="middle" class="lbl">Daily backup pipeline (hector → homework03 → NFS)</text>
|
||||
<text x="700" y="585" class="lbl-sm">03:30 UTC, systemd timer on hector</text>
|
||||
<text x="700" y="605" class="lbl-sm">ssh homework03 sudo /usr/local/bin/office-backup.sh</text>
|
||||
<text x="700" y="625" class="lbl-sm"> → pg_dumpall → /srv/nc-files/backups/office-YYYYMMDD-*.gz</text>
|
||||
<text x="700" y="645" class="lbl-tiny">retention: 14 days, prunes via find -mtime +14</text>
|
||||
|
||||
<!-- Edges -->
|
||||
<!-- user → DNS -->
|
||||
<line x1="170" y1="220" x2="170" y2="260" class="x-link"/>
|
||||
<text x="178" y="245" class="lbl-tiny">1. resolve</text>
|
||||
|
||||
<!-- DNS → Caddy -->
|
||||
<line x1="260" y1="285" x2="400" y2="244" class="x-link-primary"/>
|
||||
<text x="280" y="260" class="lbl-tiny">2. HTTPS</text>
|
||||
|
||||
<!-- Caddy → NetBird -->
|
||||
<line x1="490" y1="278" x2="490" y2="298" class="x-link"/>
|
||||
|
||||
<!-- NetBird hawker → NetBird homework03 (mesh) -->
|
||||
<line x1="580" y1="234" x2="680" y2="234" class="x-link-mesh"/>
|
||||
<text x="630" y="225" text-anchor="middle" class="lbl-tiny" fill="#9d7ad9">WireGuard P2P · UDP 51820</text>
|
||||
|
||||
<!-- NetBird homework03 → Apache -->
|
||||
<line x1="780" y1="258" x2="780" y2="358" class="x-link"/>
|
||||
|
||||
<!-- Caddy → Apache (logically) -->
|
||||
<line x1="600" y1="244" x2="680" y2="383" class="x-link-primary" stroke-dasharray="3 3"/>
|
||||
<text x="630" y="320" class="lbl-tiny" fill="#7aa2f7" transform="rotate(60 630 320)">upstream :11000</text>
|
||||
|
||||
<!-- NFS from compute → storage -->
|
||||
<line x1="880" y1="383" x2="940" y2="383" class="x-link-storage"/>
|
||||
<text x="910" y="377" text-anchor="middle" class="lbl-tiny" fill="#6cba92">NFS</text>
|
||||
|
||||
<!-- Backup arrow from backup pipeline → storage -->
|
||||
<line x1="1050" y1="580" x2="1010" y2="340" class="x-link-storage" stroke-dasharray="4 4"/>
|
||||
<text x="1050" y="450" class="lbl-tiny" fill="#6cba92">writes</text>
|
||||
|
||||
<!-- Legend -->
|
||||
<g transform="translate(40, 690)">
|
||||
<rect x="0" y="-10" width="14" height="14" rx="2" class="box-public"/>
|
||||
<text x="22" y="2" class="lbl-tiny">public</text>
|
||||
<rect x="80" y="-10" width="14" height="14" rx="2" class="box-netbird"/>
|
||||
<text x="102" y="2" class="lbl-tiny">mesh</text>
|
||||
<rect x="160" y="-10" width="14" height="14" rx="2" class="box-storage"/>
|
||||
<text x="182" y="2" class="lbl-tiny">storage</text>
|
||||
<rect x="260" y="-10" width="14" height="14" rx="2" class="box-retired"/>
|
||||
<text x="282" y="2" class="lbl-tiny">retired</text>
|
||||
</g>
|
||||
|
||||
<text x="1060" y="694" text-anchor="end" class="lbl-tiny">2026-08-10 · nextcloud_office</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 10 KiB |
Reference in New Issue
Block a user