Skip to main content
Decision Control ships as an OCI container image built on Eclipse Temurin 17. The image bundles the Spring Boot backend and the embedded single-page frontend; no separate web server is required.

Runtime requirements

Environment variables

Server

Database

See Database Configuration. The container reads SPRING_DATASOURCE_URL, SPRING_DATASOURCE_USERNAME, SPRING_DATASOURCE_PASSWORD, and HIBERNATE_DDL_AUTO.

OIDC / Security

See Identity & Access Management for the full provider walkthrough. The container reads the ALETYX_OIDC_* family:

Logging

Logging defaults to INFO at the root. Raise specific loggers via standard Spring Boot LOGGING_LEVEL_* environment variables when debugging a code path; revert before normal operation.

Secrets handling

The image accepts secret values via plain environment variables. Never embed secrets in the image, in command-line arguments, or in version-controlled configuration. Use the secret-management primitive of your platform:
  • Container / Podman: pass secrets via --env-file <file> with restrictive permissions (chmod 600), or Container/Podman secrets.
  • Kubernetes: use a Secret referenced via envFrom or valueFrom.secretKeyRef; enable encryption at rest. If your platform integrates an external secret store, surface the values as environment variables — the container only consumes environment variables.
  • OpenShift: use a Secret and inherit the tenant’s encryption-at-rest policy.
Sensitive variables: SPRING_DATASOURCE_PASSWORD, ALETYX_OIDC_ENTRA_CLIENT_SECRET (or ALETYX_OIDC_KEYCLOAK_CLIENT_SECRET), ALETYX_OIDC_INTERNAL_SECRET.

Container registry authentication

The Decision Control image is distributed from a private container registry. Credentials are issued per organization; the username is typically your account email and the password is an API token created in your account settings. On Container / Podman, log in once on the host that pulls the image:
On Kubernetes, create a docker-registry Secret in the target namespace and reference it from the imagePullSecrets of the Decision Control Deployment (see Kubernetes & OpenShift Deployment):
Rotate the token on the same cadence as your other infrastructure credentials. Recreating the Secret picks up the new token on the next image pull — running pods continue with their already-pulled image.

Example — container run (evaluation, no auth)

Example — production-shaped (Entra, env-file)

Health and verification

The container exposes a single unauthenticated health endpoint, targeted by both Kubernetes probes:
A healthy response is HTTP 200 with body:
If the backend cannot reach the database, the overall status becomes DOWN and the endpoint returns a non-200 status. The OIDC bootstrap endpoint:
returns the frontend’s expected OIDC client configuration — useful for verifying the OIDC variables were read correctly without exercising a full login flow.

Operational considerations

  • The image runs as a non-root user.
  • The frontend reads runtime configuration from GET /env.json, which the backend renders from environment variables at startup. After changing environment variables, restart the container so the rendered /env.json reflects the new values. If a CDN sits in front, ensure /env.json is not cached (its path contains .json, which can match *.js caching rules).