Skip to main content

Advanced Configuration

This guide covers advanced configuration options for the Plugged.in platform, including security, performance, and customization settings.

Environment Variables

Core Application Settings

# Application
NODE_ENV=production
NEXT_PUBLIC_APP_URL=https://your-domain.com
PORT=12005

# Database
DATABASE_URL=postgresql://user:password@localhost:5432/pluggedin_db
DATABASE_SSL=true
DATABASE_POOL_MIN=2
DATABASE_POOL_MAX=10

# Authentication
NEXTAUTH_SECRET=your-nextauth-secret
NEXTAUTH_URL=https://your-domain.com

# API Configuration
PLUGGEDIN_API_KEY=your-api-key
API_RATE_LIMIT=60
API_RATE_LIMIT_WINDOW=60

Security Configuration

# Encryption
ENCRYPTION_KEY=your-32-character-encryption-key
ENCRYPTION_ALGORITHM=aes-256-gcm

# Content Security Policy
CSP_HEADER="default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self'; connect-src 'self'"

# CORS
CORS_ORIGIN=https://your-domain.com,https://app.your-domain.com
CORS_CREDENTIALS=true

# Security Headers
HSTS_MAX_AGE=31536000
X_FRAME_OPTIONS=DENY
X_CONTENT_TYPE_OPTIONS=nosniff

# Rate Limiting
RATE_LIMIT_API=60
RATE_LIMIT_AUTH=5
RATE_LIMIT_UPLOAD=10
RATE_LIMIT_SEARCH=100

# Input Validation
MAX_FILE_SIZE=10485760
MAX_REQUEST_SIZE=10485760
ALLOWED_FILE_TYPES=pdf,txt,md,json,html,jpg,png,gif

# Sandboxing
MCP_ISOLATION_TYPE=bubblewrap
MCP_ISOLATION_FALLBACK=firejail
MCP_ISOLATION_TIMEOUT=30000
MCP_ISOLATION_MEMORY=1G
MCP_ISOLATION_CPU_SHARES=512

OAuth Configuration

# GitHub OAuth
GITHUB_CLIENT_ID=your-github-client-id
GITHUB_CLIENT_SECRET=your-github-client-secret
GITHUB_OAUTH_SCOPES=repo,user:email

# Linear OAuth
LINEAR_CLIENT_ID=your-linear-client-id
LINEAR_CLIENT_SECRET=your-linear-client-secret
LINEAR_OAUTH_SCOPES=read,write

# OAuth Security
OAUTH_STATE_TIMEOUT=600
OAUTH_TOKEN_REFRESH_THRESHOLD=300
OAUTH_ENCRYPTION_KEY=your-oauth-encryption-key

MCP Server Configuration

# Server Discovery
MCP_DISCOVERY_TIMEOUT=30000
MCP_DISCOVERY_RETRIES=3
MCP_DISCOVERY_PARALLEL=5

# Transport Settings
MCP_STDIO_TIMEOUT=30000
MCP_SSE_TIMEOUT=60000
MCP_HTTP_TIMEOUT=60000

# Tool Configuration
UUID_PREFIX_ENABLED=true
TOOL_NAME_MAX_LENGTH=50
TOOL_DESCRIPTION_MAX_LENGTH=500

# Resource Limits
MCP_SERVER_MEMORY=512M
MCP_SERVER_CPU=0.5
MCP_SERVER_PROCESSES=1

Document Processing (RAG v2)

# Document Storage
DOCUMENTS_MAX_SIZE=10485760
DOCUMENTS_ALLOWED_TYPES=pdf,txt,md,json,html,jpg,png,gif
DOCUMENTS_UPLOAD_PATH=/app/uploads
DOCUMENTS_MAX_FILES=1000

# RAG Configuration
RAG_ENABLED=true
RAG_MODEL=gpt-3.5-turbo
RAG_CHUNK_SIZE=1000
RAG_CHUNK_OVERLAP=200
RAG_TOP_K=5
RAG_SCORE_THRESHOLD=0.7

# Vector Database
VECTOR_DB_TYPE=postgresql
VECTOR_DIMENSIONS=1536
VECTOR_METRIC=cosine
VECTOR_INDEX_TYPE=ivfflat

# Search Settings
SEARCH_DEBOUNCE_MS=500
SEARCH_MAX_RESULTS=50
SEARCH_MIN_QUERY_LENGTH=3

Notification System

# Notification Settings
NOTIFICATIONS_ENABLED=true
NOTIFICATIONS_POLLING_INTERVAL=15000
NOTIFICATIONS_EMAIL_ENABLED=true
NOTIFICATIONS_WEBHOOK_ENABLED=true

# Email Configuration
SMTP_HOST=smtp.your-domain.com
SMTP_PORT=587
SMTP_SECURE=true
SMTP_USER=your-smtp-user
SMTP_PASS=your-smtp-password
SMTP_FROM=noreply@your-domain.com

