Multi-Instance Deployment Guide
Deploy Plugged.in with horizontal scaling for high availability and load distribution across multiple application instances.Architecture Overview
Critical Requirements
1. Redis (REQUIRED)
Redis is mandatory for multi-instance deployments to ensure consistent rate limiting across all instances.1
Install Redis
Docker Compose:Standalone:
2
Install Redis Client
3
Configure Connection
Update
.env for each instance:2. Shared Database
All instances must connect to the same PostgreSQL database.3. Session Management
Ensure NextAuth sessions are stored in the database, not in-memory.Production Deployment
Docker Compose (Recommended)
docker-compose.production.yml:Nginx Load Balancer Configuration
nginx.conf:Security Configuration
1. Metrics Endpoint Protection
Update.env for all instances:
- ✅ IPv4 CIDR validation
- ✅ IPv6 CIDR validation (NEW)
- ✅ Exact IP matching
- ✅ Default: localhost + Docker networks only
2. Rate Limiting Configuration
With Redis configured, rate limits are enforced across all instances:3. OAuth Security (OAuth 2.1)
Multi-instance deployments inherit all OAuth 2.1 security features:- ✅ PKCE with S256 challenge
- ✅ Refresh token rotation
- ✅ Token reuse detection (works across instances via database)
- ✅ State integrity validation
- ✅ 10-second timeout on OAuth API calls (NEW)
Monitoring & Health Checks
Instance Health Endpoint
Each instance exposes a health check endpoint:Load Balancer Health Checks
Configure Nginx to automatically remove unhealthy instances:Prometheus Monitoring
Monitor all instances with Prometheus:Performance Optimizations
1. Database Connection Pooling
Configure optimal connection pool per instance:2. OAuth Config Caching (NEW)
Each instance caches OAuth configurations for 5 minutes:3. Server Ownership Validation (NEW)
Optimized JOIN query reduces latency by 60-70%:Scaling Guidelines
Horizontal Scaling
When to add instances:- CPU usage consistently > 70%
- Response time p95 > 2 seconds
- Queue depth increasing
- Expected traffic spike
- Minimum: 2 instances (high availability)
- Recommended: 3 instances (fault tolerance)
- Maximum: Limited by database connections
Vertical Scaling
Per-instance resources:- Minimum: 2 CPU cores, 4GB RAM
- Recommended: 4 CPU cores, 8GB RAM
- Optimal: 8 CPU cores, 16GB RAM
Auto-Scaling
Kubernetes Horizontal Pod Autoscaler:Troubleshooting
Rate limiting not working across instances
Rate limiting not working across instances
Symptom: Users can bypass rate limits by hitting different instancesSolution:
- Verify Redis is configured:
- Check Redis connection:
- Expected log:
[RateLimit] Using Redis backend for distributed rate limiting - If seeing warning:
⚠️ WARNING: Using in-memory rate limiting in production!- Configure
REDIS_URLimmediately
- Configure
OAuth flows failing intermittently
OAuth flows failing intermittently
Symptom: OAuth works sometimes, fails other timesSolution:
- Verify all instances connect to same database
- Check PKCE state storage:
- Verify state cleanup is working (15-minute interval)
Metrics endpoint returning 403
Metrics endpoint returning 403
Symptom: Prometheus can’t scrape metricsSolution:
- Check Prometheus server IP is in allowlist:
- Test CIDR validation:
- For IPv6:
High database connection count
High database connection count
Symptom: PostgreSQL running out of connectionsSolution:
- Calculate total connections:
instances × max_per_instance - Adjust PostgreSQL
max_connections: - Reduce per-instance pool size:
Deployment Checklist
Pre-Deployment Checklist
Infrastructure:
- Redis cluster configured and tested
- PostgreSQL connection pooling configured
- Load balancer health checks enabled
- SSL certificates installed
-
REDIS_URLconfigured for all instances -
NEXTAUTH_SECRETidentical across instances -
METRICS_ALLOWED_IPSrestricted to Prometheus IP - Rate limiting verified with Redis
- Prometheus scraping all instances
- Grafana dashboards configured
- Loki log aggregation enabled
- Alerts configured for instance failures
- Load test with multiple instances
- Verify rate limiting across instances
- Test instance failure handling
- Verify OAuth flows work across instances
Related Documentation
Docker Deployment
Single-instance Docker setup
OAuth Migration
OAuth 2.1 migration guide
Observability
Monitoring and logging
Security Best Practices
OAuth 2.1 security implementation

