Spaces:
Sleeping
Sleeping
Deployment Guide
Production Checklist
- All environment variables configured
- Database migrations run
- Redis cache configured
- API keys secured (use secrets management)
- CORS configured properly
- Rate limiting enabled
- Logging configured
- SSL/TLS certificates installed
- Health checks passing
- Load testing completed
Deployment Options
1. Docker Compose (Recommended for Small Deployments)
# Build and start all services
docker-compose up -d
# View logs
docker-compose logs -f
# Stop services
docker-compose down
2. Kubernetes
Prerequisites
- Kubernetes cluster (1.24+)
- kubectl configured
- Container registry access
Deploy
# Create namespace
kubectl create namespace multi-agent
# Create secrets for API keys
kubectl create secret generic api-keys \
--from-literal=openai-api-key=sk-... \
--from-literal=database-url=postgresql://... \
-n multi-agent
# Apply deployment
kubectl apply -f k8s/ -n multi-agent
# Check status
kubectl get pods -n multi-agent
kubectl logs -f deployment/backend -n multi-agent
3. Cloud Platforms
AWS (ECS/Fargate)
- Push image to ECR
- Create ECS task definition
- Create ECS service
- Configure RDS for database
- Configure ElastiCache for Redis
Google Cloud (Cloud Run)
# Build and push
gcloud builds submit --tag gcr.io/PROJECT/multi-agent
# Deploy
gcloud run deploy multi-agent \
--image gcr.io/PROJECT/multi-agent \
--platform managed \
--region us-central1
Azure (App Service)
# Create resource group
az group create -n multi-agent-rg -l eastus
# Create app service plan
az appservice plan create -n multi-agent-plan \
-g multi-agent-rg --sku B2 --is-linux
# Deploy container
az webapp create -n multi-agent -g multi-agent-rg \
-p multi-agent-plan --deployment-container-image-name-user-provided
Heroku
# Login
heroku login
# Create app
heroku create multi-agent
# Set environment variables
heroku config:set OPENAI_API_KEY=sk-...
heroku config:set DATABASE_URL=postgresql://...
# Deploy
git push heroku main
# View logs
heroku logs --tail
Environment Variables
For production, secure these variables:
# Critical
OPENAI_API_KEY=sk-your-production-key
DATABASE_URL=postgresql://user:pass@host/db
REDIS_URL=redis://host:6379/0
# Security
ENVIRONMENT=production
CORS_ORIGINS=https://yourdomain.com
API_KEY_SECRET=your-secret-key
# Logging
LOG_LEVEL=INFO
SENTRY_DSN=https://... # Optional: error tracking
# Performance
WORKER_PROCESSES=4
MAX_CONNECTIONS=100
Database Migrations
# Using Alembic (if configured)
alembic upgrade head
# Or with SQLAlchemy directly
python -c "from backend.core.config import init_db; init_db()"
Monitoring & Logging
Application Logs
Use structured logging to centralize logs:
# Docker
docker-compose logs -f backend
# Kubernetes
kubectl logs -f deployment/backend
# Cloud services
# Check respective platform dashboards
Metrics to Monitor
- Response time (p50, p95, p99)
- Error rate
- Task completion rate
- API usage (requests/minute)
- Memory/CPU usage
- Database connection pool health
- Queue depth (if using task queue)
Recommended Tools
- Monitoring: Prometheus + Grafana
- Logging: ELK Stack, Datadog, or cloud provider
- Error Tracking: Sentry
- APM: New Relic, DataDog
Scaling
Horizontal Scaling
# Docker Compose
docker-compose up -d --scale backend=3
# Kubernetes
kubectl scale deployment backend --replicas=3
Performance Optimization
Cache frequently accessed data
# In backend code @cache.cached(timeout=300) def expensive_operation(): passUse connection pooling
- Redis already handles this
- Database: SQLAlchemy creates connection pool automatically
Optimize database queries
- Add indexes to frequently queried columns
- Use query profiling tools
Security
API Security
Enable HTTPS/TLS (required for production)
Add API authentication
from fastapi import Security, HTTPBearer security = HTTPBearer()Implement rate limiting
from slowapi import Limiter limiter = Limiter(key_func=get_remote_address)Add CORS restrictions
CORSMiddleware( allow_origins=["https://yourdomain.com"], allow_credentials=True, )
Data Security
- Encrypt sensitive data at rest
- Use environment variables for secrets (never commit .env)
- Regular security audits
- Keep dependencies updated
Backup & Recovery
# Backup PostgreSQL
pg_dump multi_agent > backup.sql
# Restore
psql multi_agent < backup.sql
# Backup Redis
redis-cli BGSAVE
# RDB file: /var/lib/redis/dump.rdb
# Docker volume backup
docker-compose exec postgres pg_dump multi_agent > backup.sql
Troubleshooting
Service Won't Start
# Check logs
docker-compose logs backend
# Verify environment
docker-compose config
# Reset containers
docker-compose down -v
docker-compose up --build
High Memory Usage
- Check for memory leaks in agent code
- Reduce worker processes
- Increase available memory
- Monitor with:
docker stats
Slow Queries
# Enable query logging
# In .env: SQLALCHEMY_ECHO=true
# Analyze slow queries
# Enable PostgreSQL slow query log
Rollback Procedure
# Docker
docker-compose down
docker-compose pull # Get previous version
docker-compose up
# Kubernetes
kubectl rollout history deployment/backend
kubectl rollout undo deployment/backend --to-revision=1
# Heroku
heroku releases
heroku rollback v123
Support & Documentation
- GitHub Issues: Report bugs
- Documentation:
./docs/ - API Docs: http://yourapp.com/docs