8.4 KiB
date, type, tags
| date | type | tags | |||||
|---|---|---|---|---|---|---|---|
| 2026-04-17 | decision |
|
Синхронизация knowledge-base: Gitea + Nextcloud через rclone bisync
Контекст
Vault ~/knowledge-base хранился только в Gitea (git.dttb.ru/oleg/knowledge-base.git). Требования к надёжности и удобству:
- доступ с мобильного (iPhone Obsidian)
- мгновенная копия между устройствами без ручного
git pull/push - резервирование на случай проблем с git-историей
На dttb.ru развёрнут Nextcloud AIO 32.0.6 (VM 250, 10.0.0.230:11001, NPM на dttb.ru). Ещё в феврале 2026 была создана папка /Knowledge Base/ и односторонний скрипт sync-kb-to-nextcloud.sh на LXC 129 (Clawdbot) — но LXC 129 с тех пор удалён, скрипт не работает.
Варианты
- Оставить только Gitea — надёжно, но мобильный доступ через obsidian-git тормозной
- Перенести основу в Nextcloud — хорошо для sync, но потеря git-истории
- Gitea основа + Nextcloud зеркало через GUI Nextcloud.app — классика, real-time, но GUI wizard сложно автоматизировать
- Gitea основа + Nextcloud зеркало через rclone bisync + hook — CLI-only, триггерится после Claude-сессий
- nextcloudcmd + launchd каждые 60 сек — пробовал, не работает: Qt из launchd-контекста macOS получает
Host unreachableхотя curl/ping в том же процессе работают. Специфика macOS 26 для background-агентов, обходить не смог.
Решение
Вариант 4 (CLI rclone bisync + Claude Code Stop-hook) с опциональным добавлением GUI Nextcloud.app позже.
Архитектура
Mac (~/knowledge-base)
│ git push (ручной / obsidian-git плагин)
│ rclone bisync → Nextcloud (Stop-hook + ручной sync.sh)
▼
Gitea (git.dttb.ru) ◄───── source of truth для серверных клиентов
│
├─► code-server LXC 132 /root/knowledge-base
│ cron */5: kb-autosync.sh (pull + auto-commit + push)
│
└─► openclaw LXC 137 /root/knowledge-base (READ-ONLY)
cron */15: kb-pull.sh (pull --ff-only only)
Nextcloud (dttb.ru/Knowledge Base) ◄── сервисная копия для iPhone Obsidian
Расширение на серверы (2026-04-17)
| Хост | Путь | Режим | Триггер | Скрипт |
|---|---|---|---|---|
| Mac | ~/knowledge-base |
RW, git + rclone+NC | Stop-hook Claude, ручной | ~/.config/nextcloud-kb/sync.sh |
| code-server LXC 132 | /root/knowledge-base |
RW git | cron */5 * * * * |
/usr/local/bin/kb-autosync.sh |
| openclaw LXC 137 | /root/knowledge-base |
RO git (push disabled) | cron */15 * * * * |
/usr/local/bin/kb-pull.sh |
openclaw read-only через git remote set-url --push origin DISABLED_READONLY — любая попытка push из бота завершится ошибкой "Could not resolve host", случайно перезаписать не сможет.
Компоненты
/Users/ai/.config/nextcloud-kb/rclone.conf— WebDAV ремоутkbsync:наhttps://dttb.ru/remote.php/dav/files/admin, app password в obscured виде/Users/ai/.config/nextcloud-kb/rclone-filter.lst— исключения:.git/**,.claude/worktrees/**,.obsidian/workspace*.json,.obsidian/cache/**,.DS_Store, sync-метаданные/Users/ai/.config/nextcloud-kb/sync.sh— обёртка с atomic lock (mkdir), вызываетrclone bisyncс retry/Users/ai/.config/nextcloud-kb/app-password— app password (chmod 600), получен черезPOST /ocs/v2.php/core/getapppassword- Hook в
~/.claude/settings.json— Stop-event триггер,async: true, запускает sync.sh если cwd в ~/knowledge-base
Почему rclone а не nextcloudcmd
- nextcloudcmd (Qt) падает с
Host unreachableпри запуске из launchd-агента - rclone (Go) работает в CLI, двусторонний
bisyncс state-файлами - Проще retry-логика, log-файл, exit-коды
Почему не nextcloudcmd + launchd-агент
Внутри launchd-процесса macOS 26:
- curl/nc/ping успешно коннектятся к 10.0.0.195:443
- Go и Qt runtime получают
EHOSTUNREACHна тот же IP - Не DNS, не firewall, не IPv6 — глубокая специфика network-context для background-агентов
- Решение: не запускать из launchd, а триггерить из user-session (Stop-hook = user-session)
Для real-time sync (будущее, опционально)
GUI Nextcloud.app запускается в Aqua-session (не launchd), работает без этих проблем. Настройка через wizard, 6 кликов. На данный момент отложено.
Последствия
Что обновить
credentials.md— добавить Nextcloud creds, убрать ссылки на LXC 129/10.0.0.206projects/dttb/proxmox-inventory.md— актуализировать список LXC (129, 133 больше нет)CLAUDE.md(vault) — убрать упоминание LXC 129 Clawdbot если естьclaude-memory/MEMORY.md— обновить reference_infra, убрать LXC 133
Что надо помнить
- Изменения локально → Nextcloud автоматом только после завершения Claude-сессии в
~/knowledge-base, или ручным запуском~/.config/nextcloud-kb/sync.sh - Изменения с другого устройства → подтянутся следующим запуском sync.sh (не автоматом)
- Для real-time надо доделать GUI Nextcloud.app wizard
.git/не в Nextcloud — git и nextcloud параллельные каналы, не вложенные
Файлы экосистемы
На Mac:
~/.config/nextcloud-kb/
├── app-password chmod 600
├── rclone.conf chmod 600
├── rclone-filter.lst
├── sync.sh chmod 700
├── sync.log логи sync-обёртки
├── rclone.log подробные логи rclone
└── sync.lock.d/ mkdir-lock (временный)
На code-server (LXC 132):
/root/knowledge-base/ полный RW git-клон
/usr/local/bin/kb-autosync.sh cron-скрипт */5
/var/log/kb-autosync.log логи
/tmp/kb-autosync.lock flock
На openclaw (LXC 137):
/root/knowledge-base/ RO git-клон (push disabled)
/usr/local/bin/kb-pull.sh cron-скрипт */15
/var/log/kb-pull.log логи
Сквозной тест 2026-04-17 (пройден)
- Mac создаёт файл →
git push→ code-serverkb-autosync.shfast-forward через 0-5 мин → openclawkb-pull.shff-only через 0-15 мин ✓ - code-server создаёт файл → auto-commit + push → Mac
git pullподтягивает ✓ - Mac удаляет файл → push → обе LXC удаляют у себя при следующем sync ✓
Credentials Nextcloud (dttb.ru)
- URL:
https://dttb.ru - User:
admin/ пароль1qaz!QAZ - App password (для sync): хранится в
~/.config/nextcloud-kb/app-password - WebDAV:
https://dttb.ru/remote.php/dav/files/admin/Knowledge Base/ - Сервер: Nextcloud AIO 32.0.6 на VM 250 (10.0.0.230:11001)
Откат
- Остановить sync: удалить hook из
~/.claude/settings.json+rm -rf ~/.config/nextcloud-kb/ - Удалить app password на сервере: User settings → Security → Devices/sessions
- Локальный vault не страдает — git remote и работает независимо