Files
ai-memory-network-mcp-server/Деплой на TrueNAS.md
T

4.0 KiB
Raw Blame History

tags, created
tags created
деплой
truenas
portainer
2026-07-14

Деплой на TrueNAS

Хост: TrueNAS Scale 192.168.0.199.

План

  1. Датасет: homeLab/portainer/apps/ai_memory_network (dataset preset = Apps, snake_case за конвенцією сусідніх датасетів) — створено 2026-07-14 через midclt.
  2. Portainer stack ai-memory-network (два сервіси):
    • контейнер ai-memory-server (Node.js 22, образ збирається з репозиторію); порт: HTTP MCP endpoint (напр. 8767, щоб не конфліктувати з project-agent на 8766); env: DATABASE_URL, API_KEYS, PORT, пізніше OLLAMA_URL;
    • контейнер ai-memory-dbPostgreSQL 18 як сервіс проекту (образ pgvector/pgvector:pg18, pgvector у комплекті); volume на датасеті проекту; порт назовні не публікуємо (доступ лише всередині stack-мережі).
  3. БД: база ai_memory, користувач ai_memory; CREATE EXTENSION vector; — одразу при ініціалізації (embeddings увімкнуться у фазі 2 без змін схеми).

Деплой стека (Portainer UI)

Рішення: build прямо в Portainer з git-репозиторію.

  • Portainer: https://192.168.0.199:31015 → Stacks → Add stack → Repository
  • Name: ai-memory-network
  • 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 = 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"} 2026-07-14
  • MCP initialize + tools/list через /mcp з Bearer-ключем (без ключа → 401) 2026-07-14
  • project_creatememory_savememory_queryproject_save_stateproject_get_state 2026-07-14
  • 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