postgres-mcp-tools
Version:
PostgreSQL-based memory system with vector search capabilities for AI applications, including MCP integration for Claude
254 lines (192 loc) • 6.73 kB
Markdown
# Production Deployment Guide
This guide provides instructions for deploying the PostgreSQL MCP Tools in a production environment.
## Production Architecture
A production deployment typically consists of:
1. **PostgreSQL Database**: A managed PostgreSQL instance with pgvector support
2. **MCP Server**: One or more instances behind a load balancer
3. **Monitoring**: Logging and alerting for system health
4. **Security**: Authentication, HTTPS, and other security measures
## Database Deployment
### Option 1: Managed PostgreSQL Service
The recommended approach is to use a managed PostgreSQL service that supports pgvector:
- **AWS RDS**: Use the PostgreSQL-compatible Aurora with pgvector extension
- **Azure Database for PostgreSQL**: Supports pgvector extension
- **Google Cloud SQL**: Supports pgvector extension
- **Supabase**: Comes with pgvector pre-installed
Steps:
1. Create a PostgreSQL instance (version 14 or higher)
2. Enable the pgvector extension
3. Run the initialization script from `init/01-init.sql`
4. Configure backups and monitoring
### Option 2: Self-Hosted PostgreSQL
If you prefer self-hosting:
1. Use the provided Docker Compose file as a starting point:
```bash
docker-compose -f docker-compose.prod.yml up -d
```
2. Configure PostgreSQL for production:
```sql
-- Example production settings
ALTER SYSTEM SET max_connections = '100';
ALTER SYSTEM SET shared_buffers = '1GB';
ALTER SYSTEM SET effective_cache_size = '3GB';
ALTER SYSTEM SET maintenance_work_mem = '256MB';
ALTER SYSTEM SET random_page_cost = '1.1';
ALTER SYSTEM SET work_mem = '20MB';
```
3. Set up proper backup procedures:
```bash
# Example backup script
pg_dump -h localhost -U memory_user -d memory_db -F c -f backup.dump
```
## MCP Server Deployment
### Option 1: Docker Deployment
1. Use the provided Dockerfile to build a production image:
```bash
docker build -t postgres-mcp-server:latest ./server
```
2. Run the container with production settings:
```bash
docker run -d \
--name mcp-server \
-p 3000:3000 \
-e NODE_ENV=production \
-e POSTGRES_HOST=your-db-host \
-e POSTGRES_PORT=5432 \
-e POSTGRES_DB=memory_db \
-e POSTGRES_USER=memory_user \
-e POSTGRES_PASSWORD=your-secure-password \
-e POSTGRES_SSL=true \
-e LOG_LEVEL=info \
-e EMBEDDING_MODEL=openai \
-e OPENAI_API_KEY=your-openai-key \
postgres-mcp-server:latest
```
### Option 2: Cloud Deployment
Deploy to a cloud platform:
#### AWS Elastic Beanstalk
1. Initialize an EB application:
```bash
eb init
```
2. Configure environment variables in the EB console
3. Deploy the application:
```bash
eb deploy
```
#### Google Cloud Run
1. Build and push the container:
```bash
gcloud builds submit --tag gcr.io/your-project/mcp-server
```
2. Deploy to Cloud Run:
```bash
gcloud run deploy mcp-server \
--image gcr.io/your-project/mcp-server \
--platform managed \
--set-env-vars POSTGRES_HOST=your-db-host,...
```
### Option 3: Kubernetes Deployment
For larger deployments, use Kubernetes:
1. Create a Kubernetes deployment file:
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: mcp-server
spec:
replicas: 3
selector:
matchLabels:
app: mcp-server
template:
metadata:
labels:
app: mcp-server
spec:
containers:
- name: mcp-server
image: postgres-mcp-server:latest
ports:
- containerPort: 3000
env:
- name: NODE_ENV
value: "production"
# Add other environment variables
resources:
limits:
cpu: "1"
memory: "1Gi"
requests:
cpu: "500m"
memory: "512Mi"
```
2. Apply the deployment:
```bash
kubectl apply -f mcp-server-deployment.yaml
```
## Security Considerations
### Database Security
1. **Use strong passwords**: Generate secure passwords for database users
2. **Enable SSL**: Set `POSTGRES_SSL=true` to encrypt database connections
3. **Use IAM roles**: When possible, use IAM roles instead of password authentication
4. **Restrict network access**: Use VPCs or network policies to limit database access
### MCP Server Security
1. **HTTPS**: Deploy behind a reverse proxy (Nginx, Traefik) with HTTPS enabled
2. **Authentication**: Implement API authentication for the MCP endpoints
3. **Rate limiting**: Add rate limiting to prevent abuse
4. **Environment variables**: Store sensitive information in environment variables or secrets management systems
Example Nginx configuration with HTTPS:
```nginx
server {
listen 443 ssl;
server_name mcp.yourdomain.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
```
## Monitoring and Maintenance
### Monitoring
1. **Database monitoring**:
- Set up alerts for high CPU/memory usage
- Monitor disk space and connection count
- Set up slow query logging
2. **MCP Server monitoring**:
- Use a monitoring service like New Relic, Datadog, or Prometheus
- Monitor API response times and error rates
- Set up alerting for critical issues
### Maintenance
1. **Regular backups**: Set up automated database backups
2. **Database optimization**: Regularly run:
```sql
SELECT memory.optimize_vector_index();
```
3. **Archive old memories**: Schedule regular archiving:
```sql
SELECT memory.archive_old_memories(90);
```
4. **Log rotation**: Configure log rotation to prevent disk space issues
## Scaling Considerations
### Database Scaling
1. **Vertical scaling**: Increase database instance size for better performance
2. **Read replicas**: Set up read replicas for scaling read operations
3. **Sharding**: For very large deployments, consider sharding by conversation_id
### MCP Server Scaling
1. **Horizontal scaling**: Deploy multiple instances behind a load balancer
2. **Caching**: Implement response caching for frequently accessed memories
3. **Connection pooling**: Tune database connection pool settings
## High Availability Setup
For mission-critical deployments:
1. **Database HA**: Use a managed PostgreSQL service with HA capability
2. **Multi-region deployment**: Deploy the MCP server across multiple regions
3. **Failover procedures**: Implement automated failover mechanisms
4. **Disaster recovery**: Maintain cross-region backups and recovery procedures
## Cost Optimization
1. **Right-size resources**: Adjust instance sizes based on actual usage
2. **Archive old data**: Implement lifecycle policies for old memories
3. **Serverless options**: Consider serverless deployment for variable workloads