diff --git a/servers/rpi.md b/servers/rpi.md index eabb24d..8c176e6 100644 --- a/servers/rpi.md +++ b/servers/rpi.md @@ -165,7 +165,7 @@ Docker CE 29.9 + Compose v5.6 из репо download.docker.com (в Debian ст - Клиент — официальный `obsidian-headless` 0.0.14 (`/usr/bin/ob`, npm, Node.js 24 LTS из репо NodeSource — в Debian 13 только Node 20, а клиенту нужен ≥ 22). Вход `ob login` делал владелец (учётка ruzzyrullezz@gmail.com), привязка `ob sync-setup` — vault id `469340a4…`, устройство `rpi-astra`, без E2E-пароля. - `obsidian-sync.service` (user astra, `ob sync --path /home/astra/vault --continuous`, Restart=always). Режим **bidirectional** (решение владельца: Astra правит заметки по его просьбе); конфиги `.obsidian` не синхронизируются; типы файлов — все (`unsupported` включён). - ⚠️ Mac владельца не выгружает в Sync «прочие типы» (`.mmd` — 7 диаграмм `Работа/Perps/flows/`): их нет ни в облаке, ни на rpi/iPhone. Лечится на Mac: Настройки → Синхронизация → Другие типы файлов. Суточный архив пока записал их удаление (в истории они есть, коммит `014b2a9`). -- **Архив в git** — `vault-archive.timer` (03:45) → `/usr/local/bin/vault-archive` (`stacks/rpi-backup/`): односторонний commit+push в `ruzzy/MyVault` (продолжает историю git-эпохи; Astra — коллаборатор с записью). Git-каталог отдельно — `~astra/vault.git` с `core.worktree=/home/astra/vault`, в vault нет `.git`. Скрытые файлы не стейджатся (Sync их не приносит — иначе были бы ложные удаления). Первый снимок 2026-10-11 — `014b2a9` (изменения с 2026-09-23). Итог → `backup_*{job="backup_vault"}`, алерты `BackupStale` (>26 ч) и `BackupNeverReported`. +- **Архив в git** — `vault-archive.timer` (**каждый час** с 2026-10-11, коммит только при изменениях; было раз в сутки 03:45) → `/usr/local/bin/vault-archive` (`stacks/rpi-backup/`): односторонний commit+push в `ruzzy/MyVault` (продолжает историю git-эпохи; Astra — коллаборатор с записью). Git-каталог отдельно — `~astra/vault.git` с `core.worktree=/home/astra/vault`, в vault нет `.git`. Скрытые файлы не стейджатся (Sync их не приносит — иначе были бы ложные удаления). Первый снимок 2026-10-11 — `014b2a9` (изменения с 2026-09-23). Итог → `backup_*{job="backup_vault"}`, алерты `BackupStale` (>3 ч) и `BackupNeverReported` (3 ч). - Astra — скилл `obsidian` (`ruzzy/astra-bot`, `codex/skills/obsidian/`): читать свободно, писать только по прямой просьбе, новое — в `Неотсортированное/`, правка — с показом изменений, в стиле владельца (вики-ссылки, без тегов/frontmatter, заметка-папка, картинки в `static/images/`); служебные файлы агента в vault — никогда. Запись в vault вне песочницы Codex → каждая правка через кнопку подтверждения. Проверено 2026-10-11: ответ по заметке «Читаем и слушаем». - ⚠️ Бот `claude-channels` на fr1 доступа к vault больше не имеет (см. `servers/fr1.md`). diff --git a/stacks/monitoring/prometheus/rules/alerts.yml b/stacks/monitoring/prometheus/rules/alerts.yml index fd45e66..79f3744 100644 --- a/stacks/monitoring/prometheus/rules/alerts.yml +++ b/stacks/monitoring/prometheus/rules/alerts.yml @@ -99,7 +99,7 @@ groups: or (time() - backup_last_success_timestamp{job="backup_onedrive_verify"} > 8 * 86400) or (time() - backup_last_success_timestamp{job="backup_servers"} > 26 * 3600) or (time() - backup_last_success_timestamp{job="backup_router"} > 30 * 3600) - or (time() - backup_last_success_timestamp{job="backup_vault"} > 26 * 3600) + or (time() - backup_last_success_timestamp{job="backup_vault"} > 3 * 3600) or (time() - backup_last_success_timestamp{job="backup_router_sample"} > 35 * 86400) for: 10m labels: {severity: critical} @@ -194,7 +194,7 @@ groups: summary: "Дом: необычно большая ОТДАЧА в интернет — {{ $value | humanize1024 }}Б/с 30+ мин (облачная синхронизация, торрент или что-то подозрительное). Кто: `router traffic --live`." - alert: BackupNeverReported expr: absent(backup_last_success_timestamp{instance="rpi",job="backup_vault"}) - for: 26h + for: 3h labels: {severity: warning, instance: rpi, job: backup_vault} annotations: - summary: "rpi: архив Obsidian-vault в gitea не отчитывался 26+ ч — проверь vault-archive / obsidian-sync" + summary: "rpi: архив Obsidian-vault в gitea не отчитывался 3+ ч — проверь vault-archive / obsidian-sync" diff --git a/stacks/rpi-backup/bin/vault-archive b/stacks/rpi-backup/bin/vault-archive index 0fe6114..9ba3886 100755 --- a/stacks/rpi-backup/bin/vault-archive +++ b/stacks/rpi-backup/bin/vault-archive @@ -1,5 +1,5 @@ #!/bin/bash -# Суточный ОДНОСТОРОННИЙ архив Obsidian-vault в gitea (ruzzy/MyVault). +# Ежечасный (коммит только при изменениях) ОДНОСТОРОННИЙ архив Obsidian-vault в gitea (ruzzy/MyVault). # Vault синхронизирует Obsidian Sync (obsidian-sync.service, ~astra/vault); git — только история: # commit + push, никогда не pull — в vault отсюда ничего не попадает. # Git-каталог отдельно (~astra/vault.git, core.worktree=~astra/vault), чтобы в vault не было .git. @@ -14,7 +14,7 @@ if "${G[@]}" diff --cached --quiet; then echo "изменений нет" else stat=$("${G[@]}" diff --cached --shortstat) - "${G[@]}" commit -q -m "Архив vault $(date +%F)" -m "$stat" + "${G[@]}" commit -q -m "Архив vault $(date "+%F %H:%M")" -m "$stat" echo "коммит: $stat" fi "${G[@]}" push -q origin HEAD:main diff --git a/stacks/rpi-backup/systemd/vault-archive.service b/stacks/rpi-backup/systemd/vault-archive.service index cb47828..afde574 100644 --- a/stacks/rpi-backup/systemd/vault-archive.service +++ b/stacks/rpi-backup/systemd/vault-archive.service @@ -1,5 +1,5 @@ [Unit] -Description=Daily one-way archive of Obsidian vault to gitea (ruzzy/MyVault) +Description=Hourly one-way archive of Obsidian vault to gitea (ruzzy/MyVault) Wants=network-online.target After=network-online.target obsidian-sync.service diff --git a/stacks/rpi-backup/systemd/vault-archive.timer b/stacks/rpi-backup/systemd/vault-archive.timer index b4aadf9..1fee179 100644 --- a/stacks/rpi-backup/systemd/vault-archive.timer +++ b/stacks/rpi-backup/systemd/vault-archive.timer @@ -1,9 +1,9 @@ [Unit] -Description=Daily Obsidian vault archive +Description=Hourly Obsidian vault archive (commit only if changed) [Timer] -OnCalendar=*-*-* 03:45 -RandomizedDelaySec=10m +OnCalendar=hourly +RandomizedDelaySec=5m Persistent=true [Install]