Skip to main content
Application Deployment - Deploy Relvy to your Kubernetes cluster using Helm charts with automated installation or manual configuration.

Overview

This guide walks you through deploying Relvy to your Kubernetes cluster using Helm. We provide two deployment methods: an interactive installer script for quick setup, or manual Helm installation for more control.

Deployment Components

Helm Repository

Add Relvy Helm charts repository

Configuration

Configure database, domain, and credentials

Deployment

Install Relvy using Helm charts

Verification

Verify pods, services, and ingress

Prerequisites

Before deploying Relvy, ensure you have:
  • Kubernetes Cluster - Running and accessible via kubectl
  • Database - PostgreSQL endpoint and credentials
  • SSL Certificate - ACM certificate ARN or equivalent
  • Docker Credentials - Access token for Relvy Docker registry
  • Domain Name - Chosen subdomain for Relvy application
  • License Key - Required to login and use Relvy (contact [email protected])
Docker Registry Access - Contact Relvy support to obtain Docker registry credentials before proceeding.

Required Information

Gather the following information before starting deployment:
InformationExampleSource
Database Endpointrelvy-app-db.xxxxx.us-east-1.rds.amazonaws.comRDS/Cloud SQL console
Database NamerelvydbDatabase configuration
Database UserpostgresDatabase configuration
Database Passwordyour-secure-passwordSet during database creation
Domain Namerelvy.yourdomain.comYour chosen subdomain
Certificate ARN (AWS)arn:aws:acm:us-east-1:xxxxx:certificate/xxxxxACM console
Docker Passwordyour-docker-tokenProvided by Relvy
License Keyyour-license-keyProvided by Relvy ([email protected])
The interactive installer guides you through the deployment process with prompts for all required information.

Step 1: Clone Helm Repository

# Clone the Relvy Helm charts repository
git clone https://github.com/Relvy-AI/relvy-helm-charts.git
cd relvy-helm-charts

Step 2: Run Interactive Installer

# Make installer executable
chmod +x install.sh

# Run the installer
./install.sh
The installer will prompt you for:
  1. Database endpoint and credentials
  2. Domain name
  3. Docker registry password
  4. Custom CA certificates (optional - for organizations using internal Certificate Authorities)
  5. SSL certificate ARN (for AWS)

Step 3: Monitor Installation

The installer will:
  • Add the Relvy Helm repository
  • Create Kubernetes secrets for database and Docker registry
  • Install Relvy Helm chart with your configuration
  • Display deployment status
# Watch pods come up
kubectl get pods -w

# Check deployment status
kubectl get deployments
Installation Time - Initial deployment takes 3-5 minutes. Database migrations run automatically on first deployment.

Option 2: Manual Helm Installation

For more control over the deployment, you can manually install using Helm.

Step 1: Add Helm Repository

# Add Relvy Helm repository
helm repo add relvy https://relvy-ai.github.io/relvy-helm-charts
helm repo update

Step 2: Create Kubernetes Secrets

Create the required secrets for database, Flask, and Docker registry access:

2.1 Database Secret

# Create database secret
kubectl create secret generic relvy-db-secret \
  --from-literal=password=your-database-password \
  --from-literal=username=postgres

2.2 Flask Secret

# Generate and create Flask secret key
kubectl create secret generic relvy-flask-secret \
  --from-literal=key=$(openssl rand -base64 32)

2.3 License Key Secret (Required for Product Usage)

# Create license key secret
kubectl create secret generic relvy-license-secret \
  --from-literal=key=your-license-key-from-relvy
License Key Required - Replace your-license-key-from-relvy with the actual license key provided by Relvy support. Without a valid license key, the application will deploy successfully but users will not be able to login.

2.4 Docker Registry Secret

# Create Docker registry secret
kubectl create secret docker-registry relvy-registry-secret \
  --docker-server=docker.io \
  --docker-username=relvyuser \
  --docker-password=your-docker-token

