Overview
ArgoCD renders Helm templates client-side before applying them to the cluster. Helm’slookup function — which the chart uses to persist auto-generated secrets across upgrades — always returns an empty result in client-side rendering. This means every ArgoCD sync generates new random values for auto-generated secrets, breaking Rails database encryption and session continuity.
Affected Secrets
| Secret Key | Purpose | Generation |
|---|---|---|
SECRET_KEY_BASE | Rails session signing and encryption | randAlphaNum 64 |
ENCRYPTION_KEY | Application-level data encryption | Hex (64 chars via sha256sum) |
ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY | Rails Active Record encryption | randAlphaNum 64 |
ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY | Rails deterministic encryption | randAlphaNum 64 |
ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT | Rails encryption key derivation | randAlphaNum 64 |
REGISTRY_HTTP_SECRET | Internal container registry auth | randAlphaNum 32 |
CREWAI_PLUS_INTERNAL_API_KEY | Service-to-service authentication | randAlphaNum 64 |
Recommended: Pre-Set All Secrets
Generate stable values and set them explicitly in your Helm values file. This bypasseslookup and randAlphaNum entirely.
Generate Secret Values
The easiest approach is to let the chart generate the values for you. Runhelm template with your values file — since it renders client-side (just like ArgoCD), the chart’s auto-generation logic produces random secrets that you can extract and pin:
<chart> with the path to the chart (e.g., ./helm or an OCI reference). This requires yq — install with brew install yq, snap install yq, or see the yq docs.
This prints the auto-generated values in plain text. Copy them into your values file:
Configure in Values
Alternative: generate with openssl
Alternative: generate with openssl
If you prefer to generate values independently of the chart:
Alternative: ArgoCD ignoreDifferences
You can configure ArgoCD to ignore changes to the Secret resource so that auto-generated values from the initial install are preserved:
Self-Signed TLS Certificates
The chart can auto-generate self-signed TLS certificates (web.tls.autoGenerate: true). These also use lookup for persistence and will regenerate on every ArgoCD sync.
If you use application-level TLS with ArgoCD, provide your own certificates:
web.tls.autoGenerate.