2026-05-13 kraken: mcpvault, vault rw, docker/containerd на HDD

This commit is contained in:
Alexey Martemyanov
2026-05-13 09:20:05 +06:00
parent a8e5050766
commit d3c439d09b
+77 -17
View File
@@ -28,7 +28,8 @@ ip: 192.168.1.14
| 8 — Контейнеры | ✅ | Все через отдельные docker compose, конфиги на HDD (см. ниже) |
| 9 — Time Machine share | ✅ | `mbentley/timemachine:smb`, расписание 10:00-22:00 GMT+6, HDD/timemachine |
| 10 — Перенос данных | 🔲 | |
| 11 — Hermes агент Кракен | ✅ | Запущен, Telegram @kraken_htpc_bot живой, obsidian-mcp подключён |
| 11 — Hermes агент Кракен | ✅ | Запущен, Telegram @kraken_htpc_bot живой, mcpvault подключён, obsidian RW |
| 11а — Docker на HDD | ✅ | data-root + containerd перенесены на HDD через symlink, SD освободилась до 22% |
| 12 — Obsidian sync (Taiga↔Kraken↔Eagle) | ✅ | Все 3 узла работают, кроны активны, двусторонний sync протестирован |
| 13 — Vault wiki (llm-wiki) | 🔲 | Eagle: scheduled wiki-curation job, Karpathy-style |
@@ -243,40 +244,62 @@ rsync -avh --progress /path/to/movies/ kraken@kraken.local:/srv/.../media/movies
## Шаг 11 — Hermes агент Кракен
**Статус: ✅ запущен (2026-05-12)**
**Статус: ✅ запущен (2026-05-12), mcpvault ✅ (2026-05-13)**
### Файлы
```
/home/kraken/hermes/
Dockerfile — образ на базе node:20-slim + hermes-agent + obsidian-mcp
docker-compose.yml — restart: unless-stopped, network_mode: host, HERMES_ALLOW_ROOT=1
Dockerfile — образ hermes-kraken:latest
docker-compose.yml — restart: unless-stopped, network_mode: host
.env — API ключи
config.yaml → /srv/.../docker/hermes/config/config.yaml
```
### Модели (актуально 2026-05-12)
Конфиги и данные на HDD:
```
/srv/dev-disk-by-uuid-49e8f586.../docker/hermes/config/
config.yaml — основной конфиг Hermes
.local/bin/mcpvault — symlink → ../lib/node_modules/@bitbonsai/mcpvault/dist/server.js
.local/lib/node_modules/@bitbonsai/mcpvault/ — persistent, не слетает при rebuild
```
### Модели (актуально 2026-05-13)
| Модель | Статус |
|--------|--------|
| `openai/gpt-oss-120b:free` | ✅ primary |
| `minimax/minimax-m2.5:free` | ✅ fallback |
| `gemini-2.5-flash` | ✅ primary |
| openrouter fallbacks | ✅ |
### Telegram бот
- Имя: Кракен / Bot: [@kraken_htpc_bot](https://t.me/kraken_htpc_bot)
### Toolsets
`hermes-cli, terminal, file, web, memory, spotify, homeassistant`
### MCP серверы
| Server | Команда | Vault |
|--------|---------|-------|
| obsidian | `npx obsidian-mcp /home/kraken/obsidian` | `~/obsidian` (sparse: personal/ + family/) |
| obsidian | `/opt/data/.local/bin/mcpvault /vault` | `/home/kraken/obsidian` `/vault:rw` |
### Деплой
> ⚠️ mcpvault установлен через `npm install -g --prefix /opt/data/.local` — живёт на HDD, переживает rebuild образа
> ⚠️ Vault монтируется как `/vault:rw` (не `:ro`!) — иначе mcpvault не может писать заметки
> ⚠️ config.yaml: указывать **полный путь** `/opt/data/.local/bin/mcpvault` — PATH в контейнере его не включает
> ⚠️ args: `/vault` (путь внутри контейнера), не `/home/kraken/obsidian`
### Деплой / пересборка
```bash
cd /home/kraken/hermes
sudo docker compose build # ~82 сек на RPi5
sudo docker compose up -d
sudo docker logs hermes-kraken --tail 20
# Сборка (осторожно — npm install съедает место на SD!)
cd /home/kraken/hermes && docker build -t hermes-kraken:latest .
# Если ENOSPC при сборке — сначала почистить build cache:
docker builder prune -af
# Запуск (docker compose не работает через SSH из-за long-lived process detection)
docker stop hermes-kraken && docker rm hermes-kraken
docker run -d --name hermes-kraken --restart unless-stopped --network host \
-v /srv/dev-disk-by-uuid-49e8f586-3839-4c5d-a1e1-58bfc3579ade/docker/hermes/config:/opt/data \
-v /home/kraken/obsidian:/vault:rw \
-e HERMES_UID=1000 -e HERMES_GID=1000 -e HERMES_ALLOW_ROOT_GATEWAY=1 \
--env-file /home/kraken/hermes/.env hermes-kraken:latest
# Проверка
docker logs hermes-kraken --tail 20
docker inspect hermes-kraken --format 'Status={{.State.Status}} Restarts={{.RestartCount}}'
```
### TODO
@@ -285,6 +308,43 @@ sudo docker logs hermes-kraken --tail 20
---
## Шаг 11а — Docker и containerd на HDD
**Статус: ✅ (2026-05-13)**
SD карта 14GB быстро заполняется Docker образами. Всё перенесено на HDD.
### Docker data-root
```bash
# /etc/docker/daemon.json
{"data-root": "/srv/dev-disk-by-uuid-49e8f586-3839-4c5d-a1e1-58bfc3579ade/docker-data"}
```
### containerd → symlink на HDD
```bash
sudo systemctl stop docker docker.socket containerd
sudo rsync -a /var/lib/containerd/ /srv/.../containerd/
sudo mv /var/lib/containerd /var/lib/containerd.bak
sudo ln -s /srv/.../containerd /var/lib/containerd
sudo systemctl start containerd docker
sudo rm -rf /var/lib/containerd.bak
```
### Build cache (buildkit) — живёт на SD!
Buildkit cache НЕ управляется data-root — растёт на SD. Cron очистки:
```
# /etc/cron.d/docker-buildcache-cleanup
0 4 * * * root docker builder prune -af --filter until=24h > /dev/null 2>&1
```
При ручной сборке перед build: `docker builder prune -af`
### Текущее состояние SD (после всех переносов)
- SD: ~22% используется (2.9GB из 14GB), 11GB свободно
- HDD: docker-data + containerd + build cache → не мусорят SD
---
## Шаг 12 — Obsidian sync (Eagle ↔ Taiga ↔ Kraken)
**Статус: ✅ работает на всех 3 узлах (протестировано 2026-05-13)**