bookva-es (отдельный ES 7.10, Portainer stack 37) не снапшотился — path.repo не сконфигурирован. Пересоздан через Portainer API (PUT /api/stacks/37) с path.repo=/snapshots + bind /usr/docker/bookva-es/snapshots (uid 1000:0); внешний том bookva-es-data сохранён (epz/products целы). Repo kreknin зарегистрирован. Добавлен Step 2b (bookva-es snapshot + prune) в run.sh. Gotcha пойман на проверке приёмника ДО коммита: оба ES-каталога называются `snapshots` → как отдельные rsync-источники сливаются в один dest/snapshots/ и портят оба репо (видно по двойному index-N). Fix: источник bookva-es = родительский /usr/docker/bookva-es (basename bookva-es → dest/bookva-es/snapshots/). Verified green: BOOKS-VDS backup OK 10m28s, на kreknin раздельно snapshots/ (slovo, index-41, 795M) + bookva-es/snapshots/ (index-4, 801M), по одному index-N в каждом → оба независимо рестораблельны. Закрывает .tasks/bookva-es-snapshot-repo.md (🟢). bookva tenant полностью покрыт (db/mongo/minio/es). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
62 lines
6.7 KiB
Markdown
62 lines
6.7 KiB
Markdown
---
|
||
title: Backup inventory & gap audit — вся estate (2026-06-12)
|
||
type: concept
|
||
tags: [backup, audit, inventory, infra, ops, disaster-recovery, gap]
|
||
related: [[../entities/vds-kzntsv]], [[../entities/books-vds]], [[../entities/ruvds-iis-host]], [[../entities/kreknin-synology]], [[../entities/nl-vds-3xui]], [[../entities/openwrt-router]], [[mssql-on-vds]], [[vds-backup-rsync-kreknin]]
|
||
updated: 2026-06-12
|
||
---
|
||
|
||
# Backup inventory & gap audit (2026-06-12)
|
||
|
||
Полная карта: что за данные на каждой машине и **что реально бэкапится** (с доказательством
|
||
последнего успеха, не «настроено по таске»). Триггер аудита — MSSQL-инцидент 12.06: 5 боевых
|
||
CMS-баз на [[../entities/vds-kzntsv]] **3 недели не имели offsite-копии** (dump-ветка добавлена
|
||
11.06, молча падала первым cron-запуском — см. [[mssql-on-vds]] gotcha #2). Урок: **бэкап-шаг не
|
||
готов, пока не предъявлен лог хотя бы одного реального успешного прогона.**
|
||
|
||
## Матрица
|
||
|
||
| Машина | Данные / сервисы | Метод | Куда | Расписание | Последний УСПЕХ (доказательство) | Статус |
|
||
|---|---|---|---|---|---|---|
|
||
| **vds-kzntsv** `89.253.255.94` | gitea, verdaccio (8.6G), registry, traefik, portainer, ntfy, owncloud; DB: postgres, mariadb, mongo, redis, **MSSQL ×5 (MoreThenCms/StayerCalculator/StayerPrice/TireService/stostayer)** | logical dumps + rsync `--link-dest` | kreknin `/volume1/NetBackup/vds-kzntsv/` ret.7 | daily 05:00 | snapshots до 2026-06-12 ✓. **MSSQL — впервые в копии 12.06** (910+528+39+4.5+990 МБ) | ✅ (MSSQL fixed 12.06) |
|
||
| **books-vds** `89.253.255.133` | books-db (maria), mongo 4.2, scheduler-mongo, ES 7.10 (928k docs), minio, imgproxy | dumps + ES REST snapshot + rsync | kreknin `/volume1/NetBackup/books-vds/` ret.7 | daily 06:00 | snapshots до 2026-06-12 ✓; ES restore проверен 46 сек (28.05) | ✅ / ⚠️ bookva-* не покрыт |
|
||
| **ruvds-iis-host** `80.64.31.36` | `C:\sites\snolla` (8.66G), applicationHost.config, IIS WebConfig, LE PFX, ssh-config. БД нет (→ mssql.kzntsv.site) | rclone sync (SFTP) | kreknin `/volume1/NetBackup/ruvds-iis/` ret.7 | daily 04:30 | snapshots до 2026-06-12 ✓ | ✅ |
|
||
| **kreknin-synology** `195.19.90.188` | **приёмник всех 4 пайплайнов** + Hyper Backup vault (430G) + live-сервисы | — | — | — | — | ❌ **SPOF: сам не бэкапится** |
|
||
| **nl-vds-3xui** `213.176.64.253` | 3x-UI SQLite `/etc/x-ui/x-ui.db` (все inbound, Reality-ключи, client UUID, SS-ключи) | только локальные `.bak` на том же хосте | (локально) | manual | нет offsite | ❌ **no offsite** |
|
||
| **openwrt-router** `192.168.1.1` | UCI `/etc/config/*`, port-forwards, DHCP-резервации, dropbear keys | — | — | — | — | ❌ **none** |
|
||
| **windows-recovery-host** DESKTOP-NSEF0UK | DECOMM 08.06; осталось: stostayer IIS ×2, lightrag+postgres, markitdown MCP | скрипт-сирота (таргетит удалённое) | (был) kreknin | (был) 03:00 | таска удалена 11.06 | ⚠️ stale script; lightrag/postgres без копии |
|
||
| **dead-synology** `192.168.1.10` | МЁРТВ — данные мигрированы | n/a (живёт в kreknin hbk) | — | — | hbk 2026-05-09 | n/a |
|
||
| **snolla-recovery-vm** | УДАЛЕНА 08.06 | n/a | — | — | — | n/a |
|
||
|
||
## Дыры — статус после триажа 2026-06-12
|
||
|
||
| # | Дыра | Решение user (2026-06-12) | Статус |
|
||
|---|---|---|---|
|
||
| 1 | **kreknin сам не бэкапится** — SPOF всей estate (1 том 7 ТБ, RAID не подтверждён; смерть `/volume1` = одновременная потеря offsite-копий ВСЕХ машин) | «задача, но на потом» | ⚪ заведена `[[../../.tasks/kreknin-self-backup]]` (#1 по риску) |
|
||
| 2 | **openwrt UCI** — единственный публичный ingress всех CMS, без копии | «можешь сделать» | ✅ **СДЕЛАНО** — см. ниже |
|
||
| 3 | **bookva-* на books-vds** (`bookva-db/mongo/es/minio` tenant-данные) не дампятся/не rsync'ятся | «немедленно делать» | ✅ **СДЕЛАНО 2026-06-12** — db/mongo/minio/es в daily-backup, все verified на kreknin (включая bookva-es snapshot через Portainer path.repo) |
|
||
| 4 | **nl-vds-3xui `x-ui.db`** — профили + Reality-ключи только на хосте | «не нужен» | ⏸ accepted (won't-do) |
|
||
| 5 | **windows-host stale script** — таргетит удалённые 08.06 ресурсы | «забыть, не актуально» | ⏸ accepted (ignore) |
|
||
|
||
### openwrt UCI backup — реализовано 2026-06-12
|
||
|
||
Daily push с роутера на kreknin, **без раздачи роутеру широких прав в хранилище**:
|
||
- На роутере: `dropbearkey` ed25519 `/root/.ssh/id_kreknin`; `/root/uci-backup.sh` = `sysupgrade -b` → `dbclient` pipe; cron `30 3 * * *`.
|
||
- На kreknin: pubkey роутера в `~/.ssh/authorized_keys` с **forced-command** `command="cat > /volume1/NetBackup/openwrt/openwrt-latest.tar.gz"` + `no-port-forwarding,no-X11,no-agent,no-pty`. Ключ умеет ТОЛЬКО писать в один файл — компрометация публично-доступного роутера не даёт доступа к остальному vault.
|
||
- Latest-only (без истории) — конфиг роутера меняется редко и осознанно; приемлемо. Tarball ~15 КБ.
|
||
- Verified 2026-06-12: `openwrt-latest.tar.gz` 14554 байт на kreknin (== source).
|
||
|
||
## Что сделано правильно (не трогать)
|
||
|
||
- Все 3 живых VDS-пайплайна используют **logical dumps поверх raw datadir** — корректно
|
||
(running-container locks → raw `.mdf/.ldf` копия битая). `/opt/stacks/databases/*/data` намеренно
|
||
вне rsync.
|
||
- `--link-dest` hardlink-incremental + retention 7 + ntfy/email нотификация на каждый прогон.
|
||
- MinIO blobs на books-vds — raw-копия `minio/data` (immutable objects, допустимо).
|
||
|
||
## Связанные
|
||
|
||
- [[mssql-on-vds]] — INIT vs FORMAT gotcha, корень инцидента 12.06
|
||
- [[vds-backup-rsync-kreknin]] — таска VDS-пайплайна
|
||
- [[../entities/kreknin-synology]] — приёмник (SPOF #1)
|