- topology.svg, container-tree.svg, data-flow.svg: show /srv/nc-files bound directly into nextcloud container at /mnt/ncdata (no intermediate /mnt/nc-data/nextcloud-data layer). - architecture.html: explain rewire, update storage table, remove pre-rewire 'why two layers' section. - procedure.html: NEXTCLOUD_DATADIR=/srv/nc-files, no mastercontainer bind, add §2.5 Rewire 2026-08-11 with recovery procedure, update backup script to also tar local nextcloud app volume, fix 4.3 verification (302 -> /login, status.php, file visibility). - operations.html: 4 backup files now (added aio-nextcloud-app.tar.gz), restore procedures updated, single-file restore uses new tar layout. - troubleshooting.html: add 3 new sections — appdata-missing, nextcloud-not-spawning, collabora-discovery-warning. - request-flow.svg: remove nextcloud/ subdir from NFS write path. - index.html, README.md: update paths and metadata.
129 lines
8.0 KiB
XML
129 lines
8.0 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; }
|
|
.fs-bind { fill: #1f2e28; stroke: #6cba92; stroke-width: 2; stroke-dasharray: 3 3; }
|
|
.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); }
|
|
.arrow-bind { stroke: #6cba92; stroke-width: 2.5; fill: none; stroke-dasharray: 3 3; marker-end: url(#arr-g); }
|
|
</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 at /srv/nc-files → direct bind into nextcloud container at /mnt/ncdata · rewire 2026-08-11</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>
|
|
|
|
<!-- /srv/nc-files mount (NFS on homework03 host) -->
|
|
<rect x="80" y="180" width="390" height="48" rx="4" class="fs-bind"/>
|
|
<text x="275" y="200" text-anchor="middle" class="lbl-sm" fill="#6cba92">/srv/nc-files</text>
|
|
<text x="275" y="216" text-anchor="middle" class="lbl-tiny" fill="#6cba92">NFS v4.1 mount → nextcloud-aio-nextcloud:/mnt/ncdata</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">office/ (NFS root)</text>
|
|
<text x="790" y="220" text-anchor="middle" class="lbl-sm">user-uploaded files at NFS ROOT (no nextcloud/ subdir)</text>
|
|
<text x="790" y="238" text-anchor="middle" class="lbl-tiny">admin/ · race/ · appdata_*/ · *.log · .htaccess</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 → office/ 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 -->
|
|
<!-- NFS export → /srv/nc-files on homework03 -->
|
|
<line x1="540" y1="204" x2="470" y2="204" class="arrow-nfs"/>
|
|
<text x="505" y="200" text-anchor="middle" class="lbl-tiny" fill="#6cba92">NFS mount</text>
|
|
|
|
<!-- /srv/nc-files → /mnt/ncdata (nextcloud container) -->
|
|
<line x1="380" y1="228" x2="380" y2="240" class="arrow-bind"/>
|
|
<text x="388" y="234" class="lbl-tiny" fill="#6cba92">bind</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-11 · nextcloud_office · rewire</text>
|
|
</svg>
|