rewire 2026-08-11: single-mount NFS architecture

- 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.
This commit is contained in:
2026-08-11 12:09:26 -05:00
parent d172771aa1
commit b4777a5e4d
10 changed files with 423 additions and 121 deletions
+36 -37
View File
@@ -1,4 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1140 720" font-family="-apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1140 740" font-family="-apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif">
<defs>
<style>
.lbl { fill: #e6e6e6; font-size: 13px; }
@@ -11,11 +11,13 @@
.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-bind { fill: #1f2e28; stroke: #6cba92; stroke-width: 2; stroke-dasharray: 3 3; }
.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-bind { stroke: #6cba92; stroke-width: 2; fill: none; stroke-dasharray: 3 3; 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>
@@ -33,10 +35,10 @@
</marker>
</defs>
<rect width="1100" height="720" fill="#0f1117"/>
<rect width="1100" height="740" 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>
<text x="40" y="58" class="lbl-sm">office.rmf44.xyz · Caddy on hawker · AIO on homework03 · NFS on desslok · rewire 2026-08-11</text>
<!-- Section labels -->
<text x="80" y="110" class="section">Public Internet</text>
@@ -71,12 +73,6 @@
<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>
@@ -98,16 +94,16 @@
<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>
<!-- nextcloud-aio-nextcloud -->
<rect x="680" y="428" width="200" height="80" rx="6" class="box-bind"/>
<text x="780" y="450" text-anchor="middle" class="lbl" fill="#6cba92">nextcloud-aio-nextcloud</text>
<text x="780" y="466" text-anchor="middle" class="lbl-tiny" fill="#6cba92">/srv/nc-files → /mnt/ncdata</text>
<text x="780" y="482" text-anchor="middle" class="lbl-tiny" fill="#6cba92">(named vol) → /var/www/html</text>
<text x="780" y="498" text-anchor="middle" class="lbl-tiny" fill="#6cba92">NFS user data · local app</text>
<!-- NFS mount -->
<!-- NFS mount on homework03 -->
<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="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 -->
@@ -120,18 +116,18 @@
<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>
<text x="1010" y="279" text-anchor="middle" class="lbl-tiny">admin/ race/</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>
<rect x="660" y="560" width="420" height="120" rx="6" class="box"/>
<text x="870" y="582" text-anchor="middle" class="lbl">Daily backup pipeline (hector → homework03 → NFS)</text>
<text x="700" y="605" class="lbl-sm">03:30 UTC, systemd timer on hector</text>
<text x="700" y="625" class="lbl-sm">ssh homework03 sudo /usr/local/bin/office-backup.sh</text>
<text x="700" y="645" class="lbl-sm"> → pg_dumpall → /srv/nc-files/backups/office-YYYYMMDD-*.gz</text>
<text x="700" y="665" class="lbl-tiny">retention: 14 days, prunes via find -mtime +14</text>
<!-- Edges -->
<!-- user → DNS -->
@@ -142,39 +138,42 @@
<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 -->
<!-- NFS mount edge -->
<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>
<!-- Bind arrow: /srv/nc-files → /mnt/ncdata in nextcloud container -->
<line x1="940" y1="408" x2="880" y2="448" class="x-link-bind"/>
<text x="950" y="430" class="lbl-tiny" fill="#6cba92">bind</text>
<text x="945" y="442" class="lbl-tiny" fill="#6cba92">:mnt/ncdata</text>
<!-- Local volume bind (dashed, small) -->
<line x1="880" y1="468" x2="940" y2="408" class="x-link"/>
<text x="900" y="465" class="lbl-tiny" fill="#8088a0">app vol</text>
<!-- Backup arrow from backup pipeline → storage -->
<line x1="1050" y1="580" x2="1010" y2="340" class="x-link-storage" stroke-dasharray="4 4"/>
<line x1="1050" y1="600" 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)">
<g transform="translate(40, 710)">
<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>
<rect x="260" y="-10" width="14" height="14" rx="2" class="box-bind"/>
<text x="282" y="2" class="lbl-tiny">NFS bind</text>
</g>
<text x="1060" y="694" text-anchor="end" class="lbl-tiny">2026-08-10 · nextcloud_office</text>
</svg>
<text x="1060" y="714" text-anchor="end" class="lbl-tiny">2026-08-11 · nextcloud_office · rewire</text>
</svg>

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB