How to Deploy TencentDB Agent Memory Using Docker Compose: Complete Setup Guide
Deploy TencentDB Agent Memory by cloning the repository, configuring environment variables from the docker/env.example template, and running docker compose --env-file docker/env.docker up -d from the MemoryKnowledge directory.
TencentDB Agent Memory is an open-source knowledge-augmented memory system for LLM agents, maintained by TencentCloud. The repository provides production-ready Dockerfiles and a Docker Compose configuration that lets you launch the entire stack—or individual components—in minutes. This guide walks through the exact steps to deploy using Docker Compose, based on the source code in the feat/server_team branch.
Architecture of the Docker Deployment
The system consists of four containerized services, each with its own build context and Dockerfile:
| Service | Purpose | Key Source File |
|---|---|---|
| Knowledge Service | HTTP API (/v3) for storing and querying tool-call logs |
MemoryKnowledge/docker-compose.yml |
| Core Gateway | Request/response router for the LLM-memory pipeline | MemoryCore/Dockerfile |
| Web Panel | Management UI for knowledge visualization and agent monitoring | MemoryPanel/web/Dockerfile |
| Proxy Service | Optional reverse-proxy for custom LLM endpoints (LLM_MODE=custom) |
MemoryProxy/Dockerfile |
Each service builds independently. The provided docker-compose.yml in MemoryKnowledge targets the Knowledge service as the primary entry point, with optional ClickHouse integration for persistent storage.
Prerequisites
Before deploying TencentDB Agent Memory with Docker Compose, ensure you have:
- Docker Engine 20.10+ and Docker Compose 2.0+
- Git for cloning the repository
- (Optional)
jqfor parsing JSON responses during verification
The repository assumes Linux/amd64 or Linux/arm64 hosts. No additional dependencies are required on the host system—all runtime requirements are containerized.
Step-by-Step Deployment
1. Clone the Repository
Navigate into the Knowledge service directory where the Docker Compose file resides:
git clone https://github.com/TencentCloud/TencentDB-Agent-Memory.git
cd TencentDB-Agent-Memory/feat/server_team/MemoryKnowledge
2. Configure Environment Variables
The repository provides a template at docker/env.example. Copy this to docker/env.docker and customize for your deployment:
cp docker/env.example docker/env.docker
# Edit docker/env.docker with your preferred editor
The minimal required variables for a functional deployment are:
| Variable | Purpose | Example |
|---|---|---|
PUBLIC_URL |
External URL where the Knowledge API is accessible | http://203.0.113.10:8421/v3 |
TMC_CALLBACK |
Callback URL for TencentDB Agent integration (optional) | http://203.0.113.10:8123 |
LLM_MODE |
LLM routing mode: proxy (default) or custom |
custom |
LLM_API_KEY |
API key when using LLM_MODE=custom |
sk-your-key-here |
LLM_BASE_URL |
Base URL for custom LLM provider | https://api.openai.com/v1 |
The MemoryKnowledge/docker-compose.yml uses env_file: docker/env.docker to inject these values into the container.
3. Launch with Docker Compose
From the MemoryKnowledge directory, run:
docker compose --env-file docker/env.docker up -d --build
This command:
- Builds the
team-knowledgeimage using the localDockerfile(viabuild: .) - Creates a named volume
knowledge-datamounted at/app/datafor persistence - Exposes port 8421 by default (configurable via
TEAM_KNOWLEDGE_HOST_PORT) - Applies health-check monitoring on the
/healthendpoint
The --build flag ensures the image reflects any local changes. Subsequent starts can omit it unless the source changes.
4. Verify the Deployment
Confirm the container is healthy:
curl http://localhost:8421/health
Expected response:
{"status":"ok"}
Check container status:
docker compose ps
docker compose logs -f team-knowledge
Deploying the Full Stack
To run Core Gateway, Web Panel, and Proxy alongside Knowledge, extend the compose configuration. Create a docker-compose.full.yml in the MemoryKnowledge directory:
services:
knowledge:
extends:
file: docker-compose.yml
service: team-knowledge
core:
build: ../MemoryCore
image: ${TEAM_CORE_IMAGE:-team-core:latest}
ports:
- "${TEAM_CORE_HOST_PORT:-8123}:8123"
restart: unless-stopped
env_file: docker/env.docker
panel:
build: ../MemoryPanel/web
image: ${TEAM_PANEL_IMAGE:-team-panel:latest}
ports:
- "${TEAM_PANEL_HOST_PORT:-3000}:3000"
restart: unless-stopped
env_file: docker/env.docker
proxy:
build: ../MemoryProxy
image: ${TEAM_PROXY_IMAGE:-team-proxy:latest}
ports:
- "${TEAM_PROXY_HOST_PORT:-8080}:8080"
restart: unless-stopped
env_file: docker/env.docker
Launch with:
docker compose -f docker-compose.full.yml --env-file docker/env.docker up -d
Each service references the same docker/env.docker file for consistent configuration.
Configuration Examples
Enable ClickHouse Persistence
Add to docker/env.docker for production-grade storage of tool-call logs:
KNOWLEDGE_CLICKHOUSE_ENABLED=true
KNOWLEDGE_CLICKHOUSE_URL=jdbc:clickhouse://clickhouse:9000
KNOWLEDGE_CLICKHOUSE_DATABASE=tool_call_logs
KNOWLEDGE_CLICKHOUSE_USER=default
KNOWLEDGE_CLICKHOUSE_PASSWORD=secure_password
You'll also need to add a ClickHouse service to your compose file or use an external instance.
Custom LLM Provider Setup
cat > docker/env.docker << 'EOF'
PUBLIC_URL=http://203.0.113.10:8421/v3
TMC_CALLBACK=http://203.0.113.10:8123
LLM_MODE=custom
LLM_API_KEY=sk-abcdef123456789
LLM_BASE_URL=https://api.anthropic.com/v1
EOF
docker compose --env-file docker/env.docker up -d --build
Complete One-Line Deployment
git clone https://github.com/TencentCloud/TencentDB-Agent-Memory.git && \
cd TencentDB-Agent-Memory/feat/server_team/MemoryKnowledge && \
cp docker/env.example docker/env.docker && \
sed -i 's|PUBLIC_URL=.*|PUBLIC_URL=http://'$(hostname -I | awk '{print $1}')':8421/v3|' docker/env.docker && \
docker compose --env-file docker/env.docker up -d --build && \
curl -s http://localhost:8421/health | jq .
Key Source Files Reference
| File Path | Description |
|---|---|
MemoryKnowledge/docker-compose.yml |
Primary compose definition with build instructions, port mapping, volume, and health-check |
MemoryKnowledge/Dockerfile |
Node.js-based image; copies source and sets npm run start:prod entrypoint |
MemoryCore/Dockerfile |
Core gateway container build |
MemoryPanel/web/Dockerfile |
React-based web UI container build |
MemoryProxy/Dockerfile |
Proxy service for custom LLM routing |
docker/env.example |
Environment variable template with all configurable options |
Production Considerations
- Port conflicts: The default ports (8421, 8123, 3000, 8080) can be overridden via
TEAM_*_HOST_PORTvariables - Volume persistence: The
knowledge-datanamed volume survives container restarts; back this volume for disaster recovery - Secrets management: For production, migrate from
env.dockerto Docker Secrets or an external vault - ClickHouse: The default deployment uses in-memory or file-based storage; enable ClickHouse for high-throughput scenarios
- Health monitoring: The built-in health-check in
docker-compose.ymlusescurl -f http://localhost:8421/healthwith 30s intervals
Summary
- Clone to
feat/server_team/MemoryKnowledgeand use the provideddocker-compose.ymlfor single-command deployment - Copy
docker/env.exampletodocker/env.dockerand setPUBLIC_URLplusLLM_MODEat minimum - Run
docker compose --env-file docker/env.docker up -d --buildto start the Knowledge service - Verify with
curl http://localhost:8421/healthbefore integrating with agents - Extend the compose file to add Core, Panel, and Proxy services for a complete deployment
- Enable ClickHouse via environment variables when persistence requirements exceed local volume capacity
Frequently Asked Questions
Does TencentDB Agent Memory require all four services to run?
No. The Knowledge service functions independently and is the recommended starting point. The Core Gateway, Web Panel, and Proxy are optional components that add routing, UI, and custom LLM capabilities respectively. Deploy only what your use case requires.
What is the difference between LLM_MODE=proxy and LLM_MODE=custom?
proxy (default) routes LLM requests through Tencent's infrastructure. custom directs requests to your own LLM endpoint configured via LLM_BASE_URL and LLM_API_KEY. Set LLM_MODE=custom when using providers like OpenAI, Anthropic, or self-hosted models.
Where is data persisted in a Docker Compose deployment?
By default, data persists in a Docker named volume knowledge-data mounted at /app/data inside the Knowledge container. For production deployments, enable ClickHouse by setting KNOWLEDGE_CLICKHOUSE_ENABLED=true and providing JDBC connection details in your environment file.
Can I use an external ClickHouse instance instead of containerized storage?
Yes. Set KNOWLEDGE_CLICKHOUSE_URL to any accessible JDBC endpoint (e.g., jdbc:clickhouse://your-host:9000). The application connects via the ClickHouse JDBC driver; no additional compose service is required for external databases.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →