|
|
|
@@ -0,0 +1,23 @@
|
|
|
|
|
---
|
|
|
|
|
name: project-seaweedfs-offsite
|
|
|
|
|
description: "Offsite záloha SeaweedFS blobů na Synology DS213+ v ordinaci — NAS si tahá rsync přes MikroTik na Tower1 .50 FUSE mount; postaveno 2026-06-14/15, runbook v Triliu"
|
|
|
|
|
metadata:
|
|
|
|
|
node_type: memory
|
|
|
|
|
type: project
|
|
|
|
|
originSessionId: a121e6b4-5ecf-4cb2-87e5-328fd3488630
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
Offsite záloha SeaweedFS příloh (viz [[project-seaweedfs]]) na staré **Synology DS213+** v ordinaci. Postaveno v noci 2026-06-14→15 koordinací dvou instancí Claude přes sdílenou Trilium note (HQ = doma u Tower1, ORDINACE = na Lenovu v ordinaci). První plný mirror **~50 GiB / ~109k souborů, 0 mismatchů (sha256==jméno)**.
|
|
|
|
|
|
|
|
|
|
**Datová cesta (NAS si tahá sám, „pull"):**
|
|
|
|
|
`Synology .40 (ordinace) ──ssh -p2250──> 78.80.38.51 (domácí WAN, PPPoE pevná) ──MikroTik NAT──> Tower1 192.168.1.50:22 ──> /mnt/seaweedfuse (FUSE RO)`
|
|
|
|
|
|
|
|
|
|
- **Zdroj .50:** read-only FUSE mount celého fileru `/mnt/seaweedfuse` (weed mount, `/topics` skryté). Persistence: `/boot/config/seaweed-mount.sh` (volá se `bash`, protože /boot je VFAT noexec) + watchdog cron `/boot/config/plugins/dynamix/seaweed-fuse.cron` á 5 min + hook v `/boot/config/go`. weed binárka zkopírovaná z kontejneru do `/usr/local/sbin/weed`.
|
|
|
|
|
- **MikroTik (192.168.1.2, admin):** NAT dstnat `WAN:2250 → 192.168.1.50:22` (src-address-list=ordinace), filter forward accept ordinace→.50:22. **Oddělené od Medicus rsyncu** (ten je `2299→.76`). Address-list `ordinace` = 78.44.195.114 (MySQL/eRecept) + 185.140.244.138 (Synology rsync).
|
|
|
|
|
- **Cíl Synology DS213+ „synologymaly" (192.168.1.40, DSM 6.2.4, PPC, ext4):** `/volume1/SeaweedFS-offsite`. NAS dělá `rsync -a --partial` **aditivně, BEZ --delete** (immutable content-addressed bloby → bezpečný narůstající archiv). Žádné Hyper Backup (rozhodnutí majitele). Docker/Tailscale/rclone na PPC nejdou — proto plain rsync-over-ssh.
|
|
|
|
|
- **Auth:** klíč `swbackup` (ed25519, na NASu `/root/.ssh/swbackup`), autorizován na .50 root s **forced-command** wrapperem `/boot/config/ssh/swbackup-rsync.sh` (pustí jen read-only `rsync --server --sender`).
|
|
|
|
|
- **Plán:** běží přes **`/etc/crontab`** (`0 4 * * * root sh /volume1/SeaweedFS-offsite/_sync.sh`) — DSM Task Scheduler na téhle DSM nešel čistě (chybí v PATH); crond se restartuje přes `/usr/syno/sbin/synoservicecfg --restart crond`. Záloha původního crontabu `/etc/crontab.bak_swoffsite`. Sync skript: rsync `-a --partial --stats --timeout=300`, PID-lock `/tmp/swoffsite.lock`, log `_sync.log`, `known_hosts_sw`. Při `rc!=0` pošle mail, při úspěchu mlčí.
|
|
|
|
|
- **Monitoring:** e-mail **varianta A = NAS posílá sám** přes mailer `/root/swoffsite_mailer.py` (root, chmod 700). POZOR: klinická knihovna `EmailMessagingGraph.py` jede přes **Microsoft Graph (OAuth client-cred, sender reports@buzalka.cz), NE SMTP** — proto mailer napsán čistě ve stdlib Pythonu (urllib/json/ssl, žádný pip; msal/requests na PPC DSM 6.2 nejdou). Alert na vladimir.buzalka@buzalka.cz při chybě. Otestováno (status 202).
|
|
|
|
|
- **Restore (Fáze 5) ověřen:** 3 bloby vytaženy mimo strom, `sha256(obsah)==název` → záloha čitelná i bez SeaweedFS. **Projekt KOMPLETNÍ 2026-06-15.**
|
|
|
|
|
|
|
|
|
|
**Kompletní runbook (přístupy, provozní úkony, restore, troubleshooting):** Trilium note „OrdinaceOffsiteBackupSeaWeedFS — RUNBOOK". **Komunikační kanál** mezi instancemi: Trilium note `OrdinaceOffsiteBackupSeaWeedFS` (noteId Gh5wzhrjTlv8). Viz [[setup-memory-sync]] princip — Trilium note jako async kanál mezi dvěma Claude.
|