Skip to main content

Deploy Chatwoot using Helm Charts

This guide will help you to deploy a production ready Chatwoot instance with Helm Charts.

To quickly try out the charts, follow the two steps below. For a production deployment, please make sure to pass in the required arguments to helm.

helm repo add chatwoot https://chatwoot.github.io/chartshelm install chatwoot chatwoot/chatwoot

Prerequisites#

  • Kubernetes 1.16+
  • Helm 3.1.0+
  • PV provisioner support in the underlying infrastructure

Installing the chart#

To install the chart with the release name chatwoot:

helm install chatwoot chatwoot/chatwoot

The command deploys Chatwoot on the Kubernetes cluster in the default configuration. The parameters section lists the parameters that can be configured during installation.

Tip: List all releases using helm list

Uninstalling the chart#

To uninstall/delete the chatwoot deployment:

helm delete chatwoot

The command removes all the Kubernetes components associated with the chart and deletes the release.

Note: Persistent volumes are not deleted automatically. They need to be removed manually.

Parameters#

Chatwoot Image parameters#

NameDescriptionValue
image.repositoryChatwoot image repositorychatwoot/chatwoot
image.tagChatwoot image tag (immutable tags are recommended)v18.1.1
image.pullPolicyChatwoot image pull policyIfNotPresent

Chatwoot Environment Variables#

NameTypeDefault Value
env.ACTIVE_STORAGE_SERVICEStorage service. local for disk. amazon for s3."local"
env.ASSET_CDN_HOSTSet if CDN is used for asset delivery.""
env.CHATWOOT_INSTALLATION_ENVSets chatwoot installation method."helm"
env.ENABLE_ACCOUNT_SIGNUPtrue : default option, allows sign ups, false : disables all the end points related to sign ups, api_only: disables the UI for signup but you can create sign ups via the account apis."false"
env.FORCE_SSLForce all access to the app over SSL, default is set to false."false"
env.FRONTEND_URLReplace with the URL you are planning to use for your app."http://0.0.0.0:3000/"
env.IOS_APP_IDChange this variable only if you are using a custom build for mobile app."6C953F3RX2.com.chatwoot.app"
env.ANDROID_BUNDLE_IDChange this variable only if you are using a custom build for mobile app."com.chatwoot.app"
env.MAILER_SENDER_EMAILThe email from which all outgoing emails are sent.""
env.RAILS_ENVSets rails environment."production"
env.RAILS_MAX_THREADSNumber of threads each worker will use."5"
env.SECRET_KEY_BASEUsed to verify the integrity of signed cookies. Ensure a secure value is set."wsedrfghjhygtfrdecfvbhnygtfvbtyftctdrxresxcygvujhb"
env.SENTRY_DSNSentry data source name.""
env.SMTP_ADDRESSSet your smtp address.""
env.SMTP_AUTHENTICATIONAllowed values: plain,login,cram_md5"plain"
env.SMTP_ENABLE_STARTTLS_AUTODefaults to true."true"
env.SMTP_OPENSSL_VERIFY_MODECan be: none, peer, client_once, fail_if_no_peer_cert"none"
env.SMTP_PASSWORDSMTP password""
env.SMTP_PORTSMTP port"587"
env.SMTP_USERNAMESMTP username""
env.USE_INBOX_AVATAR_FOR_BOTBot customizations"true"

Email setup for conversation continuity (Incoming emails)#

NameTypeDefault Value
env.MAILER_INBOUND_EMAIL_DOMAINThis is the domain set for the reply emails when conversation continuity is enabled.""
env.RAILS_INBOUND_EMAIL_SERVICESet this to appropriate ingress channel with regards to incoming emails. Possible values are relay, mailgun, mandrill, postmark and sendgrid.""
env.RAILS_INBOUND_EMAIL_PASSWORDPassword for the email service.""
env.MAILGUN_INGRESS_SIGNING_KEYSet if using mailgun for incoming conversations.""
env.MANDRILL_INGRESS_API_KEYSet if using mandrill for incoming conversations.""

Postgres variables#

NameTypeDefault Value
postgresql.enabledSet to false if using external postgres and modify the below variables.true
env.POSTGRES_DBChatwoot database name"chatwoot_production"
env.POSTGRES_HOSTDatabase url. Edit if using external postgres."chatwoot-chatwoot-postgresql"
env.POSTGRES_PASSWORDDatabase password. Edit if using external postgres."postgres"
env.POSTGRES_PORTDatabase port5432
env.POSTGRES_USERNAMEDatabase username."postgres"

