UNPKG

mushcode-mcp-server

Version:

A specialized Model Context Protocol server for MUSHCODE development assistance. Provides AI-powered code generation, validation, optimization, and examples for MUD development.

331 lines (248 loc) 7.33 kB
# Docker Deployment Guide for MUSHCODE MCP Server This guide covers deploying the MUSHCODE MCP server using Docker in production environments. ## Quick Start ```bash # Build the Docker image ./scripts/docker-build.sh # Run with Docker Compose (recommended) docker-compose up -d # Or run directly docker run -d --name mushcode-mcp-server mushcode-mcp-server:latest ``` ## Docker Images The project provides optimized Docker images for different environments: | Image Tag | Purpose | Size | Use Case | |-----------|---------|------|----------| | `mushcode-mcp-server:latest` | Production | ~150MB | Production deployment | | `mushcode-mcp-server:dev` | Development | ~300MB | Development with hot reload | | `mushcode-mcp-server:test` | Testing | ~300MB | CI/CD testing | ## Production Deployment ### Using Docker Compose (Recommended) ```bash # Start the service docker-compose up -d # View logs docker-compose logs -f # Stop the service docker-compose down # Update the service docker-compose pull docker-compose up -d ``` ### Using Docker Run ```bash # Run production container docker run -d \ --name mushcode-mcp-server \ --restart unless-stopped \ -p 3000:3000 \ -v mushcode-logs:/app/logs \ -v mushcode-cache:/app/cache \ -e NODE_ENV=production \ -e MUSHCODE_LOG_LEVEL=info \ mushcode-mcp-server:latest ``` ## Development Setup ### Using Development Compose ```bash # Start development environment docker-compose -f docker-compose.dev.yml up # Run tests docker-compose -f docker-compose.dev.yml --profile test up mushcode-test # Access development container docker-compose -f docker-compose.dev.yml exec mushcode-mcp-server-dev sh ``` ### Development Features - **Hot Reload**: Code changes automatically restart the server - **Debug Port**: Node.js debugger available on port 9229 - **Volume Mounting**: Source code mounted for live editing - **Extended Logging**: Debug-level logging enabled ## Configuration ### Environment Variables | Variable | Default | Description | |----------|---------|-------------| | `NODE_ENV` | `production` | Runtime environment | | `MUSHCODE_LOG_LEVEL` | `info` | Logging level (debug, info, warn, error) | | `MUSHCODE_CACHE_SIZE` | `1000` | Maximum cache entries | | `MUSHCODE_CACHE_TTL` | `300000` | Cache TTL in milliseconds (5 minutes) | | `PORT` | `3000` | Server port (for HTTP health checks) | ### Volume Mounts | Path | Purpose | Recommended | |------|---------|-------------| | `/app/logs` | Application logs | Yes | | `/app/cache` | Performance cache | Yes | | `/app/mushcode-mcp.config.json` | Configuration file | Optional | ### Custom Configuration ```bash # Mount custom configuration docker run -d \ --name mushcode-mcp-server \ -v ./custom-config.json:/app/mushcode-mcp.config.json:ro \ mushcode-mcp-server:latest ``` ## Health Monitoring ### Health Check The Docker image includes a built-in health check: ```bash # Check container health docker ps --format "table {{.Names}}\t{{.Status}}" # View health check logs docker inspect --format='{{json .State.Health}}' mushcode-mcp-server ``` ### Monitoring Commands ```bash # View real-time logs docker logs -f mushcode-mcp-server # Check resource usage docker stats mushcode-mcp-server # Execute health check manually docker exec mushcode-mcp-server node -e "import('./dist/server/index.js').then(() => console.log('OK')).catch(() => process.exit(1))" ``` ## Performance Optimization ### Resource Limits ```yaml # docker-compose.yml deploy: resources: limits: cpus: '1.0' memory: 512M reservations: cpus: '0.5' memory: 256M ``` ### Cache Configuration ```bash # High-performance cache settings docker run -d \ -e MUSHCODE_CACHE_SIZE=2000 \ -e MUSHCODE_CACHE_TTL=600000 \ mushcode-mcp-server:latest ``` ### Multi-Container Scaling ```yaml # docker-compose.yml services: mushcode-mcp-server: deploy: replicas: 3 ports: - "3000-3002:3000" ``` ## Security ### Security Features - **Non-root user**: Runs as user `mushcode` (UID 1001) - **Read-only filesystem**: Root filesystem is read-only - **No new privileges**: Security option prevents privilege escalation - **Minimal base image**: Alpine Linux for reduced attack surface ### Security Best Practices ```bash # Run with additional security options docker run -d \ --name mushcode-mcp-server \ --security-opt no-new-privileges:true \ --read-only \ --tmpfs /tmp:noexec,nosuid,size=100m \ --user 1001:1001 \ mushcode-mcp-server:latest ``` ## Troubleshooting ### Common Issues 1. **Container won't start** ```bash # Check logs docker logs mushcode-mcp-server # Check configuration docker exec mushcode-mcp-server cat /app/mushcode-mcp.config.json ``` 2. **Performance issues** ```bash # Check resource usage docker stats mushcode-mcp-server # Increase memory limit docker update --memory=1g mushcode-mcp-server ``` 3. **Permission errors** ```bash # Check file permissions docker exec mushcode-mcp-server ls -la /app/ # Fix ownership docker exec --user root mushcode-mcp-server chown -R mushcode:mushcode /app/logs ``` ### Debug Mode ```bash # Run in debug mode docker run -it \ -e NODE_ENV=development \ -e MUSHCODE_LOG_LEVEL=debug \ mushcode-mcp-server:dev ``` ### Performance Testing ```bash # Run performance tests in container docker run --rm \ mushcode-mcp-server:test \ npm run test -- tests/performance/simple-performance.test.ts ``` ## CI/CD Integration ### GitHub Actions Example ```yaml name: Docker Build and Deploy on: push: branches: [main] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Build Docker image run: ./scripts/docker-build.sh - name: Run tests run: docker run --rm mushcode-mcp-server:test npm test - name: Deploy to production run: docker-compose up -d ``` ### Build Arguments ```bash # Custom build with build arguments docker build \ --build-arg NODE_VERSION=20 \ --build-arg BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ') \ --tag mushcode-mcp-server:custom \ . ``` ## Backup and Recovery ### Data Backup ```bash # Backup logs and cache docker run --rm \ -v mushcode-logs:/source/logs \ -v mushcode-cache:/source/cache \ -v $(pwd)/backup:/backup \ alpine tar czf /backup/mushcode-backup-$(date +%Y%m%d).tar.gz -C /source . ``` ### Recovery ```bash # Restore from backup docker run --rm \ -v mushcode-logs:/target/logs \ -v mushcode-cache:/target/cache \ -v $(pwd)/backup:/backup \ alpine tar xzf /backup/mushcode-backup-20240101.tar.gz -C /target ``` ## Production Checklist - [ ] Resource limits configured - [ ] Health checks enabled - [ ] Logging configured - [ ] Volumes mounted for persistent data - [ ] Security options applied - [ ] Monitoring setup - [ ] Backup strategy implemented - [ ] Update strategy defined ## Support For Docker-specific issues: 1. Check container logs: `docker logs mushcode-mcp-server` 2. Verify configuration: `docker exec mushcode-mcp-server cat /app/mushcode-mcp.config.json` 3. Test health check: `docker exec mushcode-mcp-server node -e "console.log('Health OK')"` 4. Review resource usage: `docker stats mushcode-mcp-server`