Deployment Options
Option 1: Using the API Service
Best for: Most use cases, hosted solution
Get API Key
Contact support to obtain your API key for the hosted service.
Configure Environment
export COGNITION_API_KEY="your-api-key"
export COGNITION_API_URL="https://api.prepst.com"
Start Using
from cognition_engine import CognitionEngine
engine = CognitionEngine(api_key="your-api-key")
Option 2: Self-Hosted SDK
Best for: Full control, on-premise deployments
Option 3: Docker Deployment
Best for: Consistent environments, container orchestration
Docker Deployment
Basic Dockerfile
FROM python:3.11-slim
WORKDIR /app
# Install dependencies
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Copy application code
COPY . .
# Expose API port
EXPOSE 8000
# Run the application
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
Docker Compose
version: '3.8'
services:
cognition-engine:
build: .
ports:
- "8000:8000"
environment:
- SUPABASE_URL=${SUPABASE_URL}
- SUPABASE_KEY=${SUPABASE_KEY}
volumes:
- ./data:/app/data
restart: unless-stopped
Build and Run
# Build image
docker build -t cognition-engine .
# Run container
docker run -p 8000:8000 \
-e SUPABASE_URL="your-url" \
-e SUPABASE_KEY="your-key" \
cognition-engine
Kubernetes Deployment
Deployment Configuration
apiVersion: apps/v1
kind: Deployment
metadata:
name: cognition-engine
spec:
replicas: 3
selector:
matchLabels:
app: cognition-engine
template:
metadata:
labels:
app: cognition-engine
spec:
containers:
- name: cognition-engine
image: cognition-engine:latest
ports:
- containerPort: 8000
env:
- name: SUPABASE_URL
valueFrom:
secretKeyRef:
name: supabase-secrets
key: url
- name: SUPABASE_KEY
valueFrom:
secretKeyRef:
name: supabase-secrets
key: key
resources:
requests:
memory: "256Mi"
cpu: "250m"
limits:
memory: "512Mi"
cpu: "500m"
Service Configuration
apiVersion: v1
kind: Service
metadata:
name: cognition-engine-service
spec:
selector:
app: cognition-engine
ports:
- protocol: TCP
port: 80
targetPort: 8000
type: LoadBalancer
Environment Configuration
Required Variables
Optional Variables
Health Checks
Health Check Endpoint
@app.get("/health")
async def health_check():
return {
"status": "healthy",
"timestamp": datetime.now(),
"version": "1.0.0"
}
Kubernetes Health Checks
livenessProbe:
httpGet:
path: /health
port: 8000
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /health
port: 8000
initialDelaySeconds: 5
periodSeconds: 5
Monitoring
Metrics Collection
from prometheus_client import Counter, Histogram
# Track metrics
api_requests = Counter('api_requests_total', 'Total API requests')
response_time = Histogram('api_response_time', 'API response time')
@app.middleware("http")
async def track_metrics(request, call_next):
start_time = time.time()
response = await call_next(request)
api_requests.inc()
response_time.observe(time.time() - start_time)
return response
Logging Setup
import logging
import sys
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
handlers=[
logging.StreamHandler(sys.stdout),
logging.FileHandler('cognition_engine.log')
]
)
Scaling Considerations
Horizontal Scaling
- Run multiple instances behind a load balancer
- Use Redis for shared session state
- Ensure database connection pooling
Vertical Scaling
- Increase worker processes for CPU-bound tasks
- Add more memory for large data processing
- Use async processing for I/O-bound operations
Database Connection Pooling
from sqlalchemy.pool import QueuePool
engine = create_engine(
database_url,
poolclass=QueuePool,
pool_size=20,
max_overflow=40
)
Security
API Key Management
Never commit API keys to version control. Use environment variables or secret management services.
Rate Limiting
from slowapi import Limiter
from slowapi.util import get_remote_address
limiter = Limiter(key_func=get_remote_address)
@app.post("/track-answer")
@limiter.limit("100/minute")
async def track_answer(request: Request, ...):
...
Data Encryption
- Use HTTPS for all API communication
- Encrypt sensitive data at rest
- Implement authentication and authorization
Backup & Recovery
Database Backups
# Automated backup script
pg_dump $DATABASE_URL > backup_$(date +%Y%m%d).sql
Recovery Procedures
- Restore database from latest backup
- Verify data integrity
- Restart services
- Monitor logs for errors
Next Steps