docker-compose.ymlā¢1.87 kB
services:
mysql-mcp:
build:
context: .
dockerfile: Dockerfile
container_name: mysql-mcp-webui
ports:
- "5197:5197"
extra_hosts:
- "host.docker.internal:host-gateway"
environment:
# Transport mode
- TRANSPORT=http
- HTTP_PORT=5197
# Database path
- DB_PATH=/app/data/mysql-mcp.db
# JWT Authentication
- JWT_SECRET=${JWT_SECRET}
- JWT_EXPIRES_IN=${JWT_EXPIRES_IN:-30d}
# HTTPS configuration (optional)
- ENABLE_HTTPS=${ENABLE_HTTPS:-false}
- SSL_CERT_PATH=/app/certs/fullchain.pem
- SSL_KEY_PATH=/app/certs/privkey.pem
# Rate limiting
- RATE_LIMIT_ENABLED=${RATE_LIMIT_ENABLED:-true}
- RATE_LIMIT_WINDOW_MS=${RATE_LIMIT_WINDOW_MS:-900000}
- RATE_LIMIT_MAX_REQUESTS=${RATE_LIMIT_MAX_REQUESTS:-100}
# Environment
- NODE_ENV=production
volumes:
# Persist SQLite database using named volume (Docker-managed)
- mysql-mcp-data:/app/data
# SSL certificates (if using HTTPS)
# Mount your certificates here
- ${SSL_CERT_DIR:-./certs}:/app/certs:ro
restart: unless-stopped
networks:
- mysql-mcp-network
# Resource limits (adjust as needed)
deploy:
resources:
limits:
cpus: '1.0'
memory: 512M
reservations:
cpus: '0.5'
memory: 256M
# Health check
healthcheck:
test: ["CMD", "node", "-e", "require('http').get('http://localhost:5197/api/health', (r) => process.exit(r.statusCode === 200 ? 0 : 1))"]
interval: 30s
timeout: 3s
start_period: 10s
retries: 3
# Logging
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
networks:
mysql-mcp-network:
driver: bridge
volumes:
mysql-mcp-data:
driver: local