# Webhook Settings
WEBHOOK_TIMEOUT=5000
WEBHOOK_RETRIES=3
WEBHOOK_RETRY_DELAY=1000
WEBHOOK_SECRET=your-webhook-secret

Performance & Caching

# Caching
CACHE_TYPE=redis
CACHE_TTL=3600
CACHE_MAX_SIZE=100MB
CACHE_REDIS_URL=redis://localhost:6379

# Memory Cache (Fallback)
MEMORY_CACHE_ENABLED=true
MEMORY_CACHE_TTL=300
MEMORY_CACHE_MAX_SIZE=50MB

# Database Optimization
DB_QUERY_TIMEOUT=30000
DB_CONNECTION_TIMEOUT=5000
DB_STATEMENT_TIMEOUT=60000

# Application Performance
NEXT_TELEMETRY_DISABLED=true
BUNDLE_ANALYZER=false
SOURCEMAP=false

Monitoring & Logging

# Logging
LOG_LEVEL=info
LOG_FORMAT=json
LOG_FILE=/var/log/pluggedin/app.log
LOG_MAX_SIZE=100MB
LOG_MAX_FILES=5

# Metrics
METRICS_ENABLED=true
METRICS_PORT=9090
METRICS_PATH=/metrics

# Health Checks
HEALTH_CHECK_PATH=/health
HEALTH_CHECK_INTERVAL=30000
HEALTH_CHECK_TIMEOUT=5000

# Tracing
TRACING_ENABLED=false
TRACING_SERVICE_NAME=pluggedin-app
TRACING_ENDPOINT=http://localhost:4318/v1/traces

Docker Configuration

docker-compose.yml

version: '3.8'
services:
  pluggedin-app:
    image: pluggedin/app:latest
    environment:
      - NODE_ENV=production
      - DATABASE_URL=postgresql://pluggedin:password@db:5432/pluggedin_db
    depends_on:
      - db
      - redis
    volumes:
      - uploads:/app/uploads
      - ./logs:/var/log/pluggedin

  pluggedin-mcp:
    image: pluggedin/mcp:latest
    environment:
      - PLUGGEDIN_APP_URL=http://pluggedin-app:12005
    depends_on:
      - pluggedin-app

  db:
    image: postgres:15
    environment:
      - POSTGRES_DB=pluggedin_db
      - POSTGRES_USER=pluggedin
      - POSTGRES_PASSWORD=your-secure-password
    volumes:
      - postgres_data:/var/lib/postgresql/data

  redis:
    image: redis:7-alpine
    command: redis-server --appendonly yes
    volumes:
      - redis_data:/data

volumes:
  postgres_data:
  redis_data:
  uploads:

Kubernetes Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: pluggedin-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: pluggedin-app
  template:
    metadata:
      labels:
        app: pluggedin-app
    spec:
      containers:
      - name: pluggedin-app
        image: pluggedin/app:latest
        ports:
        - containerPort: 12005
        env:
        - name: NODE_ENV
          value: "production"
        - name: DATABASE_URL
          valueFrom:
            secretKeyRef:
              name: pluggedin-secrets
              key: database-url
        resources:
          requests:
            memory: "512Mi"
            cpu: "250m"
          limits:
            memory: "1Gi"
            cpu: "500m"
        livenessProbe:
          httpGet:
            path: /health
            port: 12005
          initialDelaySeconds: 30
          periodSeconds: 10
        readinessProbe:
          httpGet:
            path: /api/health
            port: 12005
          initialDelaySeconds: 5
          periodSeconds: 5

Advanced Security Configuration

Custom SSL/TLS

# SSL Configuration
SSL_CERT_PATH=/etc/ssl/certs/pluggedin.crt
SSL_KEY_PATH=/etc/ssl/private/pluggedin.key
SSL_CA_PATH=/etc/ssl/certs/ca.crt

# Certificate Auto-Renewal
CERT_AUTO_RENEW=true
CERT_RENEW_THRESHOLD=30
CERT_RENEW_HOOK=/scripts/renew-cert.sh

Custom Sandboxing Rules

# Bubblewrap Configuration
BWRAP_SHARE_NET=false
BWRAP_RO_BIND=/usr,/usr
BWRAP_TMPFS=/tmp
BWRAP_PROC=/proc
BWRAP_DEV=/dev

# Firejail Configuration
FIREJAIL_PROFILE=/etc/firejail/pluggedin.profile
FIREJAIL_BLACKLIST=/etc/firejail/blacklist.txt

Advanced Rate Limiting

# Redis-based Rate Limiting
RATE_LIMIT_STORE=redis
RATE_LIMIT_REDIS_URL=redis://localhost:6379
RATE_LIMIT_KEY_PREFIX=pluggedin:ratelimit

