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
-
Set up Kubernetes (k3s recommended)
Install a Kubernetes distribution in order to orchestrate the ctrl deployment (k3s is our preferred distribution, see instructions).
-
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
-
Install Helm
Install helm to automate the configuration using CTRLs helm charts (see instructions).
-
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 thehelm upgrade --install
step below.NOTE(s):
- <ctrl-version> e.g.
1.0.0
- Tagged release versions of CTRL can be found here
- <ctrl-version> e.g.
-
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***
- <release-name> e.g.
-
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.
-
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.


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