docker-compose.ymlā¢3.48 kB
version: '3.8'
services:
mcp-learning-server:
build:
context: .
dockerfile: Dockerfile
container_name: mcp-self-learning-server
ports:
- "${MCP_PORT:-8765}:8765"
volumes:
# Persistent data storage
- mcp-learning-data:/app/data
- mcp-learning-logs:/app/logs
- mcp-shared-knowledge:/app/shared_knowledge
environment:
- NODE_ENV=production
- MCP_LEARN_HOST=0.0.0.0
- MCP_LEARN_PORT=8765
- MCP_LEARN_LOG_LEVEL=${LOG_LEVEL:-info}
- MCP_LEARN_MAX_MEMORY=${MAX_MEMORY:-1000}
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8765/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 30s
labels:
- "com.saralegui-solutions.service=mcp-self-learning"
- "com.saralegui-solutions.version=1.0.0"
- "traefik.enable=true"
- "traefik.http.routers.mcp-learning.rule=Host(`mcp-learning.local`)"
- "traefik.http.services.mcp-learning.loadbalancer.server.port=8765"
# Optional: REST API only mode
mcp-api-server:
build:
context: .
dockerfile: Dockerfile
container_name: mcp-self-learning-api
command: ["node", "api/rest-server.js"]
ports:
- "${API_PORT:-8766}:8765"
volumes:
- mcp-learning-data:/app/data
- mcp-learning-logs:/app/logs
environment:
- NODE_ENV=production
- MCP_LEARN_HOST=0.0.0.0
- MCP_LEARN_PORT=8765
profiles:
- api-only
restart: unless-stopped
# Optional: Monitoring with Prometheus
prometheus:
image: prom/prometheus:latest
container_name: mcp-prometheus
ports:
- "${PROMETHEUS_PORT:-9090}:9090"
volumes:
- ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml:ro
- prometheus-data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--web.console.libraries=/etc/prometheus/console_libraries'
- '--web.console.templates=/etc/prometheus/consoles'
- '--web.enable-lifecycle'
profiles:
- monitoring
restart: unless-stopped
# Optional: Visualization with Grafana
grafana:
image: grafana/grafana:latest
container_name: mcp-grafana
ports:
- "${GRAFANA_PORT:-3000}:3000"
volumes:
- grafana-data:/var/lib/grafana
- ./monitoring/grafana/dashboards:/var/lib/grafana/dashboards
- ./monitoring/grafana/provisioning:/etc/grafana/provisioning
environment:
- GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD:-admin}
- GF_INSTALL_PLUGINS=grafana-clock-panel
profiles:
- monitoring
restart: unless-stopped
# Optional: Load balancer with HAProxy
load-balancer:
image: haproxy:alpine
container_name: mcp-load-balancer
ports:
- "${LB_PORT:-8767}:8767"
volumes:
- ./monitoring/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro
profiles:
- load-balance
restart: unless-stopped
depends_on:
- mcp-learning-server
volumes:
mcp-learning-data:
name: mcp_learning_data
driver: local
mcp-learning-logs:
name: mcp_learning_logs
driver: local
mcp-shared-knowledge:
name: mcp_shared_knowledge
driver: local
prometheus-data:
name: mcp_prometheus_data
driver: local
grafana-data:
name: mcp_grafana_data
driver: local
networks:
default:
name: mcp-learning-network
driver: bridge