# Custom Limits by Endpoint
RATE_LIMIT_DOCUMENTS=10
RATE_LIMIT_MCP_SERVERS=20
RATE_LIMIT_COLLECTIONS=30
RATE_LIMIT_WEBHOOKS=50

Database Optimization

PostgreSQL Configuration

# postgresql.conf optimizations
shared_buffers = 256MB
effective_cache_size = 1GB
work_mem = 4MB
maintenance_work_mem = 64MB
checkpoint_segments = 32
wal_buffers = 16MB
default_statistics_target = 100
random_page_cost = 1.5
effective_io_concurrency = 200

Connection Pooling

# PgBouncer Configuration
PGBOUNCER_ENABLED=true
PGBOUNCER_POOL_SIZE=20
PGBOUNCER_RESERVE_POOL_SIZE=5
PGBOUNCER_MAX_CLIENT_CONN=100

Performance Tuning

Memory Management

# Node.js Memory Settings
NODE_OPTIONS="--max-old-space-size=4096 --optimize-for-size"

# Garbage Collection
GC_INTERVAL=30000
GC_THRESHOLD=0.8

# Memory Limits
MEMORY_MAX_BUFFER=1GB
MEMORY_MAX_RSS=1.5GB

Database Query Optimization

# Query Settings
DB_SLOW_QUERY_LOG=true
DB_SLOW_QUERY_THRESHOLD=1000
DB_QUERY_CACHE=true
DB_QUERY_CACHE_SIZE=1000

# Index Settings
DB_AUTO_EXPLAIN=true
DB_INDEX_ADVISOR=true

Monitoring & Alerting

Prometheus Metrics

# Prometheus Configuration
PROMETHEUS_ENABLED=true
PROMETHEUS_PORT=9090
PROMETHEUS_PATH=/metrics

# Custom Metrics
METRICS_COLLECT_DB=true
METRICS_COLLECT_MCP=true
METRICS_COLLECT_RAG=true

Alert Configuration

# Alert Rules
groups:
  - name: pluggedin
    rules:
      - alert: HighErrorRate
        expr: rate(errors_total[5m]) > 0.1
        for: 5m
        labels:
          severity: warning

      - alert: DatabaseConnectionPoolExhausted
        expr: db_connections_max - db_connections_available < 5
        for: 2m
        labels:
          severity: critical

      - alert: HighMemoryUsage
        expr: process_memory_usage_bytes / process_memory_max_bytes > 0.9
        for: 1m
        labels:
          severity: critical

Backup & Recovery

Automated Backup Configuration

# Backup Settings
BACKUP_ENABLED=true
BACKUP_SCHEDULE="0 2 * * *"
BACKUP_RETENTION=30
BACKUP_COMPRESSION=gzip

# Backup Destinations
BACKUP_S3_BUCKET=pluggedin-backups
BACKUP_S3_REGION=us-east-1
BACKUP_LOCAL_PATH=/backups

# Encryption
BACKUP_ENCRYPTION=true
BACKUP_ENCRYPTION_KEY=your-backup-key

Recovery Procedures

# Database Recovery
pg_restore -d pluggedin_db backup_file.dump

# File Recovery
rsync -av backup_server:/backups/uploads /app/uploads

# Configuration Recovery
cp backup_config/.env .env.backup

Development Configuration

Development Environment

# Development Settings
NODE_ENV=development
DEBUG=pluggedin:*
LOG_LEVEL=debug

# Hot Reload
NEXT_HOT_RELOAD=true
FAST_REFRESH=true

# Development Tools
BUNDLE_ANALYZER=true
SOURCEMAP=true

Testing Configuration

# Test Settings
TEST_DATABASE_URL=postgresql://test:test@localhost:5432/pluggedin_test
TEST_REDIS_URL=redis://localhost:6379/1
TEST_TIMEOUT=30000

# Mock Settings
MOCK_EXTERNAL_APIS=true
MOCK_MCP_SERVERS=true
MOCK_OAUTH_PROVIDERS=true

Troubleshooting Configuration

Debug Settings

# Debug Configuration
DEBUG_MODE=true
DEBUG_REQUESTS=true
DEBUG_DATABASE=true
DEBUG_MCP=true

# Stack Traces
STACK_TRACE_LIMIT=50
SOURCE_MAP_SUPPORT=true

# Performance Profiling
PROFILER_ENABLED=true
PROFILER_PORT=9229

Log Configuration

# Detailed Logging
LOG_REQUESTS=true
LOG_RESPONSES=true
LOG_DATABASE_QUERIES=true
LOG_MCP_COMMUNICATION=true

# Log Rotation
LOG_ROTATION_SIZE=100MB
LOG_ROTATION_DATE=true
LOG_COMPRESSION=true
This advanced configuration guide provides comprehensive options for customizing and optimizing your Plugged.in deployment. For specific use cases or custom requirements, consult the troubleshooting guide or contact support.