--- tags: [деплой, truenas, portainer] created: 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-db` — **PostgreSQL 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, НЕ в репозиторії) - Порти після деплою: 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` Пов'язане: [[Огляд архітектури]], [[Roadmap]]