← Назад к файлам

Установка Hermes Agent & Graphify

Полное руководство по развертыванию агента Hermes в Docker-контейнере с интеграцией Graphify

🎯 Выбор способа интеграции Graphify

Graphify можно интегрировать с Hermes двумя способами. Рекомендуемый — через MCP (Model Context Protocol), который делает Graphify нативным инструментом агента.

Параметр MCP Сервер Рекомендуется Отдельный сервис Альтернатива
Интеграция Нативная — Graphify становится инструментом агента (mcp_graphify_*) Через HTTP API — агент обращается к Graphify как к внешнему API
Запуск Автоматически при старте Hermes (через config.yaml) Вручную или через скрипт внутри контейнера
Использование Агент вызывает Graphify напрямую, как любой другой инструмент Требуется Python-клиент или HTTP-запросы
Надёжность Автопереподключение, обработка ошибок на уровне MCP Ручная обработка соединений и ошибок
Безопасность Фильтрация env-переменных, скрытие секретов в ошибках Стандартная — зависит от реализации клиента
Когда использовать Для постоянной работы с графом знаний Для независимого сервиса или кастомной логики

✅ Рекомендация

Используйте MCP-сервер для полной интеграции Graphify с Hermes. Это позволяет агенту работать с графом знаний напрямую — создавать узлы, связи, выполнять Cypher-запросы — как с родными инструментами.

1

Подготовка сервера

1.1 Обновление системы

apt update && apt upgrade -y

1.2 Установка Docker

# Удаление старых версий for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do apt remove -y $pkg; done # Установка зависимостей apt update apt install -y ca-certificates curl gnupg # Добавление GPG ключа Docker install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg chmod a+r /etc/apt/keyrings/docker.gpg # Добавление репозитория echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null # Установка Docker Engine apt update apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin # Проверка установки docker run hello-world

1.3 Установка Docker Compose

curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose docker-compose --version
2

Создание Docker-контейнера

2.1 Создание рабочей директории

mkdir -p /opt/hermes-g cd /opt/hermes-g

2.2 Создание Dockerfile

FROM ubuntu:24.04 ENV DEBIAN_FRONTEND=noninteractive # Установка базовых зависимостей RUN apt update && apt install -y \ python3 python3-pip python3-venv git curl wget \ nano vim htop net-tools iputils-ping \ ca-certificates gnupg lsb-release \ software-properties-common build-essential \ libssl-dev libffi-dev python3-dev \ && rm -rf /var/lib/apt/lists/* # Установка Node.js (для MCP-серверов на Node) RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \ && apt install -y nodejs \ && rm -rf /var/lib/apt/lists/* # Установка Python зависимостей (включая MCP SDK) RUN pip3 install --no-cache-dir \ fastapi uvicorn websockets aiohttp \ requests python-dotenv pydantic numpy pandas psutil \ mcp WORKDIR /app # Создание виртуального окружения RUN python3 -m venv /app/venv ENV PATH="/app/venv/bin:$PATH" # Открытие портов EXPOSE 8000 8765 CMD ["python3", "agent.py"]

2.3 Создание docker-compose.yml

version: '3.8' services: hermes-g: build: . container_name: hermes-g restart: unless-stopped ports: - "8000:8000" - "8765:8765" volumes: - ./data:/app/data - ./logs:/app/logs - ./config:/app/config - ./skills:/app/skills - ./.hermes:/root/.hermes environment: - HERMES_MAX_CONTEXT=256000 - HERMES_API_KEY=${HERMES_API_KEY} - HERMES_MODEL=${HERMES_MODEL:-kimi-k2.6} - PYTHONUNBUFFERED=1 networks: - hermes-network healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8000/health"] interval: 30s timeout: 10s retries: 3 start_period: 40s networks: hermes-network: driver: bridge

💡 Примечание

Мы примонтировали ./.hermes:/root/.hermes, чтобы конфигурация MCP-серверов из config.yaml сохранялась между перезапусками контейнера.

3

Установка Graphify

Выберите способ интеграции:

Вариант А: MCP Сервер (рекомендуется)
Вариант Б: Отдельный сервис

3A.1 Установка Graphify MCP Server

# Внутри контейнера или при сборке npm install -g @graphify/mcp-server # или npx -y @graphify/mcp-server

