graphzep
Version:
GraphZep: A temporal knowledge graph memory system for AI agents based on the Zep paper
194 lines (148 loc) • 4.66 kB
Markdown
# Docker Setup for TypeScript Graphzep
This document describes how to run the TypeScript version of Graphzep using Docker and Docker Compose.
## Quick Start
1. **Copy environment configuration:**
```bash
cp .env.docker.example .env
# Edit .env with your actual values (especially OPENAI_API_KEY and NEO4J_PASSWORD)
```
2. **Start the full stack with Docker Compose:**
```bash
docker-compose -f docker-compose.yml up --build
```
3. **Test the deployment:**
```bash
# Check server health
curl http://localhost:3000/healthcheck
# Check Neo4j is running
curl http://localhost:7474
```
## Available Services
### Main Graphzep Server
- **Image**: Built from `Dockerfile`
- **Port**: 3000
- **Health check**: `GET /healthcheck`
- **Description**: TypeScript Hono server with Graphzep API
### MCP Server (Optional)
- **Image**: Built from `mcp_server/Dockerfile`
- **Port**: 3001
- **Description**: Model Context Protocol server for AI assistants
### Neo4j Database
- **Image**: `neo4j:5.26.2`
- **Ports**: 7474 (HTTP), 7687 (Bolt)
- **Description**: Graph database backend
## Docker Compose Configurations
### Production (`docker-compose.yml`)
Full production stack with all services, health checks, and networking.
```bash
docker-compose -f docker-compose.yml up -d
```
### Testing (`docker-compose.test.yml`)
Test environment with faster startup and test data isolation.
```bash
docker-compose -f docker-compose.test.yml up --build
```
### MCP Server Only (`mcp_server/docker-compose.yml`)
Just the MCP server and Neo4j database.
```bash
cd mcp_server
docker-compose -f docker-compose.yml up --build
```
## Environment Variables
### Required
- `OPENAI_API_KEY`: OpenAI API key for LLM inference
- `NEO4J_PASSWORD`: Password for Neo4j database
### Optional
- `OPENAI_BASE_URL`: Custom OpenAI endpoint
- `MODEL_NAME`: LLM model name (default: gpt-4)
- `EMBEDDING_MODEL_NAME`: Embedding model (default: text-embedding-3-small)
- `NEO4J_USER`: Neo4j username (default: neo4j)
- `NEO4J_PORT`: Neo4j Bolt port (default: 7687)
- `PORT`: Main server port (default: 3000)
- `SEMAPHORE_LIMIT`: MCP server concurrency (default: 10)
## Building Images
### Main Server
```bash
docker build -f Dockerfile -t graphzep-server:latest .
```
### MCP Server
```bash
cd mcp_server
docker build -f Dockerfile -t graphzep-mcp:latest .
```
## Networking
All services run in isolated Docker networks:
- `graphzep-network`: Main application network
- `mcp-network`: MCP server network
- `test-network`: Testing network
## Volumes
- `neo4j_data`: Persistent Neo4j database storage
- `neo4j_logs`: Neo4j log files
## Health Checks
All services include health checks:
- **Graphzep Server**: HTTP endpoint check
- **MCP Server**: Process health check
- **Neo4j**: Cypher query test
## Troubleshooting
### Service Won't Start
1. Check environment variables are set correctly
2. Verify Docker and Docker Compose versions
3. Check port availability (3000, 3001, 7474, 7687)
### Connection Issues
1. Verify Neo4j is healthy: `docker-compose ps`
2. Check network connectivity: `docker network ls`
3. Review service logs: `docker-compose logs <service-name>`
### Performance Issues
1. Adjust Neo4j memory settings in docker-compose.yml
2. Increase `SEMAPHORE_LIMIT` for MCP server
3. Monitor container resources: `docker stats`
## Development
### Hot Reload Development
```bash
# Start only Neo4j
docker-compose -f docker-compose.yml up neo4j -d
# Run server locally with hot reload
cd server
npm run dev
```
### Running Tests
```bash
# Run test suite
docker-compose -f docker-compose.test.yml up --build --abort-on-container-exit
# Run specific service tests
docker-compose -f docker-compose.test.yml up graphzep-server-test
```
### Debugging
```bash
# View logs
docker-compose -f docker-compose.yml logs -f graphzep-server
# Execute commands in container
docker-compose exec graphzep-server sh
# Inspect container
docker inspect <container-id>
```
## Production Deployment
For production deployments, consider:
1. **Security**: Use Docker secrets for sensitive data
2. **Scalability**: Use Docker Swarm or Kubernetes
3. **Monitoring**: Add Prometheus/Grafana stack
4. **Backup**: Configure Neo4j backup strategies
5. **SSL/TLS**: Add reverse proxy with HTTPS
### Example Production Override
```yaml
# docker-compose.prod.yml
version: '3.8'
services:
graphzep-server:
deploy:
replicas: 3
resources:
limits:
cpus: '2'
memory: 2G
environment:
- NODE_ENV=production
```
```bash
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
```