Redis variables#

NameTypeDefault Value
redis.enabledSet to false if using external redis and modify the below variables.true
env.REDIS_HOSTRedis host name"chatwoot-chatwoot-redis-master"
env.REDIS_PASSWORDRedis password"redis"
env.REDIS_SENTINELSRedis Sentinel can be used by passing list of sentinel host and ports. For example, sentinel_host1:port1, sentinel_host2:port2""
env.REDIS_SENTINEL_MASTER_NAMERedis sentinel master name is required when using sentinel.""
env.REDIS_URLREDIS url"redis://:redis@chatwoot-chatwoot-redis-master:6379"

Logging variables#

NameTypeDefault Value
env.RAILS_LOG_TO_STDOUTstring"true"
env.LOG_LEVELstring"info"
env.LOG_SIZEstring"500"

Third party credentials#

NameTypeDefault Value
env.S3_BUCKET_NAMES3 bucket name""
env.AWS_ACCESS_KEY_IDAmazon access key ID""
env.AWS_ENDPOINT_URLhttps://www.chatwoot.com/docs/configuring-s3-bucket-as-cloud-storage""
env.AWS_REGIONAmazon region""
env.AWS_SECRET_ACCESS_KEYAmazon secret key ID""
env.FB_APP_IDFor facebook channel. https://www.chatwoot.com/docs/facebook-setup""
env.FB_APP_SECRETFor facebook channel""
env.FB_VERIFY_TOKENFor facebook channel""
env.SLACK_CLIENT_IDFor slack integration""
env.SLACK_CLIENT_SECRETFor slack integration""
env.TWITTER_APP_IDFor twitter channel""
env.TWITTER_CONSUMER_KEYFor twitter channel""
env.TWITTER_CONSUMER_SECRETFor twitter channel""
env.TWITTER_ENVIRONMENTFor twitter channel""

Other Parameters#

KeyTypeDefaultDescription
affinityobject{}
autoscaling.enabledboolfalse
autoscaling.maxReplicasint100
autoscaling.minReplicasint1
autoscaling.targetCPUUtilizationPercentageint80
fullnameOverridestring""
hooks.affinityobject{}
hooks.migrate.envlist[]
hooks.migrate.hookAnnotationstring"post-install,post-upgrade"
hooks.migrate.resources.limits.memorystring"1000Mi"
hooks.migrate.resources.requests.memorystring"1000Mi"
imagePullSecretslist[]
ingress.annotationsobject{}
ingress.enabledboolfalse
ingress.hosts[0].hoststring""
ingress.hosts[0].paths[0].backend.service.namestring"chatwoot"
ingress.hosts[0].paths[0].backend.service.port.numberint3000
ingress.hosts[0].paths[0].pathstring"/"
ingress.hosts[0].paths[0].pathTypestring"Prefix"
ingress.tlslist[]
nameOverridestring""
nodeSelectorobject{}
podAnnotationsobject{}
podSecurityContextobject{}
postgresql.enabledbooltrue
postgresql.nameOverridestring"chatwoot-postgresql"
postgresql.postgresqlDatabasestring"chatwoot_production"
postgresql.postgresqlPasswordstring"postgres"
postgresql.postgresqlUsernamestring"postgres"
redis.auth.passwordstring"redis"
redis.master.persistence.enabledbooltrue
redis.nameOverridestring"chatwoot-redis"
resourcesobject{}
securityContextobject{}
service.portint80
service.typestring"ClusterIP"
serviceAccount.annotationsobject{}
serviceAccount.createbooltrue
serviceAccount.namestring""
services.annotationsobject{}
services.internlPortint3000
services.namestring"chatwoot"
services.targetPortint3000
services.typestring"LoadBalancer"
tolerationslist[]
web.replicaint1
worker.replicaint1

Specify each parameter using the --set key=value[,key=value] argument to helm install. For example,

helm install my-release \  --set env.FRONTEND_URL="chat.yourdomain.com"\    chatwoot/chatwoot

The above command sets the Chatwoot server frontend URL to chat.yourdoamain.com.

Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example,

helm install my-release -f values.yaml chatwoot/chatwoot

Tip You can use the default values.yaml file.

Postgres#

PostgreSQL is installed along with the chart if you choose the default setup. To use an external Postgres DB, please set postgresql.enabled to false and set the variables under the Postgres section above.

Redis#

Redis is installed along with the chart if you choose the default setup. To use an external Redis DB, please set redis.enabled to false and set the variables under the Redis section above