Skip to content

Repository files navigation

convoy

Version: 3.7.11Type: applicationAppVersion: v26.7.3

Open Source Webhooks Gateway

Maintainers

NameEmailUrl
Convoy Engineering Teamengineering@getconvoy.iohttps://getconvoy.io

Requirements

RepositoryNameVersion
agent3.7.11
server3.7.11
oci://registry-1.docker.io/bitnamichartspostgresql12.5.6
oci://registry-1.docker.io/bitnamichartsredis17.11.3

Installation

Add the Helm repository

helm repo add convoy https://frain-dev.github.io/helm-charts
helm repo update

Install the chart

helm install convoy convoy/convoy

Install with custom values

helm install convoy convoy/convoy --values values.yaml

Install from local chart

helm install convoy .

Object Storage

Convoy supports s3, on_prem, and azure_blob storage backends, selected via server.env.storage.type (and agent.env.storage.type).

Using a Kubernetes Secret for credentials

For both S3 and Azure Blob you can keep credentials out of your values by referencing an existing Kubernetes Secret. Note that the key name inside the Secret differs by backend — they are intentionally not symmetric:

BackendValues fieldRequired key inside the Secret
S3storage.s3.secretsecretKey
Azure Blobstorage.azure_blob.secretaccountKey

Example Azure Blob secret:

kubectl create secret generic convoy-azure-storage \
--from-literal=accountKey='<your-azure-account-key>'
server:
env:
storage:
enabled: truetype: azure_blobazure_blob:
account_name: myaccountcontainer_name: convoy-archivesecret: convoy-azure-storage # must contain key "accountKey"

Upgrade note (Azure Blob): Earlier deployments enabled Azure Blob through the extraEnvs workaround and typically created their Secret with the key account_key. The native storage.azure_blob.secret integration reads the key as accountKey (camelCase). If you are migrating off extraEnvs, recreate the Secret with the accountKey key, otherwise the account key will not be injected.

Values

