Files
admin/.wiki/concepts/backup-inventory-2026-06.md
vitya e001b8e331 feat(books-backup): bookva-es snapshot via Portainer path.repo
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>
2026-06-12 11:56:19 +03:00

6.7 KiB
Raw Blame History

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 -bdbclient 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, допустимо).

Связанные