2.5 Custom SSL Certificates Secret (Optional)

If your organization uses internal Certificate Authorities (CA) for SSL connections to internal services (databases, APIs, etc.), you can provide a custom CA bundle:
# Create custom SSL certificates secret
kubectl create secret generic relvy-custom-certs \
  --from-file=ca-bundle.crt=/path/to/your-ca-bundle.crt
Certificate Format - The CA bundle must be in PEM format. It can contain multiple certificates concatenated together. This will be merged with system certificates at runtime.

Step 3: Create Values File

Create a values.yaml file with your configuration. This is the exact format generated by install.sh:
# Database Configuration
database:
  endpoint: "relvy-app-db.xxxxx.us-east-1.rds.amazonaws.com"
  port: 5432
  name: "relvydb"

# Application Configuration
config:
  serverHostname: "https://relvy.yourdomain.com"

# Web application configuration
web:
  ingress:
    hosts:
      - host: relvy.yourdomain.com
        paths:
          - path: /
            pathType: Prefix
    tls:
      - hosts:
          - relvy.yourdomain.com

# Custom SSL Certificates (optional)
customCerts:
  enabled: false  # Set to true if using custom CA certificates
  secretName: "relvy-custom-certs"

# AWS Service Account (optional - for IRSA authentication)
# See: /self_hosting/aws-cloudwatch for complete setup guide
serviceAccount:
  create: false  # Set to true to enable IRSA for AWS CloudWatch
  name: "relvy-serviceaccount"
  annotations: {}
    # eks.amazonaws.com/role-arn: "arn:aws:iam::ACCOUNT-ID:role/RelvyIRSARole"

Optional: Custom Resources

If you need to customize resource limits or replica counts:
# Database Configuration
database:
  endpoint: "relvy-app-db.xxxxx.us-east-1.rds.amazonaws.com"
  port: 5432
  name: "relvydb"

# Application Configuration
config:
  serverHostname: "https://relvy.yourdomain.com"

# Web application configuration
web:
  replicas: 2
  resources:
    requests:
      memory: "1Gi"
      cpu: "500m"
    limits:
      memory: "2Gi"
      cpu: "1000m"
  ingress:
    hosts:
      - host: relvy.yourdomain.com
        paths:
          - path: /
            pathType: Prefix
    tls:
      - hosts:
          - relvy.yourdomain.com

# Celery worker configuration
celery:
  replicas: 2
  resources:
    requests:
      memory: "2Gi"
      cpu: "1000m"
    limits:
      memory: "4Gi"
      cpu: "2000m"

# Custom SSL Certificates (optional)
customCerts:
  enabled: false  # Set to true if using custom CA certificates
  secretName: "relvy-custom-certs"

Step 4: Install Relvy

# Install Relvy with your values file (uses default namespace)
helm install relvy relvy/relvy \
  --values values.yaml \
  --namespace default

Verify Deployment

Step 1: Check Pods

# Check all pods are running
kubectl get pods

# You should see:
# relvy-web-xxxxx          1/1     Running
# relvy-celery-xxxxx       1/1     Running
# relvy-celery-beat-xxxxx  1/1     Running
# relvy-redis-xxxxx        1/1     Running

# Check logs if any pod is not running
kubectl logs relvy-web-xxxxx

Step 2: Check Services

# List services
kubectl get services

# You should see:
# relvy-web        ClusterIP   10.x.x.x    <none>        80/TCP
# relvy-redis      ClusterIP   10.x.x.x    <none>        6379/TCP

Step 3: Check Ingress

# Get ingress details
kubectl get ingress relvy-ingress

# Get ingress load balancer address
kubectl get ingress relvy-ingress \
  -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'

# For GKE (IP address)
kubectl get ingress relvy-ingress \
  -o jsonpath='{.status.loadBalancer.ingress[0].ip}'
Save Load Balancer Address - You’ll need this to configure your domain DNS record.

Configure DNS

