Skip to main content

Helm Advanced Configuration

For advanced configuration options, open the values.yaml file with your preferred text editor and modify the settings as needed.

Once you have updated the values.yaml file, please proceed to the Upgrade Appcircle Server section to apply the changes.

Custom Testing Distribution Domain

To configure a custom domain for the Appcircle Testing Distribution, update your values.yaml file with the custom domain settings. Below is an example configuration for a custom Testing Distribution domain usage:

global:
distribution:
distribution-testerweb:
url: https://dist.spacetech.com
distribution:
distribution-testerweb:
ingress:
extraHosts:
- name: dist.spacetech.com
path: /
extraTls:
- secretName: k8s-dist-spacetech-com-tls
hosts:
- dist.spacetech.com
caution

The emails related to the Testing Distribution will now include the new domain in the links. Please note that old links associated with the previous domain will no longer work.

After updating the values.yaml file, create a TLS secret for the custom domain using the following command:

info
  • The certificate (cert) should be in PEM format and it's recommended to include the leaf (app), intermediate, and root (CA) certificates to form a full-chain certificate.
  • The private key (key) should not be password-protected.
kubectl create secret tls k8s-dist-spacetech-com-tls \
--cert=fullchain.crt \
--key=private.key

Increase the Replica Counts

With the default Helm values, the Appcircle server services being deployed with one replica. If you want to increase this number for high availability, you can do so by updating your values.yaml file:

caution

Some keys might already exists in your values.yaml file, make sure to update the existing keys instead of adding new ones.

agentcache:
replicaCount: 2
auth:
auth-keycloak:
replicas: 2
apigateway:
replicaCount: 2
appparser:
replicaCount: 2
build:
replicaCount: 2
distribution:
distribution-server:
replicaCount: 2
distribution-testeradmin:
replicaCount: 2
distribution-testerapi:
replicaCount: 2
distribution-testerweb:
replicaCount: 2
distribution-web:
replicaCount: 2
license:
replicaCount: 2
notification:
replicaCount: 2
otp:
replicaCount: 2
publish:
replicaCount: 2
reporting:
replicaCount: 2
resign:
replicaCount: 2
resource:
replicaCount: 2
schedulemanager:
replicaCount: 2
signingidentity:
replicaCount: 2
store:
store-web:
replicaCount: 2
store-admin:
replicaCount: 2
store-api:
replicaCount: 2
store-profile:
replicaCount: 2
store-report:
replicaCount: 2
storesubmit:
replicaCount: 2
taskserver:
replicaCount: 2
web:
web-app:
replicaCount: 2
web-event:
replicaCount: 2
webhook:
replicaCount: 2

Applying Configuration Changes

To apply configuration changes to the Appcircle server installation, update the Helm release with the new configuration using the following command:

info

The namespace, release name, and Helm repository name in the example command below are written for the example installation document. If you have changed these values while installing the Appcircle server, adjust the values if required.

helm upgrade appcircle-server appcircle/appcircle \
-n appcircle \
-f values.yaml

Values Table

To deploy the Appcircle server with customized parameters, refer to the basic values.yaml configuration table below.

Parameters