3A.2 Настройка MCP в config.yaml

Создайте или отредактируйте /opt/hermes-g/.hermes/config.yaml:

# Hermes Agent Configuration model: kimi-k2.6 max_context: 256000 # MCP Servers Configuration mcp_servers: graphify: command: "npx" args: ["-y", "@graphify/mcp-server"] env: GRAPHIFY_DB_PATH: "/app/data/graph.db" GRAPHIFY_LOG_LEVEL: "info" timeout: 120 connect_timeout: 60 sampling: enabled: true max_tool_rounds: 5

✅ Как это работает

При запуске Hermes автоматически:

  1. Запустит Graphify MCP Server как subprocess
  2. Обнаружит доступные инструменты (create_node, query, create_relationship и др.)
  3. Зарегистрирует их с префиксом mcp_graphify_*
  4. Инструменты станут доступны во всех разговорах

3A.3 Пример использования

После запуска агент сможет выполнять команды напрямую:

# Создание узла (агент вызывает автоматически) mcp_graphify_create_node(label="Knowledge", properties={"topic": "AI", "content": "..."}) # Выполнение Cypher-запроса mcp_graphify_query(query="MATCH (n:Knowledge) RETURN n.topic") # Создание связи mcp_graphify_create_relationship(from="node1", to="node2", type="RELATED_TO")

3A.4 Проверка работы MCP

# Проверка логов запуска docker logs hermes-g | grep -i "mcp" # Должно появиться: # "Connected to MCP server 'graphify'" # "Registered MCP tools: mcp_graphify_create_node, mcp_graphify_query, ..."

3B.1 Установка Graphify как отдельного сервиса

mkdir -p /opt/hermes-g/graphify cd /opt/hermes-g/graphify npm init -y npm install @graphify/graphify # Или глобально: npm install -g @graphify/graphify

3B.2 Альтернативная установка из исходников

git clone https://github.com/graphify/graphify.git cd graphify npm install npm run build npm link

3B.3 Конфигурация Graphify

Создайте файл graphify.config.js:

module.exports = { server: { port: 3000, host: '0.0.0.0' }, database: { type: 'sqlite', path: '/app/data/graph.db' }, api: { prefix: '/api/v1', rateLimit: 1000 }, logging: { level: 'info', file: '/app/logs/graphify.log' } };

3B.4 Модуль интеграции (Python)

Создайте файл /opt/hermes-g/graphify_integration.py:

import aiohttp from typing import Dict, Any, Optional, List class GraphifyClient: def __init__(self, host="localhost", port=3000, api_key=None): self.base_url = f"http://{host}:{port}/api/v1" self.api_key = api_key self.session = None async def connect(self): headers = {} if self.api_key: headers["Authorization"] = f"Bearer {self.api_key}" self.session = aiohttp.ClientSession(headers=headers) async def create_node(self, label: str, properties: Dict) -> Dict: async with self.session.post( f"{self.base_url}/nodes", json={"label": label, "properties": properties} ) as resp: return await resp.json() async def query(self, cypher: str, params=None) -> List[Dict]: async with self.session.post( f"{self.base_url}/query", json={"query": cypher, "parameters": params or {}} ) as resp: return await resp.json()

3B.5 Скрипт запуска (оба сервиса)

Создайте start.sh для запуска Graphify + Agent:

#!/bin/bash # Запуск Graphify echo "Starting Graphify..." graphify start --config /app/graphify.config.js & GRAPHIFY_PID=$! # Ожидание запуска sleep 5 until curl -f http://localhost:3000/api/v1/health > /dev/null 2>&1; do echo "Waiting for Graphify..." sleep 2 done # Запуск агента echo "Starting Hermes Agent..." python3 /app/agent.py & AGENT_PID=$! # Обработка сигналов cleanup() { kill $AGENT_PID 2>/dev/null kill $GRAPHIFY_PID 2>/dev/null wait exit 0 } trap cleanup SIGTERM SIGINT wait
4

Запуск и тестирование

4.1 Сборка и запуск контейнера

cd /opt/hermes-g # Сборка образа docker-compose build # Запуск в фоновом режиме docker-compose up -d # Проверка логов docker-compose logs -f

4.2 Проверка работоспособности

