Install with GitOps
Production installations are reconciled from the customer's GitOps repository. Pin an explicitly
published chart version in the release declaration and keep environment-specific settings in a
reviewed values file. Never track latest.
Use the production values example as the starting point:
global:
existingSecret: loadouthq-runtime
config:
appBaseUrl: https://loadouthq.example.com
apiPublicUrl: https://loadouthq.example.com
corsOrigin: https://loadouthq.example.com
sessionCookieSecure: true
platformAdminEmail: admin@example.com
registrationEnabled: false
orgCreationEnabled: false
localAuthEnabled: true
license:
existingSecret: loadouthq-license
secretKey: license.lhq-license
imagePullSecrets:
- name: loadouthq-registry
ingress:
enabled: true
className: nginx
host: loadouthq.example.com
tls:
enabled: true
secretName: loadouthq-tls
api:
replicaCount: 2
podDisruptionBudget:
enabled: true
web:
replicaCount: 2
podDisruptionBudget:
enabled: true
Store this as values.production.yaml beside the GitOps release declaration. Keep the chart version,
OCI source, namespace, reconciliation policy, and values-file reference in that declaration. The
exact resource depends on the customer's controller, such as Flux or Argo CD.
Argo CD with the OCI chart
Use Argo CD's native OCI source support. The Application must reference the complete chart artifact
with the oci:// scheme, set path: ., and pin the chart version without the Git tag's v
prefix. Do not use Helm CLI's parent push URL (.../charts) as the Application repository URL.
For the private GitLab registry, create a read-only deploy token with read_registry, then register
the complete artifact repository with Argo CD:
argocd repo add oci://registry.gitlab.com/asfadev/loadouthq/charts/loadouthq \
--type oci \
--name loadouthq \
--username "$LOADOUTHQ_REGISTRY_USERNAME" \
--password "$LOADOUTHQ_REGISTRY_PASSWORD"
Apply the Argo CD Application example after replacing the version, URLs, administrator email, routing settings, and Secret names. The important OCI fields are:
source:
repoURL: oci://registry.gitlab.com/asfadev/loadouthq/charts/loadouthq
targetRevision: X.Y.Z
path: .
LoadoutHQ publishes the chart with Helm's standard
application/vnd.cncf.helm.chart.content.v1.tar+gzip layer media type. The release pipeline pulls
the pushed artifact back through Helm OCI before recording the release, catching an unreadable or
misaddressed chart immediately.
Create runtime, registry, and optional license Secrets through the customer's external-secret or sealed-secret workflow as described in Configuration and Licensing. Do not commit Secret values, registry tokens, or license files to Git.
Ingress is enabled in the production example. For Gateway API, layer the HTTPRoute values example after the production values file. The referenced Gateway must permit Route attachment from the LoadoutHQ namespace; TLS is configured on its listener.
Commit the release declaration, values files, and secret references through the customer's normal review process. Let the GitOps controller reconcile the release, then verify the result:
kubectl -n loadouthq rollout status deployment/loadouthq-loadouthq-api
kubectl -n loadouthq rollout status deployment/loadouthq-loadouthq-web
curl -fsS https://loadouthq.example.com/health/ready
curl -fsS https://loadouthq.example.com/api/v1/license/status
Resource names include both release and chart names. Confirm them with
kubectl -n loadouthq get deploy when choosing another release name.
First administrator and OIDC
If no license was mounted, open /license, sign in or register with exactly
platformAdminEmail, then upload the vendor-issued file at /admin/license. Other bootstrap
registrations remain blocked in activation-only mode.
After activation:
- Confirm customer, license ID, source, and expiry on License.
- Open Identity providers from the user menu.
- Register the callback URL shown by LoadoutHQ with the identity provider.
- Test discovery before enabling the provider.
- Complete one OIDC sign-in in a private browser window.
- Disable local registration if it was temporarily enabled.
Verify core behavior
Check both health endpoints, then exercise organization isolation, folder permissions, upload and processing, download, token creation, and MCP access. Ready pods alone are not a successful handoff.