LogoCTRL

Deploying CTRL

Overview to get a production instance of CTRL up and running.

Purpose/Aim

This guide aims to provide a clear step-by-step process for deployment the CTRL platform using Kubernetes and Helm. Whether you're deploying CTRL for production use or for demo/testing purposes, this guide will walk you through the essential setup steps, configuration, and validation processes.

Tools

CTRL's deployment relies on modern DevOps tools for infrastructure automation and application orchestration:

  • helm - package manager for Kubernetes that automates the creation, packaging, and deployment of applications. It allows you to reuse charts (packages of YAML templates) and provides an easy way to manage configurable deployments through values.yaml.
  • kubernetes - open-source container orchestration system used to automate the deployment, scaling, and management of containerised applications. It uses declarative configuration via YAML files and CLI tools (kubectl) to manage services and infrastructure.

Together, these tools form a simple yet robust pipeline to deploy CTRL with flexibility across environments (demo, staging, production).

Process

  1. Set up Kubernetes (k3s recommended)

    Install a Kubernetes distribution in order to orchestrate the ctrl deployment (k3s is our preferred distribution, see instructions).

  2. Prepare Configuration (values.yaml)

    Create a values.yaml file to define deployment-specific configuration:

    *e.g.
    values.yaml*
    -----------
    demoMode:
      enabled: true | false # Demo seed data refreshed every night.
    
    ingress:
      hosts:
        userClient:
          hostname: "[your.ctrl.org.au](http://your.ctrl.org.au/)" # Your ctrl site hostname
        adminClient:
          hostname: "admin.[your.ctrl.org.au](http://your.ctrl.org.au/)" # Your ctrl admin site hostname
    
    cert-manager:
      enabled: true | false # Use for TLS (https) encryption on in flight data.
    
    letsencryptEmail: "email@some.institute.org.au" # Must have this configured if using cert-manager
    
    userClient:
      image:
        tag: "latest" # Specific tagged version of CTRL userClient
    
    adminClient:
      image:
        tag: "latest" # Specific tagged version of CTRL adminClient
    
    backend:
      image:
        tag: "latest" # Specific tagged version of CTRL backend

    NOTE(s):

    • Make sure your domain names (e.g. your.ctrl.org.au) are pointed to your server or VM's public IP via DNS.
    • TLS support requires cert-manager and proper DNS configuration
    • Tagged release versions of CTRL can be found here
  3. Install Helm

    Install helm to automate the configuration using CTRLs helm charts (see instructions).

  4. Pull the CTRL Helm Charts (optional)

    helm pull oci://australia-southeast1-docker.pkg.dev/dsp-registry-410602/garvan-public/ctrl --version <ctrl-version>

    Which will download a file like ctrl-<ctrl-version>.tgz which can be used for the helm upgrade --install step below.

    NOTE(s):

    • <ctrl-version> e.g. 1.0.0
    • Tagged release versions of CTRL can be found here
  5. Deploy CTRL w/ Helm

    # Using public CTRL helm charts
    helm upgrade --install <release-name> oci://australia-southeast1-docker.pkg.dev/dsp-registry-410602/garvan-public/ctrl:<ctrl-version> -f <path/to/values.yaml> --kubeconfig /etc/rancher/k3s/k3s.yaml
    
    # ---OR---
    # Optionally, using locally pulled helm charts from step 4. 
    # This can be used if you want to inspect the helm charts directly before 
    # installing CTRL by extracting the tar (e.g. tar -zxvf ctrl-1.0.0.tgz).
    helm upgrade --install <release-name> <path/to/helm/charts> -f <path/to/values.yaml> --kubeconfig /etc/rancher/k3s/k3s.yaml

    NOTE(s):

    • <release-name> e.g. garvan-ctrl
    • <ctrl-version> e.g. 1.0.0
    • <path/to/values.yaml> e.g. ~/values.yaml
    • <path/to/.helm/charts> e.g. ~/ctrl-1.0.0.tgz
    • /etc/rancher/k3s/k3s.yaml - This path by default. Replace with your actual kubeconfig path if different
    • Tagged release versions of CTRL can be found here***
  6. Verify Deployment

    use kubectl to verify that the deployment was successful:

    # Check running pods
    kubectl get pods
    **
    # Check logs for specific pods
    kubectl logs <pod-name>
    
    # Describe deployments
    kubectl describe deployment <deployment>
    
    # List secrets
    kubectl get secrets

    ✅ All pods should reach the Running state with no crash loops or errors.

  7. Access CTRL in Browser

    Navigate to the domain(s) you configured (e.g., https://your.ctrl.org.au and https://admin.your.ctrl.org.au) to confirm that the CTRL user portal and admin portal are running.

User Portal
Participant Portal Login
Admin Portal
Admin Portal Login

✅ You should see the CTRL login screens for both user and admin portals.