diff --git a/Roadmap.md b/Roadmap.md index c8b28f5..a6254d6 100644 --- a/Roadmap.md +++ b/Roadmap.md @@ -17,10 +17,11 @@ created: 2026-07-14 ## Фаза 2 — Деплой -- [ ] Датасет `homeLab/portainer/apps/ai-memory-network` ([[Деплой на TrueNAS]]) -- [ ] Portainer stack: ai-memory-server (порт 8767) + ai-memory-db (PostgreSQL 18, `pgvector/pgvector:pg18`) -- [ ] Ініціалізація бази `ai_memory` + `CREATE EXTENSION vector;` -- [ ] Підключення Claude Code до endpoint, e2e перевірка +- [x] Датасет `homeLab/portainer/apps/ai_memory_network` ([[Деплой на TrueNAS]]) ✅ 2026-07-14 +- [x] Portainer stack: ai-memory-server (порт 8767) + ai-memory-db (PostgreSQL 18, `pgvector/pgvector:pg18`) ✅ 2026-07-14 +- [x] Ініціалізація бази `ai_memory` + `CREATE EXTENSION vector;` (авто-міграції при старті) ✅ 2026-07-14 +- [x] e2e перевірка: healthz, auth 401, tools/list, повний цикл project/memory, UTF-8 roundtrip, FTS українською ✅ 2026-07-14 +- [ ] Підключення Claude Code до endpoint (`.mcp.json` / mcp add) ## Фаза 3 — Скіли Claude Code diff --git a/Деплой на TrueNAS.md b/Деплой на TrueNAS.md index 597c23c..2aa90ce 100644 --- a/Деплой на TrueNAS.md +++ b/Деплой на TrueNAS.md @@ -27,14 +27,25 @@ created: 2026-07-14 - Repository URL: `http://192.168.0.199:30008/sages/ai-memory-network-mcp-server` - Authentication: увімкнути; username `sages`, password = Gitea API-токен - Compose path: `compose.yml`, reference `refs/heads/main` -- Environment variables: `POSTGRES_PASSWORD`, `API_KEYS` (значення — в Portainer, НЕ в репозиторії) +- Environment variables: `POSTGRES_PASSWORD`, `API_KEYS` (значення — в Portainer, НЕ в репозиторії) +- Environment variables (додати дві): +`POSTGRES_PASSWORD = fe7cc9c59c4ce85c6383375d4258f513d0f1872e229e6bb5` +`API_KEYS = amk_477a49815af5b1790e6d35f565f5cc50ccb9a02cf89bf908` - Порти після деплою: MCP endpoint `http://192.168.0.199:8767/mcp`, healthcheck `/healthz` - Redeploy при оновленні коду: кнопка **Pull and redeploy** у стеку ## e2e перевірка після деплою -- [ ] `GET /healthz` → `{"status":"ok"}` -- [ ] MCP `initialize` + `tools/list` через `/mcp` з Bearer-ключем -- [ ] `project_create` → `memory_save` → `memory_query` → `project_save_state` → `project_get_state` +- [x] `GET /healthz` → `{"status":"ok"}` ✅ 2026-07-14 +- [x] MCP `initialize` + `tools/list` через `/mcp` з Bearer-ключем (без ключа → 401) ✅ 2026-07-14 +- [x] `project_create` → `memory_save` → `memory_query` → `project_save_state` → `project_get_state` ✅ 2026-07-14 +- [x] UTF-8 roundtrip + FTS українською («їжак» знаходиться) ✅ 2026-07-14 + +## Проблеми деплою та рішення (2026-07-14) + +1. **`mkdir /.docker: permission denied` при build у Portainer** — Portainer у TrueNAS Apps працює як uid 568 без writable `$HOME`. Рішення: env `DOCKER_CONFIG=/data/.docker` у конфігурації застосунку Portainer (Apps → portainer → Additional Environment Variables). +2. **`ai-memory-db is unhealthy`, у лозі `mkdir /var/lib/postgresql/18: Permission denied`** — образ postgres:18 ініціалізується від uid 999, а bind-mount створюється Docker'ом як root:root. Рішення: `midclt call --job filesystem.chown` → uid/gid 999 на `db-data`. +3. **Кирилиця псується при тестах через Windows curl** — `-d` з argv конвертується через ANSI-кодову сторінку → U+FFFD. Це проблема клієнта, не сервера. Тестувати через node `fetch` або `--data-binary @file`. +4. **Правило sudoers `cli -c "app *"` зламане** — вимагає літеральних лапок в аргументі; треба виправити на `cli -c app\ *` (окрема задача). Пов'язане: [[Огляд архітектури]], [[Roadmap]]