version: '3.9'
services:
# Primary Komodo MCP instance
komodo-mcp-1:
build:
context: .
dockerfile: Dockerfile
container_name: komodo-mcp-1
restart: unless-stopped
ports:
- "1111:1111"
environment:
# Required - Komodo API Connection
KOMODO_URL: ${KOMODO_URL}
KOMODO_API_KEY: ${KOMODO_API_KEY}
KOMODO_API_SECRET: ${KOMODO_API_SECRET}
# Optional - Timeouts and Retries
KOMODO_TIMEOUT: ${KOMODO_TIMEOUT:-30000}
KOMODO_RETRY_COUNT: ${KOMODO_RETRY_COUNT:-3}
KOMODO_RETRY_DELAY: ${KOMODO_RETRY_DELAY:-1000}
# Optional - Logging
KOMODO_LOG_LEVEL: ${KOMODO_LOG_LEVEL:-info}
# Optional - SSL
KOMODO_SSL_VERIFY: ${KOMODO_SSL_VERIFY:-true}
# Instance identification
INSTANCE_ID: "komodo-mcp-1"
INSTANCE_PORT: "1111"
volumes:
- ./logs/komodo-mcp-1:/app/logs
healthcheck:
test: ["CMD", "node", "-e", "require('net').connect(1111, '127.0.0.1').on('connect', () => process.exit(0)).on('error', () => process.exit(1))"]
interval: 30s
timeout: 10s
retries: 3
start_period: 10s
networks:
- komodo-network
logging:
driver: "json-file"
options:
max-size: "100m"
max-file: "10"
labels: "service=komodo-mcp-1"
# Secondary instance (optional)
komodo-mcp-2:
build:
context: .
dockerfile: Dockerfile
container_name: komodo-mcp-2
restart: unless-stopped
ports:
- "1112:1111"
environment:
KOMODO_URL: ${KOMODO_URL}
KOMODO_API_KEY: ${KOMODO_API_KEY}
KOMODO_API_SECRET: ${KOMODO_API_SECRET}
KOMODO_TIMEOUT: ${KOMODO_TIMEOUT:-30000}
KOMODO_RETRY_COUNT: ${KOMODO_RETRY_COUNT:-3}
KOMODO_RETRY_DELAY: ${KOMODO_RETRY_DELAY:-1000}
KOMODO_LOG_LEVEL: ${KOMODO_LOG_LEVEL:-info}
KOMODO_SSL_VERIFY: ${KOMODO_SSL_VERIFY:-true}
INSTANCE_ID: "komodo-mcp-2"
INSTANCE_PORT: "1111"
volumes:
- ./logs/komodo-mcp-2:/app/logs
healthcheck:
test: ["CMD", "node", "-e", "require('net').connect(1111, '127.0.0.1').on('connect', () => process.exit(0)).on('error', () => process.exit(1))"]
interval: 30s
timeout: 10s
retries: 3
start_period: 10s
networks:
- komodo-network
logging:
driver: "json-file"
options:
max-size: "100m"
max-file: "10"
labels: "service=komodo-mcp-2"
profiles: ["scaled"]
depends_on:
komodo-mcp-1:
condition: service_healthy
# Tertiary instance (optional)
komodo-mcp-3:
build:
context: .
dockerfile: Dockerfile
container_name: komodo-mcp-3
restart: unless-stopped
ports:
- "1113:1111"
environment:
KOMODO_URL: ${KOMODO_URL}
KOMODO_API_KEY: ${KOMODO_API_KEY}
KOMODO_API_SECRET: ${KOMODO_API_SECRET}
KOMODO_TIMEOUT: ${KOMODO_TIMEOUT:-30000}
KOMODO_RETRY_COUNT: ${KOMODO_RETRY_COUNT:-3}
KOMODO_RETRY_DELAY: ${KOMODO_RETRY_DELAY:-1000}
KOMODO_LOG_LEVEL: ${KOMODO_LOG_LEVEL:-info}
KOMODO_SSL_VERIFY: ${KOMODO_SSL_VERIFY:-true}
INSTANCE_ID: "komodo-mcp-3"
INSTANCE_PORT: "1111"
volumes:
- ./logs/komodo-mcp-3:/app/logs
healthcheck:
test: ["CMD", "node", "-e", "require('net').connect(1111, '127.0.0.1').on('connect', () => process.exit(0)).on('error', () => process.exit(1))"]
interval: 30s
timeout: 10s
retries: 3
start_period: 10s
networks:
- komodo-network
logging:
driver: "json-file"
options:
max-size: "100m"
max-file: "10"
labels: "service=komodo-mcp-3"
profiles: ["scaled"]
depends_on:
komodo-mcp-1:
condition: service_healthy
# Load balancer (optional - for distributing requests across instances)
nginx-lb:
image: nginx:alpine
container_name: komodo-mcp-lb
restart: unless-stopped
ports:
- "1110:80"
volumes:
- ./config/nginx.conf:/etc/nginx/nginx.conf:ro
networks:
- komodo-network
healthcheck:
test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 10s
profiles: ["load-balanced"]
depends_on:
- komodo-mcp-1
logging:
driver: "json-file"
options:
max-size: "100m"
max-file: "10"
networks:
komodo-network:
driver: bridge
name: komodo-network
volumes:
# Named volumes for persistence if needed
komodo-logs:
driver: local