Application settings in sitesConfig
sitesConfig sets the application configuration written to the sites-config ConfigMap. Chart values are in Chart values; identity, notification, and analytics service settings are in External service settings; the content mirror is in Migration settings.
Application settings in sitesConfig
The chart writes sitesConfig to the sites-config ConfigMap. The tables in
this section describe every setting in the application configuration schema.
Defaults in these tables are application defaults, not necessarily examples
in the chart values. An omitted field uses its listed default.
The chart sets namespace from the Helm release namespace. It sets
site.version from images.tag and all of routing from the top-level chart
routing values. Do not set those fields under sitesConfig. The chart also
refuses to render a sitesConfig key that is not a setting in the tables
below; see Chart values. The application
defaults to TLS certificate verification. When sitesConfig.dev is true, the
application disables verification for Site API, Splunk, and OpenSearch
connections.
Use YAML lists in values files. Environment variables use the setting names
with uppercase section and field names, separated with underscores, for
example SESSION_SECRET_KEY or INTEGRATIONS_ANALYTICS. CSV list decoding
applies only to fields that support it. ldap.search_base and
directory.default_users need JSON when set through environment variables.
Integration environment variable values are JSON objects. Use YAML values
for normal Helm configuration.
Root settings
| Setting |
Default |
Explanation |
debug |
false |
Enables global debug output. Keep this off in production because logs can contain more operational detail. |
dev |
false |
Enables global development behaviour, including unredacted logs. It disables TLS checks for Site API, Splunk, and OpenSearch connections. Do not enable it in production. |
namespace |
Required; set by chart |
Namespace where the platform runs. The chart provides this value; do not override it under sitesConfig. |
trusted_ips |
[] |
IP addresses or CIDR ranges allowed to access protected health and metrics endpoints. Add only monitoring and operator networks that need this access. |
trusted_domains |
[] |
Browser domains trusted for CORS and Content Security Policy (CSP) frame ancestors. Use lowercase DNS names without scheme, port, path, or wildcard. Each entry also trusts all subdomains. An empty list does not add any domain trust. |
hub
| Setting |
Default |
Explanation |
hub.version |
develop |
Hub application version label. The chart image tag selects the deployed Hub image; normally keep this field at its default. |
hub.administrator_users |
[] |
User names with platform administrator privileges. Keep this list limited to the operators who need full platform control. |
hub.administrator_groups |
[] |
Identity-provider groups with platform administrator privileges. Prefer a managed admin group over a long user list. |
hub.staff_groups |
[] |
Groups with platform staff privileges. Staff can use administrative features that are not available to ordinary site users. |
hub.staff_users |
[] |
User names with platform staff privileges. |
hub.master_token |
Empty; use HUB_MASTER_TOKEN Secret |
Administrator token for Hub access. Do not store the token in a values file. Supply the HUB_MASTER_TOKEN key in sites-secrets. When empty, the Hub API rejects every bearer master token and the Hub logs a warning at startup; generate one from the Hub settings page (Platform administration token). |
hub.pagination_max_items |
15 |
Maximum number of items shown on each paginated Hub page. Increase it only if users need larger pages and the Hub can support the added response size. |
hub.threading_max_workers |
5 |
Maximum worker threads for Hub background tasks. Set with available CPU and expected task load in mind. |
hub.health_timeout_seconds |
5.0 |
Maximum time in seconds for a health check. A slower check is reported as timed out. |
hub.health_timeout_status |
WARN |
Status used when a health check times out: OK, WARN, or ERROR. ERROR marks overall health as unhealthy; WARN reports the delay without failing overall health. |
hub.labels |
See label settings below |
Text labels for Hub titles, menus, pages, and actions. |
hub.labels
| Setting |
Default |
Explanation |
hub.labels.title |
Sites Hub |
Platform title shown in the Hub. |
hub.labels.list_my |
My Sites |
Label for the menu item that lists the user's sites. |
hub.labels.list_all |
All Sites |
Label for the menu item that lists all sites. |
hub.labels.administration |
Administration |
Label for the administration menu item. |
hub.labels.about |
About |
Label for the About menu item. |
hub.labels.create |
Create Site |
Label for the site creation menu item. |
hub.labels.view |
Site View |
Label for site view pages. |
hub.labels.details |
Site Details |
Label for site details pages. |
hub.labels.sharing |
Site Sharing |
Label for site sharing pages. |
hub.labels.settings |
Site Settings |
Label for site settings pages. |
hub.labels.upgrade_all |
Upgrade All Sites |
Label for the action that upgrades all sites. |
hub.labels.force_upgrade_all |
Force Upgrade All Sites |
Label for the action that updates all site resources even when application versions are unchanged. |
hub.labels.restart_all |
Restart All Sites |
Label for the action that restarts all sites. |
branding
| Setting |
Default |
Explanation |
branding.organisation_name |
Example Organisation |
Organisation name shown in page titles and text. It must not be empty, contain control characters or braces, or exceed 100 characters. |
branding.logo |
Packaged Sites logo |
Inline SVG markup or a data:image/svg+xml;base64, URL. Empty uses the packaged logo. SVG is checked and must not include scripts, entities, doctypes, event attributes, or external references. Maximum decoded size is 256 KiB. Use --set-file to load a file. |
branding.favicon |
Packaged Sites favicon |
Inline SVG markup or a base64 SVG data URL. The same validation rules and size limit as branding.logo apply. Empty uses the packaged favicon. |
branding.documentation_url |
https://example.org/docs |
HTTP(S) or root-relative link to user documentation. Empty hides the link. |
branding.support_url |
https://example.org/support |
HTTP(S) or root-relative link to user support. Empty hides the link. |
branding.privacy_url |
https://example.org/privacy |
HTTP(S) or root-relative link to the privacy notice. Empty hides the link. |
branding.terms_url |
https://example.org/terms |
HTTP(S) or root-relative link to terms of use. Empty hides the link. |
branding.policy_url |
Empty |
HTTP(S) or root-relative link to web governance policy. Empty hides the link. |
All branding URLs reject credentials, whitespace, control characters, and
protocols other than HTTP or HTTPS. Branding is shared by the Hub and site
interfaces. Existing sites use updated branding after they are updated.
site
These are platform-wide defaults and limits for Site resources. Some values
apply to newly created sites; they do not necessarily change existing Site
resources.
| Setting |
Default |
Explanation |
site.version |
Set from images.tag |
Version of the Site applications. The chart sets it; use a tested, lockstep image release instead of overriding it. |
site.replicas |
1 |
Default number of replicas for each site. More than one replica needs compatible storage and session handling. In Gateway mode, configure session affinity. |
site.default_view_groups |
[] |
Groups that get default view access to new sites. With the empty default, a new private site gets no default viewer group. Set this to the correct least-privilege group for your organisation. |
site.default_view_users |
[] |
Users that get default view access to new sites. |
site.token_default_duration |
90 days |
Initial HTTP Access Token duration offered by the web interface. It does not set a maximum lifetime. |
site.signed_url_default_duration |
7 days |
Initial Signed URL duration offered by the web interface. |
site.session_url_default_duration |
7 days |
Initial Session URL duration offered by the web interface. |
site.storage_max_quota |
500 GB |
Maximum storage quota that can be assigned to one site. The chart's namespace quota is separate. |
site.verify_tls |
true |
Checks TLS certificates on Site API requests. The application sets it to false when dev is true. Keep this enabled outside isolated local development. |
site.allow_public_custom_application |
false |
Allows a custom application image on a public site. When false, a custom application image is only allowed on a private site. A new image, or a change from private to public, is rejected. The next change to an existing public site with an image makes the site private. If the site has no access users or groups, it gets site.default_view_users and site.default_view_groups. |
site.custom_application_allowed_registries |
[] |
Registries allowed for custom application images. This list is the only control over where custom application images come from; kubernetes.private_registry does not restrict them. Each entry is a host or a host/path prefix, for example registry.example.org/team. An image must start with an entry followed by /. An empty list allows any registry. The image must name its registry in any case: a short Docker Hub name such as redis:7 is rejected even with an empty list, because it leaves the registry implicit; write docker.io/library/redis:7. The check applies only to new or changed images. Use a comma-separated list in environment variables. |
operator
| Setting |
Default |
Explanation |
operator.retries |
5 |
Number of retries for Operator tasks such as creating Kubernetes resources. |
operator.worker_limit |
5 |
Maximum number of concurrent Operator workers. Increase only with measured reconciliation load and available cluster capacity. |
operator.dependency_log_level |
INFO |
Log level of the Kopf library in the Operator. With debug: true, the Operator writes Sites debug messages but Kopf stays at INFO, and the HTTP client libraries (urllib3, kubernetes) stay at WARNING. Set DEBUG only to troubleshoot Kopf: it writes full resource payloads and all HTTP requests. Valid values: DEBUG, INFO, WARNING, ERROR. |
jobs
| Setting |
Default |
Explanation |
jobs.retention_expired_trigger_before_days |
31 days |
How many days before a site's retention date the platform starts sending expiry notifications. |
jobs.retention_expired_archive_after_days |
183 days |
How many days after the retention date the retention job archives a site. Archiving disables the site but keeps its data. |
jobs.retention_expired_delete_after_days |
365 days |
How many days after the retention date the retention job deletes a site. This must be greater than the archive delay. |
jobs.quota_trigger_percentage |
85 |
Storage-use percentage that triggers a quota notification. Valid values are from 1 through 100. |
jobs.backup_keep_files |
60 days |
Age after which the backup job removes backup files from its data volume. This backup contains Site definitions, not website content. |
jobs.backup_notifications_email |
null |
Email address for backup notifications. Set it only when email sending is configured. |
jobs.notification_default_assignee |
null |
User or assignee for notifications that require platform administrator action. Required when notifications are enabled for providers that need an assignee. |
jobs.retention_broadcast_channels |
[] |
Extra notification providers that receive retention archive/delete broadcasts. Each value must be a configured notification provider. |
jobs.http_access_token_expiration_warning_seconds |
604800 seconds |
Window before expiry, in seconds, within which the token history marks an HTTP Access Token as expiring. The Hub token panel also shows this value as the number of days expired entries remain in the history; the site actually prunes expired entries daily, after a fixed seven-day grace period. No notification is sent. |
cache
| Setting |
Default |
Explanation |
cache.redis_host |
redis |
Redis service hostname used by the application. Change it when Redis is external or has a different Service name. |
cache.redis_port |
6379 |
Redis service port. |
cache.redis_password |
null; use CACHE_REDIS_PASSWORD Secret |
Redis password. When CACHE_REDIS_PASSWORD is set in sites-secrets, the chart Redis server also requires it (Redis password). Do not put the password in a values file. |
cache.redis_db |
0 |
Redis database number. Use a separate database only if your Redis deployment supports and reserves it. |
cache.timeout_cold |
604800 seconds (7 days) |
Expiry for cold cache data. |
cache.timeout_warm |
259200 seconds (3 days) |
Expiry for warm cache data. |
cache.timeout_warmish |
86400 seconds (1 day) |
Expiry for warmish cache data. |
cache.timeout_super_warm |
900 seconds (15 minutes) |
Expiry for super-warm cache data. |
cache.timeout_hot |
300 seconds (5 minutes) |
Expiry for hot cache data and the retry interval after a failed metadata refresh. |
kubernetes
These settings apply to Site workloads and their Kubernetes resources. The
chart's own platform data persistent volume claim (PVC) has separate values under storage.data.
| Setting |
Default |
Explanation |
kubernetes.kube_config |
null |
Path to a kubeconfig file. null uses in-cluster credentials, which is the normal chart deployment. |
kubernetes.private_registry |
eccr.ecmwf.int |
Registry host for the platform Site images. It does not limit custom application images. Use site.custom_application_allowed_registries for that. |
kubernetes.private_registry_image_pull_secrets_name |
null |
Name of a pull Secret that every Site pod gets. null adds no pull Secret. Standard images in the public registry project do not need registry credentials. If you use an internal repository that requires authentication, set this to the matching Secret name and make sure that Secret is available in each Site namespace. The chart does not use serviceAccount.imagePullSecretName for Site pods. |
kubernetes.private_registry_project |
sites-oss |
Registry project/path for Site images. Use the project that contains the Site application images. |
kubernetes.custom_application_image_pull_secrets_name |
null |
Name of an extra pull Secret. Site pods get it only when the site has a custom application image. null adds no extra pull Secret. Set it explicitly to pull custom images from a private registry; it can be the same Secret as serviceAccount.imagePullSecretName. Give it access only to the repositories of custom images, and also set site.custom_application_allowed_registries. Make sure that Secret is available in each Site namespace. |
kubernetes.image_pull_policy |
IfNotPresent |
Image pull policy for Site Pods: Always, IfNotPresent, or Never. Choose a policy that matches tag immutability and node image caching. |
kubernetes.storage_class_name |
null |
StorageClass for Site PVCs. null uses the cluster default. |
kubernetes.storage_access_mode |
ReadWriteMany |
Access mode requested for Site PVCs, such as ReadWriteMany or ReadWriteOnce. It must be supported by the selected storage class and fit the replica count. |
kubernetes.storage_expansion_supported |
false |
Set true only if the storage provider and StorageClass support PVC expansion. |
kubernetes.termination_grace_period_seconds |
null (application uses 120 seconds) |
Pod shutdown grace period. The default gives uploads and downloads time to finish. Set a number only when the cluster or workload needs a different duration. |
routing
The chart builds this section from its top-level routing values. Do not
configure sitesConfig.routing directly. The application model includes
these generated settings:
| Generated setting |
Chart value |
Explanation |
routing.mode |
routing.mode |
Routing implementation for Hub and sites: ingress or gateway. |
routing.host |
routing.host |
Public DNS name for the websites (and for the Hub when routing.hub_host is empty). It must be a valid lowercase DNS name. Required in Gateway mode and when routing.hub_host is set. |
routing.hub_host |
routing.hubHost |
Separate public DNS name for the Hub. It must differ from routing.host. Set it for every production installation. Empty keeps the Hub on routing.host, where a website script can use the Hub session. |
routing.scheme |
routing.scheme |
Public URL scheme: http or https. Keep it aligned with the external endpoint. |
routing.hsts |
routing.hsts |
Enables Strict-Transport-Security behaviour. Keep enabled when the public service uses HTTPS. |
routing.ingress.class_name |
routing.ingress.className |
Ingress class used for site routes. |
routing.ingress.route_annotations |
routing.ingress.routeAnnotations |
Extra annotations applied to site Ingress resources. |
routing.gateway.name |
routing.gateway.name |
Gateway name to which site HTTPRoutes attach. |
routing.gateway.namespace |
routing.gateway.namespace |
Gateway namespace. Empty means the platform namespace. |
routing.gateway.listener_name |
routing.gateway.listenerName |
Gateway listener name for routes. Empty permits all matching listeners. |
routing.gateway.route_annotations |
routing.gateway.routeAnnotations |
Extra annotations applied to site HTTPRoutes. |
routing.gateway.policy_provider |
routing.gateway.policyProvider |
Controller-specific policy provider. none uses standard Gateway API resources only. |
routing.gateway.policies |
routing.gateway.policies |
Required controller policy features, for example session_affinity. The provider must support every listed feature. |
Other routing values that control Kubernetes resources, such as TLS Secret,
Gateway creation, listener definitions, class names, and policy role-based access control (RBAC), are
chart values documented in the routing and networking guide.