Helm Chart Deployment
Each platform component ships its own Helm chart inside the repository authlance/deployment:
helm/auth— Auth Container.helm/licenseoperator— License Operator.helm/loop— Default Authlance Dashboard.helm/loop-scaffold— Template chart you can reuse after building a custom dashboard from the scaffold.
The charts use the same values structure (image, imageCredentials, ingress, serviceAccount, and duna.*), so once you configure one of them the others feel familiar.
Shared Conventions
-
Images and pull credentials
Setimage.repository,image.tag(ordigest), and optionallyimage.pullPolicy. WhenimageCredentials.enabledistrue, the chart renders aSecretnamed<release>-pull-secretusing the provided registry, username, password, and email. To reuse an existing pull secret, setimageCredentials.pullSecretand leaveenabledasfalse. -
Ingress
Every chart exposes HTTP by default.duna.urlandduna.basePathdetermine the host + path for the generatedIngressmanifest whileingress.tls[0].secretNamesupplies the TLS secret. Default annotations includeexternal-dns.alpha.kubernetes.io/hostnameand the ingress class isnginx, but you can override both. -
Configuration secrets
duna.configSecretmust point to aSecretthat contains the rendered configuration file:- Auth Container:
/app/config/config.yaml. - License Operator:
/app/config/config.yaml. - Dashboard:
/app/app-config.json.
Use the Compose renderer from
deployment/docker-composeto create these files and keep the values consistent across environments (see Docker Compose Deployment for the extraction workflow). - Auth Container:
Preparing Config and TLS Secrets
- Render the latest configs via
docker compose run --rm ory-templates. - Copy the files out of the volumes (e.g.,
docker run --rm -v duna_app_auth_config:/src alpine cat /src/config.yaml > auth-config.yaml). - Create Kubernetes secrets:
kubectl create secret generic auth-config --from-file=config.yaml=auth-config.yaml. - Ensure the TLS certificate referenced by
ingress.tls[0].secretNameexists before runninghelm upgrade --install.
These secrets are purely referenced by the charts; Helm does not generate them automatically.
Auth Container Chart
Path: helm/auth.
- Deploys a single
Deployment,Service, andIngressplus an optional backupCronJobcontrolled by thebackup.*values. - Mounts the secret referenced in
duna.configSecretat/app/configand setsCONFIG_FILE=/app/config/config.yaml. - Mounts whatever TLS secret you reference inside the pod so that nginx inside the Auth Container can terminate HTTPS if needed.
- Defines readiness/liveness probes against
${duna.basePath}/identity/health.
Example installation (using the working tree as your Helm chart source):
helm upgrade --install auth helm/auth \
--namespace auth --create-namespace \
-f helm/auth/values.yaml \
--set duna.configSecret=auth-config \
--set ingress.tls[0].secretName=auth-tls
Override image.tag, duna.url, the registry credentials, and any other environment-specific values through a separate YAML file or --set flags.
License Operator Chart
Path: helm/licenseoperator.
- Mirrors the same structure as the Auth chart (Deployment, Service, Ingress).
- Mounts
/app/config/config.yamlfromduna.configSecret. - Exposes readiness and liveness probes on
${duna.basePath}/healthz.
Install it into its own namespace to keep license workloads isolated:
helm upgrade --install license helm/licenseoperator \
--namespace license --create-namespace \
-f helm/licenseoperator/values.yaml \
--set duna.configSecret=license-config \
--set ingress.tls[0].secretName=license-tls
Dashboard Chart
Path: helm/loop-scaffold. Or your custom dashboard chart based on the scaffold.
- Publishes both the backend path (
duna.basePath) and the front-end base path (duna.frontEndBasePath) through a single ingress so redirects and static assets work no matter which entry point the browser starts with. - Mounts
app-config.jsonfrom the secret referenced induna.configSecret. - Supports shipping a favicon through
favicon.enabledandfavicon.filePath, which renders a ConfigMap consumed by the deployment.
For customers implementing their own dashboard, copy the scaffold, build an image, and point the release to that image/tag. The helm/loop-scaffold chart is already wired for this scenario: it shares the same values interface but adds an optional robotstxt ConfigMap so you can ship custom crawler instructions alongside the favicon.
Example install using the scaffold chart:
helm upgrade --install dashboard helm/loop-scaffold \
--namespace dashboard --create-namespace \
-f my-dashboard-values.yaml \
--set image.repository=registry.digitalocean.com/example/dashboard \
--set duna.configSecret=dashboard-config \
--set ingress.tls[0].secretName=dashboard-tls
my-dashboard-values.yaml should at least provide duna.url, duna.basePath, duna.frontEndBasePath, and the registry credentials for your custom image.
Putting It Together
- Render configs and create the secrets for each component.
- Install the Auth Container chart and confirm the
/identity/healthendpoint reports ready. - Install the License Operator chart and verify
/healthz. - Install your dashboard chart (either the default
loopchart or the scaffold chart once you publish a custom image).
Each release only depends on existing secrets and TLS assets, so you can manage lifecycle upgrades through GitOps tooling or helm upgrade commands. Keep the Compose templates in sync with production values to avoid drift between local development and Kubernetes.