# Проверка агента curl http://localhost:8000/health # Для MCP-варианта: проверка регистрации инструментов docker logs hermes-g | grep -i "mcp_graphify" # Для standalone-варианта: проверка Graphify curl http://localhost:3000/api/v1/health curl http://localhost:3000/api/v1/stats

✅ Ожидаемый результат

MCP: В логах видно Registered MCP tools: mcp_graphify_*

Standalone: Все endpoints возвращают status: "ok"

5

Управление контейнером

5.1 Основные команды

# Остановка docker-compose stop # Перезапуск docker-compose restart # Полная остановка и удаление docker-compose down # Пересборка и запуск docker-compose up -d --build

5.2 Мониторинг

# Просмотр процессов docker ps # Статистика ресурсов docker stats hermes-g # Вход в контейнер docker exec -it hermes-g bash # Просмотр логов docker logs hermes-g docker logs -f hermes-g

5.3 Резервное копирование

# Бэкап данных mkdir -p /backup/hermes-g docker run --rm -v hermes-g_data:/data -v /backup:/backup alpine \ tar czf /backup/data.tar.gz -C /data . # Бэкап графа (для standalone) docker exec hermes-g tar czf /tmp/graph-backup.tar.gz /app/data/graph.db docker cp hermes-g:/tmp/graph-backup.tar.gz /backup/
6

Настройка безопасности

6.1 Настройка фаервола

apt install -y ufw ufw allow 22/tcp ufw allow 80/tcp ufw allow 443/tcp ufw allow 8000/tcp # Только для standalone-варианта: ufw allow 3000/tcp ufw enable

6.2 Переменные окружения

Создайте файл /opt/hermes-g/.env:

HERMES_API_KEY=your_api_key_here HERMES_MODEL=kimi-k2.6 HERMES_MAX_CONTEXT=256000 # Для standalone-варианта: GRAPHIFY_API_KEY=your_graphify_key_here

⚠️ Важно!

Никогда не коммитьте файл .env в публичный репозиторий. Добавьте его в .gitignore.

7

Устранение неполадок

7.1 MCP: инструменты не появляются

# Проверка установки mcp SDK pip list | grep mcp # Проверка логов запуска docker logs hermes-g | grep -i "mcp" # Возможные причины: # - "MCP SDK not available" → pip install mcp # - "Failed to connect" → проверьте command и args # - "No MCP servers configured" → проверьте config.yaml

7.2 Проблемы с Docker

systemctl restart docker systemctl status docker docker system prune -a

7.3 Проблемы с Graphify (standalone)

ps aux | grep graphify netstat -tlnp | grep 3000 docker-compose restart
8

Дополнительные настройки

8.1 Автозапуск при загрузке

systemctl enable docker cd /opt/hermes-g && docker-compose up -d (crontab -l 2>/dev/null; echo "@reboot cd /opt/hermes-g && docker-compose up -d") | crontab -

8.2 Обновление компонентов

# Обновление образа docker-compose down docker-compose pull docker-compose up -d --build # Обновление MCP-сервера docker exec hermes-g npm update -g @graphify/mcp-server # Обновление Python-зависимостей docker exec hermes-g pip3 install --upgrade mcp

8.3 Настройка Sampling (для MCP)

Если Graphify MCP Server требует LLM-вызовов в процессе работы:

mcp_servers: graphify: command: "npx" args: ["-y", "@graphify/mcp-server"] sampling: enabled: true model: "kimi-k2.6" max_tokens_cap: 4096 timeout: 30 max_rpm: 10 max_tool_rounds: 5

✅ Чек-лист проверки

Docker установлен и работает
Docker Compose установлен
Создана рабочая директория /opt/hermes-g
Создан Dockerfile с mcp SDK
Создан docker-compose.yml с томом .hermes
Установлен Graphify (MCP или standalone)
Настроен config.yaml с mcp_servers (для MCP-варианта)
Настроены переменные окружения в .env
Контейнер успешно собран и запущен
Агент отвечает на http://localhost:8000/health
MCP инструменты зарегистрированы (для MCP-варианта)
Graphify отвечает на http://localhost:3000/api/v1/health (для standalone)
Настроен фаервол (UFW)
Настроено резервное копирование
Настроен автозапуск при загрузке