The Vault
Copyansible/group_vars/all/vault.example.yml to vault.yml, fill it in, and encrypt it. Every top-level key becomes one Kubernetes Secret in the release namespace.
root-services
database
Five connection strings, one per database. In Scenario C the installer creates all five on the host it provisions; in Scenario B you point them at your own endpoint.
Scenario C also needs
vault_postgres_passwords, a separate top-level block naming one password per role:
The installer applies exactly these with
ALTER ROLE; it never generates its own. Re-running an install therefore re-asserts what your vault says rather than rotating anything behind your back, which is also what makes rotating a password a matter of editing the vault and re-running.aws-bucket
Object storage. In an on-premise installation this is MinIO running in your cluster, not AWS — the key names are historical.
control-plane
The rest
Social sign-in is optional and per-provider. A deployment that configures none simply does not offer social sign-in — the providers are registered only when configured, rather than half-registered with empty credentials.
Who owns the blockchain endpoint
Theblockchain values can be yours or ROOTKey’s, and it is a deliberate choice rather than a default:
Either way the wallet that signs stays inside your deployment: the RPC endpoint is where transactions are sent, not who signs them. Decide this during scoping, because it changes both the egress allowlist and who is responsible for the node’s availability.
Three top-level keys, outside rootkey_secret_data
Everything above lives under rootkey_secret_data and becomes a Kubernetes Secret. These do
not — they sit at the top level of the same file and are read by the installer itself. Miss
them and the install fails while pulling the first image.
rootkey-registry pull secret that every workload references.
vault_image_pull_registry ships with the right value and is the one of the three that
looks filled in and is not checked as carefully as the other two. Leave it alone — a
changed hostname produces a pull secret registered for a registry nobody pulls from, and
the resulting ImagePullBackOff names the image rather than the secret.openssl rand -base64 24. In this mode the
installer builds each connection string from the node address plus these, which is why the
database block above may keep its placeholders.
Licensing
The licence is issued by the Control Plane atrootkey_control_plane_url, and is fetched and
renewed over that link.
Offline licensing — in development. Licence delivery for deployments with no Control
Plane link is being built, with its own issuing and verification path.In the meantime there is nothing to configure for it in the vault.If your deployment is air-gapped, raise licensing with ROOTKey during scoping. It is a
conversation to have before the install rather than after, and we will tell you where the
offline path stands for your timeline.
The Helm Values File
Copyhelm/values-onprem.example.yaml. Everything below is per-deployment.
Images
Every one of the 22 workloads needs a realrepository and tag. The tag is the released commit SHA of that service, which ROOTKey publishes with each release.
<commit-sha>, registry.example.com and CHANGE_ME in any image field.
The file base URL
- The host must be the same as the platform frontend Ingress host, and the same as
rootkey_public_host. - The path must be
/files. - Do not include the bucket name. The MinIO Ingress prepends it from the vault.
Ingress
Resources
The CPU and memory limits shipped in the chart are sized for the multi-tenant cloud, where a tight per-pod limit stops one customer starving another. An on-premise box is the opposite: it is dedicated to one client, and the same limit becomes a brake with no beneficiary. Raise the limits in your values file. The example file ships with values already raised for a dedicated host and explains each one.The Inventory
ansible/inventory/hosts.ini — the target, plus variables that belong to the deployment rather than to Helm.
Values set here win over
ansible/group_vars/all/main.yml, which ships with rootkey_public_host empty. That file is shared and versioned; the inventory is yours.Deployment-Wide Variables
Set inansible/group_vars/all/main.yml, or overridden per deployment with -e KEY=VALUE.
→ Next: Verification

