Skip to main content

Deployment Guide

How Crella.ai services are deployed and how to deploy integrations.

Crella Infrastructure

Architecture Overview

flowchart TB
subgraph public [Public Internet]
Users[Users/Clients]
API[API Clients]
end

subgraph edge [Edge Layer]
CDN[Cloudflare CDN]
LB[Load Balancer]
end

subgraph app [Application Layer]
Web[Web Apps]
APIServer[API Servers]
Workers[Background Workers]
end

subgraph data [Data Layer]
DB[(PostgreSQL)]
Cache[(Redis)]
Queue[(Message Queue)]
end

Users --> CDN
API --> LB
CDN --> Web
LB --> APIServer
APIServer --> Workers
Workers --> DB
Workers --> Cache
Workers --> Queue

Current Stack

ComponentTechnology
Web ServerNginx
Process ManagerPM2
RuntimeNode.js 20.x
FrameworkNext.js
DatabasePostgreSQL / SQLite
CacheRedis
QueueRedis / BullMQ

Self-Hosting (Enterprise)

For enterprise customers, Crella can be deployed on-premises or in your cloud.

Requirements

ResourceMinimumRecommended
CPU4 cores8+ cores
RAM16 GB32+ GB
Storage100 GB SSD500+ GB SSD
Network100 Mbps1 Gbps

Docker Deployment

# docker-compose.yml
version: '3.8'

services:
crella-api:
image: crella/api:latest
ports:
- "3000:3000"
environment:
- DATABASE_URL=postgresql://...
- REDIS_URL=redis://redis:6379
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
- OPENAI_API_KEY=${OPENAI_API_KEY}
depends_on:
- postgres
- redis

crella-worker:
image: crella/worker:latest
environment:
- DATABASE_URL=postgresql://...
- REDIS_URL=redis://redis:6379
depends_on:
- postgres
- redis

postgres:
image: postgres:15
volumes:
- pgdata:/var/lib/postgresql/data
environment:
- POSTGRES_PASSWORD=${DB_PASSWORD}

redis:
image: redis:7-alpine
volumes:
- redisdata:/data

volumes:
pgdata:
redisdata:

Kubernetes Deployment

# crella-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: crella-api
spec:
replicas: 3
selector:
matchLabels:
app: crella-api
template:
metadata:
labels:
app: crella-api
spec:
containers:
- name: api
image: crella/api:latest
ports:
- containerPort: 3000
resources:
requests:
memory: "512Mi"
cpu: "250m"
limits:
memory: "2Gi"
cpu: "1000m"
env:
- name: DATABASE_URL
valueFrom:
secretKeyRef:
name: crella-secrets
key: database-url

Integrating with Your Deployment

Environment Variables

# Required
CRELLA_API_KEY=your_api_key

# Optional
CRELLA_BASE_URL=https://api.crella.ai # Default
CRELLA_TIMEOUT=30000 # 30 seconds
CRELLA_RETRIES=3

Health Checks

# Check API health
curl https://api.crella.ai/health

# Response
{
"status": "healthy",
"version": "1.0.0",
"agents": {
"online": 20,
"total": 20
}
}

Monitoring Integration

Prometheus Metrics

# prometheus.yml
scrape_configs:
- job_name: 'crella'
static_configs:
- targets: ['your-app:9090']
metrics_path: '/metrics'

Datadog

import { datadogRum } from '@datadog/browser-rum';

// Track Crella API calls
datadogRum.addAction('crella_api_call', {
agent: 'ALPHA001',
task_type: 'validation',
duration_ms: 180
});

CI/CD Integration

GitHub Actions

# .github/workflows/deploy.yml
name: Deploy

on:
push:
branches: [main]

jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3

- name: Test Crella Integration
env:
CRELLA_API_KEY: ${{ secrets.CRELLA_API_KEY }}
run: npm test

- name: Deploy
run: |
# Your deployment steps

Testing in CI

// Use sandbox API key in CI
const crella = new Crella({
apiKey: process.env.CRELLA_SANDBOX_KEY,
environment: 'sandbox'
});

describe('Crella Integration', () => {
it('should validate leads', async () => {
const result = await crella.tasks.create({
agent: 'ALPHA001',
type: 'validate',
payload: { name: 'Test', email: 'test@example.com' }
});
expect(result.status).toBe('completed');
});
});

Security

API Key Management

  • Store keys in secrets manager (AWS Secrets Manager, HashiCorp Vault)
  • Rotate keys regularly
  • Use separate keys for dev/staging/production

Network Security

  • HTTPS required for all API calls
  • IP whitelisting available for enterprise
  • Rate limiting enforced

Data Handling

  • Data encrypted in transit (TLS 1.3)
  • Data encrypted at rest
  • GDPR compliant processing

Support