ParameterDescriptionDefault Value
global.appEnvironmentSpecifies the application environment (e.g., Development, Production).'Production'
global.imageRegistryThe Docker registry where container images are stored.'europe-west1-docker.pkg.dev'
global.imageRepositoryPathThe path within the Docker registry for the application's images.'appcircle/docker-registry'
global.imageTagThe specific tag of the Docker image to use.'v3.23.2'
global.imagePullSecretsSecrets used to authenticate with private container registries.[ 'containerregistry' ]
global.ingressClassNameSpecifies the ingress class name used for all application ingresses.'appcircle'
global.defaultStorageClassThe default storage class used for persistent volumes in the application.-
global.urls.domainNameThe domain name used for the application (e.g., .example.com).-
global.urls.schemeThe URL scheme used for the application (e.g., http or https).'http'
global.urls.auth.subdomainSubdomain used for the authentication service.'auth'
global.urls.privateApi.subdomainSubdomain used for the private API service.'api'
global.urls.webApp.subdomainSubdomain used for the web application.'my'
global.urls.webEvent.subdomainSubdomain used for the web event service.'hook'
global.urls.distributionTesterWeb.subdomainSubdomain used for the distribution tester web.'dist'
global.urls.store.subdomainSubdomain used for the store service.'store'
global.urls.webEventRedis.subdomainSubdomain used for the web event Redis service.'kvs'
global.urls.resource.subdomainSubdomain used for the resource service.'resource'
global.mail.providerMail provider to use (e.g., MailKitSMTP, SMTP ).'MailKitSMTP'
global.mail.smtpSMTP configuration details.-
global.mail.smtp.hostSMTP server hostname.-
global.mail.smtp.usernameSMTP username.-
global.mail.smtp.fromThe "From" address used for emails.-
global.mail.smtp.fromDisplayNameThe display name for the sender of emails.-
global.mail.smtp.portPort number for the SMTP server.-
global.mail.smtp.passwordPassword for the SMTP account.-
global.mail.smtp.sslWhether SSL is enabled for SMTP.'false'
global.mail.smtp.authWhether authentication is enabled for SMTP.'true'
global.mail.smtp.starttlsWhether STARTTLS is enabled for SMTP.'true'
global.distribution.distribution-testerweb.urlThe external URL for the distribution tester web module.-
global.tlsWildcard.certThe wildcard TLS certificate.-
global.tlsWildcard.caCertThe Certificate Authority (CA) for the wildcard certificate.-
global.tlsWildcard.keyThe private key for the wildcard certificate.-
global.trustedCertsList of trusted certificates.[]
global.minio.urlExternal MinIO URL.-
global.minio.regionThe region for MinIO.local
global.minio.bucketPrefixPrefix for MinIO buckets.appcircle-local-resource-
global.containerRegistrySecretSecret used for accessing the container registry.-
global.redis.enabledWhether a common Redis instance is enabled for all modules.false
global.redis.everyModuleWhether separate Redis instances are enabled for each module.true
global.vault.urlExternal URL for Vault.-
auth.auth-keycloak.adminUsernameAdmin username for Keycloak.'admin'
auth.auth-keycloak.initialUsernameInitial username for the default user.'admin@myappcircle.io'
auth.auth-keycloak.organizationNameInitial organization name in Keycloak.'myappcircle'
auth.auth-keycloak.allowDisposableEmailsDetermines whether disposable emails are allowed for registration.false
auth.auth-keycloak.bruteForce.bruteForceProtectedEnables brute force protection for Keycloak.'true'
auth.auth-keycloak.bruteForce.failureFactorNumber of failed login attempts before action is taken.'30'
auth.auth-keycloak.bruteForce.maxDeltaTimeSecondsMaximum time in seconds to consider failed login attempts.'43200'
auth.auth-keycloak.bruteForce.maxFailureWaitSecondsMaximum wait time in seconds after consecutive failures.'900'
auth.auth-keycloak.bruteForce.minimumQuickLoginWaitSecondsMinimum wait time in seconds for quick login attempts.'60'
auth.auth-keycloak.bruteForce.permanentLockoutEnables permanent account lockout after repeated failures.'false'
auth.auth-keycloak.bruteForce.quickLoginCheckMilliSecondsTime in milliseconds to check quick login attempts.'1000'
auth.auth-keycloak.bruteForce.waitIncrementSecondsTime increment in seconds for wait periods after failures.'60'
auth.auth-keycloak.cli.enabledEnables the Keycloak CLI for custom commands.false
auth.auth-keycloak.database.databaseName of the Keycloak database.-
auth.auth-keycloak.database.hostnameHostname of the Keycloak database.-
auth.auth-keycloak.database.passwordPassword for the Keycloak database.-
auth.auth-keycloak.database.portPort number for the Keycloak database.-
auth.auth-keycloak.database.usernameUsername for the Keycloak database.-
auth.auth-keycloak.database.vendorDatabase vendor for Keycloak (e.g., postgres, mysql).'postgres'
auth.auth-keycloak.defaultUserGroupRolesDefault roles assigned to new users in Keycloak.-
auth.auth-keycloak.dmzCustomDomain.domainDomain name for the DMZ custom configuration.-
auth.auth-keycloak.dmzCustomDomain.enabledEnables custom domain for DMZ.false
auth.auth-keycloak.enabledOrganizationEnables the organization feature in Keycloak.-
auth.auth-keycloak.enabledRegistrationEnables user registration in Keycloak.-
auth.auth-keycloak.extraEnvAdditional environment variables for the Keycloak deployment.[]
auth.auth-keycloak.extraInitContainersAdditional init containers for the Keycloak deployment.[]
auth.auth-keycloak.extraVolumeMountsExtra volume mounts for the Keycloak deployment.[]
auth.auth-keycloak.extraVolumesExtra volumes for the Keycloak deployment.[]
auth.auth-keycloak.identityProviders.bitbucket.clientIdClient ID for Bitbucket integration.-
auth.auth-keycloak.identityProviders.bitbucket.clientSecretClient secret for Bitbucket integration.-
auth.auth-keycloak.identityProviders.bitbucket.enabledEnables Bitbucket as an identity provider.false
auth.auth-keycloak.identityProviders.github.clientIdClient ID for GitHub integration.-
auth.auth-keycloak.identityProviders.github.clientSecretClient secret for GitHub integration.-
auth.auth-keycloak.identityProviders.github.enabledEnables GitHub as an identity provider.false
auth.auth-keycloak.identityProviders.google.clientIdClient ID for Google integration.-
auth.auth-keycloak.identityProviders.google.clientSecretClient secret for Google integration.-
auth.auth-keycloak.identityProviders.google.enabledEnables Google as an identity provider.false
auth.auth-keycloak.image.pullPolicyImage pull policy for Keycloak.-
auth.auth-keycloak.image.repositoryRepository for the Keycloak image.-
auth.auth-keycloak.image.tagTag of the Keycloak image.-
auth.auth-keycloak.importRealmEnables importing of realms during startup.false
auth.auth-keycloak.ingressIngress configuration for Keycloak.-
auth.auth-keycloak.ingress.enabledEnables ingress for Keycloak.false
auth.auth-keycloak.initialOrganizationIdInitial organization ID for Keycloak.-
auth.auth-keycloak.initialPasswordInitial password for the default user.-
auth.auth-keycloak.initialUsernameInitial username for the default user.'admin@myappcircle.io'
auth.auth-keycloak.organizationNameInitial organization name in Keycloak.'myappcircle'
auth.auth-keycloak.recaptcha.maxFailuresMaximum failed attempts before requiring a reCAPTCHA.'4'
auth.auth-keycloak.recaptcha.requirementreCAPTCHA requirement level (e.g., DISABLED, OPTIONAL, REQUIRED).'DISABLED'
auth.auth-keycloak.recaptcha.secretSecret key for reCAPTCHA integration.-
auth.auth-keycloak.recaptcha.siteKeySite key for reCAPTCHA integration.-
auth.auth-keycloak.userLookupDecisionStrategyStrategy for user lookup decisions in Keycloak.-
auth.auth-postgresql.architectureDefines the architecture of PostgreSQL (e.g., standalone, replication).standalone
auth.auth-postgresql.enabledEnables PostgreSQL for Keycloak.true
auth.auth-postgresql.auth.usernameUsername for the PostgreSQL database.'keycloak'
auth.auth-postgresql.auth.databaseThe name of the PostgreSQL database to create.'keycloak'
kafka.heapOptsJVM heap options for Kafka.'-Xmx1408m -Xms512m'
kafka.controller.replicaCountNumber of Kafka controller replicas.3
kafka.controller.resourcesPresetResource preset for the Kafka controller.'medium'
kafka.controller.persistence.enabledEnables persistence for Kafka controller.true
kafka.controller.persistence.sizeSize of persistence storage for Kafka controller.'8Gi'
kafka.listeners.client.protocolProtocol used for Kafka client listener.'PLAINTEXT'
kafka.listeners.controller.protocolProtocol used for Kafka controller listener.'PLAINTEXT'
kafka.listeners.interbroker.protocolProtocol used for Kafka inter-broker communication.'PLAINTEXT'
kafka.metrics.kafka.enabledEnables Kafka metrics.false
kafka.metrics.jmx.enabledEnables JMX metrics for Kafka.false
kafka.zookeeper.auth.enabledEnables authentication for ZooKeeper.false
kafka.zookeeper.metrics.enabledEnables metrics for ZooKeeper.false
kafka.client.protocolProtocol used by Kafka clients.'PLAINTEXT'
kafka.extraConfigAdditional configuration file for Kafka.-
webeventredis.enabledEnables WebEventRedis.true
webeventredis.tls.enabledEnables TLS for WebEventRedis.false
webeventredis.tls.existingSecretReferences an existing TLS secret for WebEventRedis.'appcircle-tls-wildcard'
webeventredis.tls.certCAFilenameFilename for the CA certificate in TLS.'ca.crt'
webeventredis.tls.certFilenameFilename for the server certificate in TLS.'tls.crt'
webeventredis.tls.certKeyFilenameFilename for the private key in TLS.'tls.key'
webeventredis.ingress.enabledEnables ingress for WebEventRedis.false
webeventredis.ingress.tlsEnables TLS for WebEventRedis ingress.false
webeventredis.ingress.ingressClassNameSpecifies the ingress class name for WebEventRedis.appcircle
webeventredis.ingress.annotationsAnnotations for WebEventRedis ingress.-
minio.enabledEnables MinIO.true
minio.modeMinIO mode (standalone, distributed, etc.).'standalone'
minio.persistence.enabledEnables persistence for MinIO.true
minio.persistence.sizeSize of persistence storage for MinIO.'8Gi'
mongodb.enabledEnables MongoDB.true
mongodb.persistence.enabledEnables persistence for MongoDB.true
mongodb.persistence.sizeSize of persistence storage for MongoDB.'5Gi'
ingress-nginx.enabledSpecifies whether ingress-nginx is enabled.true
ingress-nginx.controller.ingressClassResource.nameName of the IngressClass resource.appcircle
ingress-nginx.controller.ingressClassResource.enabledSpecifies whether the IngressClass resource is enabled.true
ingress-nginx.controller.config.proxy-body-sizeMaximum allowed size of the client request body."4096m"
ingress-nginx.controller.config.proxy-connect-timeoutTimeout for establishing a connection to the backend server."600"
ingress-nginx.controller.config.proxy-read-timeoutTimeout for reading a response from the backend server."600"
ingress-nginx.controller.config.client-header-timeoutTimeout for reading the client request headers."180"
ingress-nginx.controller.config.client-body-timeoutTimeout for reading the client request body."180"
ingress-nginx.controller.config.send-timeoutTimeout for sending data to the client."180"
ingress-nginx.controller.config.keepalive-timeoutTimeout for idle keep-alive connections."75"
ingress-nginx.controller.config.client-body-timeoutTimeout for reading the client request body."180"
ingress-nginx.controller.config.send-timeoutTimeout for sending data to the client."180"
ingress-nginx.controller.config.keepalive-timeoutTimeout for idle keep-alive connections."75"
ingress-nginx.controller.config.proxy-buffer-sizeSize of the buffer used for reading the first part of the response received from the proxied server."128k"
ingress-nginx.controller.config.proxy-buffers-numberNumber of buffers used for reading a response from the proxied server."4"
ingress-nginx.controller.config.proxy-busy-buffers-sizeSize of the buffer used for reading the entire response from the proxied server."128k"
ingress-nginx.defaultBackend.enabledSpecifies whether the default backend is enabled.false
vault.injector.enabledEnables the Vault sidecar injector.false
vault.server.dataStorage.sizeSize of the data storage for Vault.'1Gi'
vault.server.authDelegator.enabledEnables the auth delegator for Vault.false
vault.server.image.repositoryRepository of the Vault server image.-
vault.server.image.tagTag of the Vault server image.-
vault.server.standalone.enabledEnables standalone mode for Vault.true
vault.server.standalone.configConfiguration file for standalone Vault.-
vault.ui.enabledEnables the Vault UI.true

Need help?

Get help from Appcircle's support team, or see how others are using Appcircle by joining our Slack Channel.

Preview of Slack