- 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
121 lines
7.5 KiB
XML
121 lines
7.5 KiB
XML
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1100 600" 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; }
|
|
.fs-local { fill: #1f2c3a; stroke: #4a78b5; stroke-width: 2; }
|
|
.fs-nfs { fill: #1f2e28; stroke: #4a8a6b; stroke-width: 2; }
|
|
.fs-named { fill: #2a2535; stroke: #6b5aa0; stroke-width: 2; }
|
|
.arrow-nfs { stroke: #6cba92; stroke-width: 2; fill: none; marker-end: url(#arr-g); }
|
|
.arrow-local { stroke: #7aa2f7; stroke-width: 2; fill: none; marker-end: url(#arr-b); }
|
|
.arrow-named { stroke: #9d7ad9; stroke-width: 2; fill: none; marker-end: url(#arr-p); }
|
|
</style>
|
|
<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-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>
|
|
</defs>
|
|
|
|
<rect width="1100" height="600" fill="#0f1117"/>
|
|
|
|
<text x="40" y="38" class="ttl">Data Flow — where each piece lives</text>
|
|
<text x="40" y="58" class="lbl-sm">NFS for user data + backups · ext4 for container state · local named volumes for postgres</text>
|
|
|
|
<text x="80" y="105" class="section">homework03 (local ext4)</text>
|
|
<text x="540" y="105" class="section">desslok (NFS v4.1)</text>
|
|
|
|
<!-- Local column -->
|
|
<rect x="60" y="130" width="430" height="380" rx="8" class="fs-local"/>
|
|
<text x="80" y="155" class="lbl">/ (ext4)</text>
|
|
|
|
<rect x="80" y="180" width="390" height="48" rx="4" class="box-internal"/>
|
|
<text x="275" y="200" text-anchor="middle" class="lbl-sm">/mnt/nc-data/nextcloud-data</text>
|
|
<text x="275" y="216" text-anchor="middle" class="lbl-tiny">→ nextcloud-aio-nextcloud:/nextcloud-aio/data</text>
|
|
|
|
<rect x="80" y="240" width="190" height="80" rx="4" class="box-internal"/>
|
|
<text x="175" y="262" text-anchor="middle" class="lbl-sm">mastercontainer</text>
|
|
<text x="175" y="280" text-anchor="middle" class="lbl-tiny">configuration.json</text>
|
|
<text x="175" y="296" text-anchor="middle" class="lbl-tiny">domain validation cache</text>
|
|
|
|
<rect x="80" y="332" width="190" height="60" rx="4" class="box-internal"/>
|
|
<text x="175" y="354" text-anchor="middle" class="lbl-sm">apache / nextcloud</text>
|
|
<text x="175" y="372" text-anchor="middle" class="lbl-tiny">runtime state</text>
|
|
|
|
<rect x="80" y="404" width="190" height="60" rx="4" class="box-internal"/>
|
|
<text x="175" y="426" text-anchor="middle" class="lbl-sm">collabora / whiteboard</text>
|
|
<text x="175" y="444" text-anchor="middle" class="lbl-tiny">fonts, certificates</text>
|
|
|
|
<rect x="80" y="476" width="390" height="20" rx="3" class="box-internal"/>
|
|
<text x="275" y="490" text-anchor="middle" class="lbl-tiny">/usr/local/containers/nextcloudaio/ (compose + bind targets)</text>
|
|
|
|
<rect x="290" y="240" width="180" height="60" rx="4" class="fs-named"/>
|
|
<text x="380" y="262" text-anchor="middle" class="lbl-sm" fill="#bda3e8">database</text>
|
|
<text x="380" y="280" text-anchor="middle" class="lbl-tiny" fill="#bda3e8">pg_wal · pg_data</text>
|
|
|
|
<rect x="290" y="312" width="180" height="50" rx="4" class="fs-named"/>
|
|
<text x="380" y="332" text-anchor="middle" class="lbl-sm" fill="#bda3e8">redis</text>
|
|
<text x="380" y="348" text-anchor="middle" class="lbl-tiny" fill="#bda3e8">AOF + cache dump</text>
|
|
|
|
<rect x="290" y="374" width="180" height="50" rx="4" class="fs-named"/>
|
|
<text x="380" y="394" text-anchor="middle" class="lbl-sm" fill="#bda3e8">database-dump</text>
|
|
<text x="380" y="410" text-anchor="middle" class="lbl-tiny" fill="#bda3e8">empty (AIO_DISABLE_BACKUP)</text>
|
|
|
|
<rect x="290" y="436" width="180" height="40" rx="4" class="box-internal"/>
|
|
<text x="380" y="454" text-anchor="middle" class="lbl-sm">notify-push</text>
|
|
<text x="380" y="468" text-anchor="middle" class="lbl-tiny">stateless</text>
|
|
|
|
<!-- NFS column -->
|
|
<rect x="540" y="130" width="500" height="380" rx="8" class="fs-nfs"/>
|
|
<text x="560" y="155" class="lbl">/slab/container_storage/office (NFS)</text>
|
|
|
|
<rect x="560" y="180" width="460" height="80" rx="4" class="box-internal"/>
|
|
<text x="790" y="202" text-anchor="middle" class="lbl">nextcloud/</text>
|
|
<text x="790" y="220" text-anchor="middle" class="lbl-sm">user-uploaded files</text>
|
|
<text x="790" y="238" text-anchor="middle" class="lbl-tiny">mounted at /srv/nc-files/nextcloud/ on homework03</text>
|
|
|
|
<rect x="560" y="272" width="460" height="100" rx="4" class="box-internal"/>
|
|
<text x="790" y="294" text-anchor="middle" class="lbl">backups/</text>
|
|
<text x="790" y="312" text-anchor="middle" class="lbl-sm">daily backups (written by office-backup.sh)</text>
|
|
<text x="790" y="330" text-anchor="middle" class="lbl-tiny">office-YYYYMMDD-pgdump.sql.gz</text>
|
|
<text x="790" y="346" text-anchor="middle" class="lbl-tiny">office-YYYYMMDD-aio-config.tar.gz</text>
|
|
<text x="790" y="362" text-anchor="middle" class="lbl-tiny">office-YYYYMMDD-ncdata.tar.gz</text>
|
|
|
|
<rect x="560" y="384" width="460" height="110" rx="4" class="box-internal"/>
|
|
<text x="790" y="406" text-anchor="middle" class="lbl-sm">ZFS snapshot policy (desslok)</text>
|
|
<text x="790" y="424" text-anchor="middle" class="lbl-tiny">/slab is on a ZFS pool with periodic snapshots</text>
|
|
<text x="790" y="440" text-anchor="middle" class="lbl-tiny">nightly snapshot → nextcloud/ and backups/ both covered</text>
|
|
<text x="790" y="456" text-anchor="middle" class="lbl-tiny">→ true point-in-time recovery available independent of our daily backup</text>
|
|
<text x="790" y="478" text-anchor="middle" class="lbl-tiny">daily backup is belt-and-suspenders, ZFS snapshots are the primary</text>
|
|
|
|
<!-- Arrows -->
|
|
<!-- nextcloud-data → nextcloud/ (NFS read/write) -->
|
|
<line x1="470" y1="204" x2="540" y2="220" class="arrow-nfs"/>
|
|
<text x="505" y="206" text-anchor="middle" class="lbl-tiny" fill="#6cba92">read/write</text>
|
|
|
|
<!-- mastercontainer ↔ configuration.json → AIO config read by apache -->
|
|
<line x1="270" y1="280" x2="380" y2="280" class="arrow-local"/>
|
|
<text x="285" y="270" class="lbl-tiny" fill="#7aa2f7">config</text>
|
|
|
|
<!-- database pg_dumpall → backups/ -->
|
|
<line x1="470" y1="270" x2="540" y2="310" class="arrow-named"/>
|
|
<text x="500" y="290" class="lbl-tiny" fill="#9d7ad9">pg_dumpall</text>
|
|
|
|
<!-- database postgres writes stay local (curved loop annotation) -->
|
|
<text x="380" y="510" text-anchor="middle" class="lbl-tiny" fill="#bda3e8">postgres WAL writes stay LOCAL →</text>
|
|
|
|
<!-- Decision note -->
|
|
<rect x="60" y="525" width="980" height="40" rx="4" class="box-internal" stroke="#d9a96b"/>
|
|
<text x="550" y="546" text-anchor="middle" class="lbl-sm" fill="#d9a96b">postgres WAL writes stay LOCAL (named volume) — PostgreSQL is sensitive to NFS close-to-open consistency</text>
|
|
|
|
<text x="1060" y="592" text-anchor="end" class="lbl-tiny">2026-08-10 · nextcloud_office</text>
|
|
</svg> |