325 lines
6.4 KiB
Markdown
325 lines
6.4 KiB
Markdown
# Docker Deployment Guide for n8n-MCP
|
|
|
|
This guide provides comprehensive instructions for deploying n8n-MCP using Docker.
|
|
|
|
## Table of Contents
|
|
|
|
- [Quick Start](#quick-start)
|
|
- [Configuration](#configuration)
|
|
- [Deployment Options](#deployment-options)
|
|
- [Development Setup](#development-setup)
|
|
- [Production Deployment](#production-deployment)
|
|
- [Troubleshooting](#troubleshooting)
|
|
|
|
## Quick Start
|
|
|
|
### Using Pre-built Images
|
|
|
|
The fastest way to get started is using our pre-built Docker images from GitHub Container Registry:
|
|
|
|
```bash
|
|
# 1. Create a .env file with your authentication token
|
|
echo "AUTH_TOKEN=$(openssl rand -base64 32)" > .env
|
|
|
|
# 2. Start the container
|
|
docker compose up -d
|
|
|
|
# 3. Check it's running
|
|
docker compose ps
|
|
docker compose logs
|
|
```
|
|
|
|
### Building Locally
|
|
|
|
To build the image yourself:
|
|
|
|
```bash
|
|
# Build the image
|
|
docker build -t n8n-mcp:local .
|
|
|
|
# Run with docker compose (update image in docker-compose.yml first)
|
|
docker compose up -d
|
|
```
|
|
|
|
## Configuration
|
|
|
|
### Environment Variables
|
|
|
|
Create a `.env` file in the project root:
|
|
|
|
```bash
|
|
# Required for HTTP mode
|
|
AUTH_TOKEN=your-secure-token-here
|
|
|
|
# Server configuration
|
|
PORT=3000
|
|
NODE_ENV=production
|
|
LOG_LEVEL=info
|
|
|
|
# MCP mode (stdio or http)
|
|
MCP_MODE=http
|
|
|
|
# Database
|
|
NODE_DB_PATH=/app/data/nodes.db
|
|
REBUILD_ON_START=false
|
|
```
|
|
|
|
### Docker Compose Options
|
|
|
|
The project includes several Docker Compose configurations:
|
|
|
|
- `docker-compose.yml` - Production HTTP server
|
|
- `docker-compose.override.yml.example` - Development overrides template
|
|
- `docker-compose.nginx.yml` - HTTPS with nginx (Phase 2)
|
|
|
|
## Deployment Options
|
|
|
|
### Option 1: HTTP Server Mode
|
|
|
|
Best for remote access and integration with Claude Desktop via mcp-remote:
|
|
|
|
```bash
|
|
# Start the server
|
|
docker compose up -d
|
|
|
|
# Test the health endpoint
|
|
curl http://localhost:3000/health
|
|
|
|
# Test with authentication
|
|
curl -H "Authorization: Bearer $AUTH_TOKEN" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"jsonrpc":"2.0","method":"tools/list","id":1}' \
|
|
http://localhost:3000/mcp
|
|
```
|
|
|
|
Configure Claude Desktop:
|
|
```json
|
|
{
|
|
"mcpServers": {
|
|
"n8n-remote": {
|
|
"command": "npx",
|
|
"args": [
|
|
"-y",
|
|
"@modelcontextprotocol/mcp-remote@latest",
|
|
"connect",
|
|
"http://localhost:3000/mcp"
|
|
],
|
|
"env": {
|
|
"MCP_AUTH_TOKEN": "your-auth-token-here"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### Option 2: stdio Mode (Direct)
|
|
|
|
For local-only usage without network exposure:
|
|
|
|
```json
|
|
{
|
|
"mcpServers": {
|
|
"n8n-docker": {
|
|
"command": "docker",
|
|
"args": [
|
|
"run",
|
|
"--rm",
|
|
"-i",
|
|
"-e", "MCP_MODE=stdio",
|
|
"-v", "n8n-mcp-data:/app/data",
|
|
"ghcr.io/czlonkowski/n8n-mcp:latest"
|
|
]
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### Option 3: HTTPS with nginx (Coming Soon)
|
|
|
|
For production deployments with SSL/TLS:
|
|
|
|
```bash
|
|
# Use the nginx-enhanced compose file
|
|
docker compose -f docker-compose.nginx.yml up -d
|
|
```
|
|
|
|
## Development Setup
|
|
|
|
### Local Development with Docker
|
|
|
|
1. Copy the override template:
|
|
```bash
|
|
cp docker-compose.override.yml.example docker-compose.override.yml
|
|
```
|
|
|
|
2. Customize for your needs:
|
|
```yaml
|
|
# docker-compose.override.yml
|
|
version: '3.8'
|
|
|
|
services:
|
|
n8n-mcp:
|
|
build: . # Build locally instead of using pre-built
|
|
environment:
|
|
NODE_ENV: development
|
|
LOG_LEVEL: debug
|
|
REBUILD_ON_START: "true"
|
|
volumes:
|
|
# Mount source for development
|
|
- ./src:/app/src:ro
|
|
- ./scripts:/app/scripts:ro
|
|
- ./dist:/app/dist:rw
|
|
```
|
|
|
|
3. Start in development mode:
|
|
```bash
|
|
docker compose up --build
|
|
```
|
|
|
|
### Testing Docker Builds
|
|
|
|
Run the test script to validate your Docker setup:
|
|
|
|
```bash
|
|
./scripts/test-docker.sh
|
|
```
|
|
|
|
This script will:
|
|
- Build the Docker image
|
|
- Test stdio mode functionality
|
|
- Test HTTP mode with authentication
|
|
- Verify volume persistence
|
|
- Check health endpoints
|
|
|
|
## Production Deployment
|
|
|
|
### Security Considerations
|
|
|
|
1. **Authentication**: Always set a strong `AUTH_TOKEN`:
|
|
```bash
|
|
openssl rand -base64 32
|
|
```
|
|
|
|
2. **Network Security**: Consider using a reverse proxy (nginx, Traefik) for:
|
|
- SSL/TLS termination
|
|
- Rate limiting
|
|
- Access control
|
|
|
|
3. **Resource Limits**: The compose file includes memory limits:
|
|
```yaml
|
|
deploy:
|
|
resources:
|
|
limits:
|
|
memory: 512M
|
|
reservations:
|
|
memory: 256M
|
|
```
|
|
|
|
### Deployment Checklist
|
|
|
|
- [ ] Generate secure AUTH_TOKEN
|
|
- [ ] Configure environment variables
|
|
- [ ] Set up volume backups for `/app/data`
|
|
- [ ] Configure monitoring/logging
|
|
- [ ] Set up SSL/TLS (if exposing publicly)
|
|
- [ ] Test health endpoints
|
|
- [ ] Verify Claude Desktop connectivity
|
|
|
|
### Multi-Architecture Support
|
|
|
|
The images support both amd64 and arm64 architectures:
|
|
|
|
```bash
|
|
# The correct architecture is automatically selected
|
|
docker pull ghcr.io/czlonkowski/n8n-mcp:latest
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Common Issues
|
|
|
|
#### Container fails to start
|
|
```bash
|
|
# Check logs
|
|
docker compose logs -f
|
|
|
|
# Verify environment variables
|
|
docker compose config
|
|
|
|
# Check file permissions
|
|
docker compose exec n8n-mcp ls -la /app/data
|
|
```
|
|
|
|
#### Database initialization fails
|
|
```bash
|
|
# Manually initialize
|
|
docker compose exec n8n-mcp node dist/scripts/rebuild.js
|
|
|
|
# Check database file
|
|
docker compose exec n8n-mcp ls -la /app/data/nodes.db
|
|
```
|
|
|
|
#### Authentication errors
|
|
```bash
|
|
# Verify token is set
|
|
echo $AUTH_TOKEN
|
|
|
|
# Test with curl
|
|
curl -v -H "Authorization: Bearer $AUTH_TOKEN" http://localhost:3000/health
|
|
```
|
|
|
|
### Debug Mode
|
|
|
|
Enable debug logging:
|
|
```bash
|
|
LOG_LEVEL=debug docker compose up
|
|
```
|
|
|
|
### Volume Management
|
|
|
|
```bash
|
|
# List volumes
|
|
docker volume ls | grep n8n-mcp
|
|
|
|
# Inspect volume
|
|
docker volume inspect n8n-mcp-data
|
|
|
|
# Remove volume (WARNING: deletes data)
|
|
docker compose down -v
|
|
```
|
|
|
|
## Advanced Configuration
|
|
|
|
### Custom Certificates (Phase 2)
|
|
|
|
For the nginx-enhanced version:
|
|
```yaml
|
|
volumes:
|
|
- ./certs/server.crt:/app/certs/server.crt:ro
|
|
- ./certs/server.key:/app/certs/server.key:ro
|
|
```
|
|
|
|
### Database Persistence
|
|
|
|
The SQLite database is stored in a named volume for persistence:
|
|
```yaml
|
|
volumes:
|
|
n8n-mcp-data:
|
|
driver: local
|
|
```
|
|
|
|
To backup:
|
|
```bash
|
|
docker run --rm -v n8n-mcp-data:/data -v $(pwd):/backup alpine \
|
|
tar czf /backup/n8n-mcp-backup.tar.gz -C /data .
|
|
```
|
|
|
|
## Next Steps
|
|
|
|
- Check [GitHub Releases](https://github.com/czlonkowski/n8n-mcp/releases) for updates
|
|
- Report issues at [GitHub Issues](https://github.com/czlonkowski/n8n-mcp/issues)
|
|
- Join discussions in [GitHub Discussions](https://github.com/czlonkowski/n8n-mcp/discussions)
|
|
|
|
## License
|
|
|
|
This project uses the Sustainable Use License. See [LICENSE](./LICENSE) for details. |