# Docker Compose para RLM MCP Server
# Compatível com Dokploy + Traefik
#
# Expõe servidor HTTP/SSE na porta 8765
# Configure no Traefik para HTTPS via domínio
services:
rlm-mcp:
build:
context: .
dockerfile: Dockerfile
# NÃO usar container_name - causa conflitos no Dokploy
# container_name: rlm-mcp-server
restart: unless-stopped
environment:
# Memória máxima para variáveis (em MB)
- RLM_MAX_MEMORY_MB=${RLM_MAX_MEMORY_MB:-1024}
# Porta HTTP
- RLM_PORT=8765
# API Key (opcional, mas recomendado em produção)
- RLM_API_KEY=${RLM_API_KEY:-}
# Sub-chamadas LLM (RLM - Recursive Language Model)
- OPENAI_API_KEY=${OPENAI_API_KEY:-}
- RLM_SUB_MODEL=${RLM_SUB_MODEL:-gpt-4o-mini}
- RLM_MAX_SUB_CALLS=${RLM_MAX_SUB_CALLS:-100}
# Mistral OCR para PDFs escaneados
- MISTRAL_API_KEY=${MISTRAL_API_KEY:-}
# Minio/S3 para carregar arquivos grandes
- MINIO_ENDPOINT=${MINIO_ENDPOINT:-}
- MINIO_ACCESS_KEY=${MINIO_ACCESS_KEY:-}
- MINIO_SECRET_KEY=${MINIO_SECRET_KEY:-}
- MINIO_SECURE=${MINIO_SECURE:-true}
# Diretório de persistência SQLite
- RLM_PERSIST_DIR=/persist
volumes:
# Monte seus dados aqui - serão acessíveis via /data no container
- rlm-data:/data:ro
# Volume para persistência SQLite (variáveis + índices)
- rlm-persist:/persist
# Expõe porta
ports:
- "8765:8765"
# Limites de recursos
deploy:
resources:
limits:
cpus: '2'
memory: 2G
reservations:
cpus: '0.25'
memory: 256M
networks:
- dokploy-network
# Labels para Traefik
# RECOMENDADO: Configurar domínio pela UI do Dokploy (aba Domains)
# Dokploy adiciona labels automaticamente durante deploy
# Labels abaixo são fallback caso UI não esteja configurada
labels:
- "traefik.enable=true"
- "traefik.docker.network=dokploy-network"
- "traefik.http.services.rlm-mcp.loadbalancer.server.port=8765"
# Healthcheck
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8765/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 15s
# Comando: HTTP server
command: ["python", "-m", "rlm_mcp.http_server"]
volumes:
rlm-data:
driver: local
rlm-persist:
driver: local
networks:
dokploy-network:
external: true