KeyTypeDefaultDescription
agent.app.replicaCountint1
agent.app.resourcesobject{}
agent.autoscaling.behavior.scaleDown.policies[0].periodSecondsint60
agent.autoscaling.behavior.scaleDown.policies[0].typestring"Percent"
agent.autoscaling.behavior.scaleDown.policies[0].valueint50
agent.autoscaling.behavior.scaleDown.policies[1].periodSecondsint60
agent.autoscaling.behavior.scaleDown.policies[1].typestring"Pods"
agent.autoscaling.behavior.scaleDown.policies[1].valueint2
agent.autoscaling.behavior.scaleDown.selectPolicystring"Min"
agent.autoscaling.behavior.scaleDown.stabilizationWindowSecondsint300
agent.autoscaling.behavior.scaleUp.policies[0].periodSecondsint60
agent.autoscaling.behavior.scaleUp.policies[0].typestring"Percent"
agent.autoscaling.behavior.scaleUp.policies[0].valueint100
agent.autoscaling.behavior.scaleUp.policies[1].periodSecondsint60
agent.autoscaling.behavior.scaleUp.policies[1].typestring"Pods"
agent.autoscaling.behavior.scaleUp.policies[1].valueint2
agent.autoscaling.behavior.scaleUp.selectPolicystring"Max"
agent.autoscaling.behavior.scaleUp.stabilizationWindowSecondsint0
agent.autoscaling.enabledboolfalseEnable autoscaling for the agent
agent.autoscaling.maxReplicasint10
agent.autoscaling.minReplicasint2
agent.autoscaling.targetCPUUtilizationPercentageint80
agent.autoscaling.targetMemoryUtilizationPercentageint80
agent.enabledbooltrueEnable the agent component
agent.env.analytics_enabledbooltrue
agent.env.auth.jwt.enabledbooltrue
agent.env.auth.jwt.refresh_secretstring"convoy-refresh-secret"
agent.env.auth.jwt.secretstring"convoy-secret"
agent.env.consumer_pool_sizeint100
agent.env.dispatcher.allow_list[0]string"0.0.0.0/0"
agent.env.dispatcher.deny_list[0]string"127.0.0.1/8"
agent.env.dispatcher.deny_list[1]string"169.254.169.254/32"
agent.env.dispatcher.insecure_skip_verifyboolfalse
agent.env.enable_feature_flaglist[]
agent.env.enable_profilingboolfalse
agent.env.environmentstring"oss"
agent.env.instance_ingest_rateint100
agent.env.license_keystring""
agent.env.log_levelstring"error"
agent.env.max_retry_secondsint7200
agent.env.metrics.enabledboolfalse
agent.env.metrics.metrics_backendstring"prometheus"
agent.env.metrics.prometheus_metrics.sample_timeint5
agent.env.proxystring""
agent.env.pyroscope.enabledboolfalse
agent.env.pyroscope.passwordstring""
agent.env.pyroscope.profile_idstring""
agent.env.pyroscope.urlstring""
agent.env.pyroscope.usernamestring""
agent.env.retention_policy.enabledboolfalse
agent.env.retention_policy.policystring"720h"
agent.env.sign_up_enabledboolfalse
agent.env.smtp.enabledboolfalse
agent.env.smtp.fromstring""
agent.env.smtp.passwordstring""Ignored in case of secret parameter with non-empty value
agent.env.smtp.portint0
agent.env.smtp.providerstring""
agent.env.smtp.reply_tostring""
agent.env.smtp.secretstring""If this secret parameter is not empty, password value will be ignored. The password in the secret should be in the 'password' key
agent.env.smtp.sslboolfalse
agent.env.smtp.urlstring""
agent.env.smtp.usernamestring""
agent.env.storage.azure_blob.account_keystring""Ignored in case of secret parameter with non-empty value
agent.env.storage.azure_blob.account_namestring""
agent.env.storage.azure_blob.container_namestring""
agent.env.storage.azure_blob.endpointstring""
agent.env.storage.azure_blob.prefixstring""
agent.env.storage.azure_blob.secretstring""If this secret parameter is not empty, account_key value will be ignored. The account key should be in the 'accountKey' key
agent.env.storage.enabledboolfalse
agent.env.storage.on_prem.pathstring""
agent.env.storage.s3.accessKeystring""
agent.env.storage.s3.bucketstring""
agent.env.storage.s3.endpointstring""
agent.env.storage.s3.prefixstring""
agent.env.storage.s3.regionstring""
agent.env.storage.s3.secretstring""If this secret parameter is not empty, secretKey value will be ignored. The password in the secret should be in the 'secretKey' key
agent.env.storage.s3.secretKeystring""Ignored in case of secret parameter with non-empty value
agent.env.storage.s3.session_tokenstring""
agent.env.storage.typestring""
agent.env.worker_execution_modestring"default"
agent.image.pullPolicystring"IfNotPresent"Pull policy for the agent image
agent.image.repositorystring"getconvoy/convoy"Repository to be used by the agent. The latest tag is used by default
agent.podDisruptionBudgetobject{}
agent.securityContextobject{}
agent.service.portint80Port for the agent service
agent.service.typestring"ClusterIP"Type of service for the agent
global.convoy.api_versionstring"2024-01-01"API version
global.convoy.cacert_contentstring""Dispatcher CA Certificate content. If provided, a secret will be created with this content
global.convoy.cacert_secret_namestring""Dispatcher CA Certificate configuration. If provided, it will use the content of the secret
global.convoy.db_max_open_connint100Connections each Convoy process may open to Postgres. This is Convoy's own default, stated here because it needs sizing rather than accepting: multiply it by the number of processes (server, agent, and any ingest or worker) and keep the total comfortably below the database's max_connections, or a rolling restart exhausts them. The Postgres queue makes this sharper, since queue, cache, rate limiter, circuit breaker and lock traffic all move onto this pool. Blank falls back to Convoy's default.
global.convoy.enable_usage_analyticsbooltrueEnable usage analytics
global.convoy.environmentstring"oss"Convoy Environment
global.convoy.google_oauth_client_idstring""Google OAuth Client ID from Google Cloud Console
global.convoy.google_oauth_enabledboolfalseEnable Google OAuth SSO for user authentication
global.convoy.google_oauth_redirect_urlstring""Google OAuth Redirect URL for callback handling
global.convoy.imagestring"getconvoy/convoy"Docker image tags for all convoy components
global.convoy.jwt_refresh_secretstring"convoy-refresh-secret"JWT Refresh Secret key
global.convoy.jwt_secretstring"convoy-secret"JWT Secret key
global.convoy.jwt_secret_namestring""Existing Kubernetes Secret name for JWT secrets. Recommended for production. When set, JWT secret values are ignored; the secret must contain 'jwt_secret' and 'jwt_refresh_secret' keys.
global.convoy.license_keystring""License Key
global.convoy.license_key_secret_namestring""If this secret parameter is not empty, the inline license key value will be ignored. The license key should be present in the 'license_key' key of the specified secret.
global.convoy.log_levelstring"error"Logger Level for all convoy components
global.convoy.otel_auth_header_namestring""Open Telemetry auth header name
global.convoy.otel_auth_header_valuestring""Open Telemetry auth header value
global.convoy.otel_collector_urlstring""Open Telemetry collector url
global.convoy.otel_insecure_skip_verifybooltrueOpen Telemetry insecure skip verify
global.convoy.otel_sample_rateint1Open Telemetry sample rate
global.convoy.portal_realm_enabledboolfalseEnable Portal Realm authentication for enhanced security
global.convoy.postgresQueue.batchSizeint64
global.convoy.postgresQueue.batchWaitMsint2
global.convoy.postgresQueue.cacheLocalReadSizeint10000
global.convoy.postgresQueue.cacheLocalReadTtlMsint1000
global.convoy.postgresQueue.claimBatchSizeint64
global.convoy.postgresQueue.leaseTimeoutSecondsint90
global.convoy.postgresQueue.pollIdleMsint5
global.convoy.postgresQueue.writeConcurrencyint8
global.convoy.queue_providerstring"redis"Queue provider: redis (default) or postgres. Postgres is experimental and needs a paid license plus "postgres-queue" in both server.env.enable_feature_flag and agent.env.enable_feature_flag; rendering fails without it. When postgres, set redis.enabled to false and size Postgres for queue, cache, rate limiter, circuit breaker, and lock traffic in addition to application queries.
global.convoy.read_replica_dsnstring""Database read replica DSN for improved performance
global.convoy.retention_policy_durationstring"720h"
global.convoy.retention_policy_enabledboolfalseRetention policy enabled
global.convoy.sentry_debugboolfalseSentry debug mode
global.convoy.sentry_dsnstring""Sentry DSN
global.convoy.sentry_environmentstring"oss"Sentry environment
global.convoy.sentry_sample_ratefloat1Sentry sample rate for error sampling (0.0 to 1.0)
global.convoy.tagstring"v26.7.3"Docker image tags for all convoy components
global.convoy.tracer_enabledboolfalseTracing config for all convoy services
global.convoy.tracer_typestring"otel"Tracing provider type
global.externalDatabase.databasestring"convoy"Database name for the external database
global.externalDatabase.enabledbooltrueEnable an external database; This will use postgresql chart, Change values if you use an external database
global.externalDatabase.hoststring"postgresql"Host for the external database
global.externalDatabase.optionsstring"sslmode=disable&connect_timeout=30"Query params for the external database
global.externalDatabase.passwordstring"postgres"Password for the external database, ignored in case of secret parameter with non-empty value
global.externalDatabase.portint5432Port for the external database
global.externalDatabase.postgresPasswordstring"postgres"Password for the external database
global.externalDatabase.readReplicaslist[]Read replicas for the external database, as a list of database objects. Convoy decodes this as a JSON array, so a mapping here is rejected. Reading from replicas also needs the "read-replicas" feature flag and a license.
global.externalDatabase.secretstring""If this secret parameter is not empty, the password value will be ignored. The password in the secret should be in the 'password' key
global.externalDatabase.usernamestring"postgres"Username for the external database
global.externalRedis.addressesstring""redis cluster addresses, if set the other values won't be used
global.externalRedis.databasestring"0"Database name for the external redis.
global.externalRedis.enabledboolfalseEnable external redis, Enable this if you use an external redis and disable Native redis
global.externalRedis.hoststring"redis-master"Host for the external redis
global.externalRedis.passwordstring"convoy"password for the external redis, ignored in case of secret parameter with non-empty value
global.externalRedis.portstring"6379"Port for the external redis
global.externalRedis.schemestring"redis"Scheme for the external redis. This can be redis, rediss, redis-socket or redis-sentinel
global.externalRedis.secretstring""If this secret parameter is not empty, password value will be ignored. The password in the secret should be in the 'password' key
global.externalRedis.sentinelMasterNamestring"mymaster"Redis Sentinel master name (required when scheme is redis-sentinel)
global.externalRedis.sentinelPasswordstring""Redis Sentinel auth password (optional)
global.externalRedis.sentinelSecretstring""Secret containing sentinel password; key: password. If set, sentinelPassword is ignored
global.externalRedis.sentinelUsernamestring""Redis Sentinel auth username (optional)
global.externalRedis.usernamestring""username for the external redis.
global.nativeRedis.enabledbooltrueEnable redis; This will use redis chart, Disable if you use an external redis
global.nativeRedis.hoststring"redis-master"Host for the redis
global.nativeRedis.passwordstring"convoy"password for the redis, ignored in case of secret parameter with non-empty value
global.nativeRedis.portint6379Port for the redis
global.nativeRedis.secretstring""If this secret parameter is not empty, password value will be ignored. The password in the secret should be in the 'password' key
server.app.replicaCountint1
server.app.resourcesobject{}
server.autoscaling.behavior.scaleDown.policies[0].periodSecondsint60
server.autoscaling.behavior.scaleDown.policies[0].typestring"Percent"
server.autoscaling.behavior.scaleDown.policies[0].valueint50
server.autoscaling.behavior.scaleDown.policies[1].periodSecondsint60
server.autoscaling.behavior.scaleDown.policies[1].typestring"Pods"
server.autoscaling.behavior.scaleDown.policies[1].valueint2
server.autoscaling.behavior.scaleDown.selectPolicystring"Min"
server.autoscaling.behavior.scaleDown.stabilizationWindowSecondsint300
server.autoscaling.behavior.scaleUp.policies[0].periodSecondsint60
server.autoscaling.behavior.scaleUp.policies[0].typestring"Percent"
server.autoscaling.behavior.scaleUp.policies[0].valueint100
server.autoscaling.behavior.scaleUp.policies[1].periodSecondsint60
server.autoscaling.behavior.scaleUp.policies[1].typestring"Pods"
server.autoscaling.behavior.scaleUp.policies[1].valueint2
server.autoscaling.behavior.scaleUp.selectPolicystring"Max"
server.autoscaling.behavior.scaleUp.stabilizationWindowSecondsint0
server.autoscaling.enabledboolfalseEnable autoscaling for the server
server.autoscaling.maxReplicasint10
server.autoscaling.minReplicasint2
server.autoscaling.targetCPUUtilizationPercentageint80
server.autoscaling.targetMemoryUtilizationPercentageint80
server.enabledbooltrueEnable the server component
server.env.analytics.enabledbooltrue
server.env.analytics_enabledbooltrue
server.env.api_versionstring"2024-01-01"
server.env.auth.file.basicobject{}
server.env.auth.file.secretstring""If this secret parameter is not empty, basic auth inline value will be ignored. The basic auth config should be in the 'basic_auth_config' key
server.env.auth.jwt.enabledbooltrue
server.env.auth.jwt.refresh_secretstring"convoy-refresh-secret"
server.env.auth.jwt.secretstring"convoy-secret"
server.env.auth.native.enabledbooltrue
server.env.enable_feature_flaglist[]
server.env.enable_profilingboolfalse
server.env.environmentstring"oss"
server.env.hoststring""
server.env.instance_ingest_rateint100
server.env.license_keystring""
server.env.log_levelstring"error"
server.env.max_response_sizeint50Max response body when ingesting webhooks (might be renamed). Defaults to 50KB
server.env.max_retry_secondsint7200
server.env.metrics.enabledboolfalse
server.env.metrics.metrics_backendstring"prometheus"
server.env.metrics.prometheus_metrics.sample_timeint5
server.env.pyroscope.enabledboolfalse
server.env.pyroscope.passwordstring""
server.env.pyroscope.profile_idstring""
server.env.pyroscope.urlstring""
server.env.pyroscope.usernamestring""
server.env.retention_policy.enabledboolfalse
server.env.retention_policy.policystring"720h"
server.env.root_pathstring""Configure root patth for convoy server e.g. "/convoy"
server.env.sign_up_enabledboolfalse
server.env.storage.azure_blob.account_keystring""Ignored in case of secret parameter with non-empty value
server.env.storage.azure_blob.account_namestring""
server.env.storage.azure_blob.container_namestring""
server.env.storage.azure_blob.endpointstring""
server.env.storage.azure_blob.prefixstring""
server.env.storage.azure_blob.secretstring""If this secret parameter is not empty, account_key value will be ignored. The account key should be in the 'accountKey' key
server.env.storage.enabledboolfalse
server.env.storage.on_prem.pathstring""
server.env.storage.s3.accessKeystring""
server.env.storage.s3.bucketstring""
server.env.storage.s3.endpointstring""
server.env.storage.s3.prefixstring""
server.env.storage.s3.regionstring""
server.env.storage.s3.secretstring""If this secret parameter is not empty, secretKey value will be ignored. The password in the secret should be in the 'secretKey' key
server.env.storage.s3.secretKeystring""Ignored in case of secret parameter with non-empty value
server.env.storage.s3.session_tokenstring""
server.env.storage.typestring""
server.gateway.annotationsobject{}Annotations for the HTTPRoute
server.gateway.createboolfalseWhether to create a Gateway resource
server.gateway.enabledboolfalseEnable Gateway API for the server
server.gateway.hostnameslist["test.com"]Hostnames for the HTTPRoute
server.gateway.parentRefslist[{"name":"convoy-gateway","namespace":"gateway-system"}]Parent refs for the HTTPRoute (e.g., the Gateway)
server.gateway.ruleslist[{"matches":[{"path":{"type":"PathPrefix","value":"/"}}]}]Rules for the HTTPRoute
server.image.pullPolicystring"IfNotPresent"Pull policy for the server image
server.image.repositorystring"getconvoy/convoy"Repository to be used by the server. The latest tag is used by default
server.ingress.annotationsobject{}
server.ingress.enabledbooltrueEnable ingress for the server
server.ingress.hosts[0].hoststring"test.com"
server.ingress.hosts[0].http.paths[0].pathstring"/"
server.ingress.hosts[0].http.paths[0].pathTypestring"Prefix"
server.ingress.ingressClassNamestring""
server.ingress.tls[0].hosts[0]string"test.com"
server.ingress.tls[0].secretNamestring"test-tls-secret"
server.podDisruptionBudgetobject{}
server.securityContextobject{}Pod disruption budget maxUnavailable: 1 minAvailable: 1
server.service.portint80Port for the server service
server.service.typestring"ClusterIP"Type of service for the server

Autogenerated from chart metadata using helm-docs v1.14.2

About

No description, website, or topics provided.

Resources

Stars

10 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages