Self-Hosting

Rivano can be self-hosted for organizations that require data residency, air-gapped environments, or full infrastructure control. The self-hosted version includes all proxy, governance, and observability features.

Requirements

ComponentMinimumRecommended
CPU2 cores4 cores
Memory4 GB8 GB
Disk20 GB50 GB SSD
DatabasePostgreSQL 15+PostgreSQL 16
RuntimeDocker 24+ or K8s 1.28+β€”

Quick Start with Docker

Pull and run the Rivano container:

docker run -d \
  --name rivano \
  -p 8080:8080 \
  -e DATABASE_URL="postgresql://user:pass@host:5432/rivano" \
  -e RIVANO_LICENSE_KEY="your-license-key" \
  -e ENCRYPTION_KEY="$(openssl rand -hex 32)" \
  -e JWT_SECRET="$(openssl rand -hex 32)" \
  ghcr.io/rivano-ai/rivano:latest

The server starts on port 8080. Verify it’s running:

curl http://localhost:8080/health
# {"status":"healthy","version":"1.2.0","database":"connected"}

Docker Compose

For a complete setup with PostgreSQL included:

version: "3.9"
services:
  rivano:
    image: ghcr.io/rivano-ai/rivano:latest
    ports:
      - "8080:8080"
    environment:
      DATABASE_URL: postgresql://rivano:rivano@postgres:5432/rivano
      RIVANO_LICENSE_KEY: ${RIVANO_LICENSE_KEY}
      ENCRYPTION_KEY: ${ENCRYPTION_KEY}
      JWT_SECRET: ${JWT_SECRET}
    depends_on:
      postgres:
        condition: service_healthy

  postgres:
    image: postgres:16-alpine
    environment:
      POSTGRES_USER: rivano
      POSTGRES_PASSWORD: rivano
      POSTGRES_DB: rivano
    volumes:
      - pgdata:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U rivano"]
      interval: 5s
      timeout: 3s
      retries: 5

volumes:
  pgdata:

Kubernetes (Helm)

Install via Helm for production Kubernetes deployments:

helm repo add rivano https://charts.rivano.ai
helm repo update

helm install rivano rivano/rivano \
  --namespace rivano \
  --create-namespace \
  --set database.url="postgresql://user:pass@host:5432/rivano" \
  --set licenseKey="your-license-key" \
  --set encryptionKey="your-encryption-key" \
  --set replicas=3

Helm Values

Key configuration values:

# values.yaml
replicas: 3
image:
  repository: ghcr.io/rivano-ai/rivano
  tag: latest

resources:
  requests:
    cpu: "500m"
    memory: "1Gi"
  limits:
    cpu: "2"
    memory: "4Gi"

database:
  url: "" # required
  maxConnections: 20
  sslMode: require

ingress:
  enabled: true
  className: nginx
  hosts:
    - host: rivano.internal.example.com
      paths:
        - path: /
          pathType: Prefix
  tls:
    - secretName: rivano-tls
      hosts:
        - rivano.internal.example.com

autoscaling:
  enabled: true
  minReplicas: 3
  maxReplicas: 10
  targetCPUUtilization: 70

Environment Variables

VariableRequiredDescription
DATABASE_URLYesPostgreSQL connection string
RIVANO_LICENSE_KEYYesLicense key from your Enterprise plan
ENCRYPTION_KEYYes32-byte hex key for encrypting provider keys at rest
JWT_SECRETYesSecret for signing session tokens
PORTNoServer port (default: 8080)
LOG_LEVELNodebug, info, warn, error (default: info)
CORS_ORIGINSNoComma-separated allowed origins
RATE_LIMIT_ENABLEDNoEnable rate limiting (default: true)
TELEMETRY_ENABLEDNoSend anonymous usage stats (default: true, set false to disable)

Database Migrations

Migrations run automatically on startup. To run them manually:

docker run --rm \
  -e DATABASE_URL="postgresql://user:pass@host:5432/rivano" \
  ghcr.io/rivano-ai/rivano:latest \
  migrate

Upgrading

  1. Pull the latest image: docker pull ghcr.io/rivano-ai/rivano:latest
  2. Stop the running container
  3. Start with the new image β€” migrations apply automatically
  4. Verify with the /health endpoint

For Helm: helm upgrade rivano rivano/rivano --reuse-values

Enterprise Support

Self-hosting requires an Enterprise plan. This includes:

  • Dedicated support channel with 4-hour SLA
  • Custom SSO/SAML integration assistance
  • Architecture review for high-availability deployments
  • Priority access to new features

Contact sales to get started with Enterprise.