Now that the Ingress load balancer is created, configure your domain DNS:

Step 1: Get Load Balancer Address

# For AWS
LB_DNS=$(kubectl get ingress relvy-ingress -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
echo "Add CNAME record: $LB_DNS"

# For GKE
LB_IP=$(kubectl get ingress relvy-ingress -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
echo "Add A record: $LB_IP"

Step 2: Add DNS Record

In your DNS provider (GoDaddy, Route53, etc.), add: For AWS (CNAME):
TypeNameValueTTL
CNAMErelvyk8s-default-relvying-xxxxx.elb.amazonaws.com600
For GKE (A Record):
TypeNameValueTTL
Arelvy35.201.x.x600

Step 3: Wait for DNS Propagation

# Check DNS resolution
nslookup relvy.yourdomain.com

# Should return your load balancer address

Access Relvy Application

Access Web Interface

  1. Open your browser
  2. Navigate to https://relvy.yourdomain.com
  3. You should see the Relvy landing page
Deployment Complete! - Relvy is now running on your Kubernetes cluster. You can start configuring data sources and integrations.

Troubleshooting

Logs

Check logs to debug issues:
# Web server logs
kubectl logs -f deployment/relvy-web -c web

# Celery worker logs
kubectl logs -f deployment/relvy-celery -c celery

# Celery beat logs
kubectl logs -f deployment/relvy-celery-beat -c celery-beat

# All pods with Relvy label
kubectl logs -f -l app.kubernetes.io/name=relvy

Upgrading

To upgrade Relvy to a new version:
# Update Helm repository
helm repo update

# Upgrade Relvy to a new version
helm upgrade relvy relvy/relvy --version=0.4.0 -f my-values.yaml --timeout 1h

# Check upgrade status
kubectl rollout status deployment/relvy-web
kubectl rollout status deployment/relvy-celery

Updating Custom SSL Certificates

If you need to update custom CA certificates after installation:

Step 1: Update the Secret

# Update the custom certs secret
kubectl create secret generic relvy-custom-certs \
  --from-file=ca-bundle.crt=/path/to/new-ca-bundle.crt \
  --dry-run=client -o yaml | kubectl apply -f -

Step 2: Restart Deployments

After updating the secret, restart the deployments to pick up the new certificates:
# Restart all Relvy deployments
kubectl rollout restart deployment/relvy-web
kubectl rollout restart deployment/relvy-celery
kubectl rollout restart deployment/relvy-celery-beat

# Wait for deployments to be ready
kubectl rollout status deployment/relvy-web
kubectl rollout status deployment/relvy-celery
kubectl rollout status deployment/relvy-celery-beat

Step 3: Verify

Check init container logs to verify certificates were merged successfully:
# Check init container logs
kubectl logs -l app.kubernetes.io/name=relvy -c merge-ca-certs --tail=20
Troubleshooting SSL Errors - If you encounter SSL verification errors after updating certificates, verify the CA bundle is in valid PEM format and contains all necessary intermediate certificates. Please contact us at [email protected] for any assistance.

Uninstalling

To uninstall Relvy from your cluster:
# Uninstall Relvy
helm uninstall relvy --namespace default

# Optionally delete secrets
kubectl delete secret relvy-db-secret --namespace default
kubectl delete secret relvy-flask-secret --namespace default
kubectl delete secret relvy-registry-secret --namespace default
Note - Uninstalling Relvy does not delete your database or DNS records. You’ll need to remove those separately if desired.

Next Steps

Your Relvy application is deployed and running! Next steps:
  1. Configure Integrations - Set up Slack and GitHub integrations
  2. Configure AWS CloudWatch (Optional) - Set up IAM role-based authentication for secure CloudWatch access
  3. Connect Data Sources - Add your observability platforms
  4. Set Up SSO (Optional) - Configure Okta or other SSO providers
Need Help? - Contact Relvy support at [email protected] or join our community Slack for assistance.