Product analytics platform for mobile, web, and desktop applications. Countly provides event tracking,
crash reporting, push notifications, A/B testing, funnel analysis, and a plugin system with 41+ optional
modules — all backed by a MongoDB database.
Key Features
Event and session tracking — capture user actions across mobile, web, and desktop
Crash reporting — collect and analyze application errors
Push notifications — send targeted messages via the built-in notification service
A/B testing and funnels — experiment and analyze user conversion flows
Plugin system — 41+ configurable feature plugins
Dual-port architecture — separate API (3001) and Dashboard (6001) endpoints
MongoDB backend — bundled subchart or external connection
S3 backup — scheduled mongodump CronJob to S3-compatible storage
API and Dashboard run on separate ports in the same container
Countly exposes two endpoints from a single container pod:
Port 3001 (API) — receives analytics events from your application SDKs. Mobile apps, websites, and desktop clients send data here.
Port 6001 (Dashboard) — the web UI for viewing analytics, configuring apps, and managing users.
The Ingress typically exposes only the Dashboard (port 6001) for internal access. If your SDKs run
outside the cluster, you must also expose port 3001 externally — either via a separate Ingress or a
LoadBalancer Service.
Extra environment variables for advanced configuration.
Database — External MongoDB
Used when mongodb.enabled: false.
Parameter
Type
Default
Description
externalMongodb.enabled
boolean
false
Use external MongoDB instead of the bundled subchart.
externalMongodb.uri
string
""
MongoDB connection URI.
externalMongodb.existingSecret
string
""
Existing secret containing the MongoDB URI.
externalMongodb.existingSecretUriKey
string
mongodb-uri
Key inside the existing secret for the URI.
Database — MongoDB Subchart
Parameter
Type
Default
Description
mongodb.enabled
boolean
true
Deploy the bundled MongoDB subchart.
mongodb.architecture
string
standalone
MongoDB architecture.
mongodb.auth.enabled
boolean
true
Enable MongoDB authentication.
mongodb.auth.rootUser
string
root
MongoDB root username.
mongodb.auth.rootPassword
string
""
MongoDB root password. Auto-generated if empty.
Backup
Parameter
Type
Default
Description
backup.enabled
boolean
false
Enable scheduled MongoDB S3 backup CronJob.
backup.schedule
string
"0 3 * * *"
Cron schedule for backups.
backup.suspend
boolean
false
Suspend the CronJob without deleting it.
backup.concurrencyPolicy
string
Forbid
CronJob concurrency policy.
backup.successfulJobsHistoryLimit
integer
3
Number of successful Job records to keep.
backup.failedJobsHistoryLimit
integer
3
Number of failed Job records to keep.
backup.backoffLimit
integer
1
Job retry limit.
backup.archivePrefix
string
countly
Prefix for backup archive filenames.
backup.images.mongodb
string
docker.io/library/mongo:8.0.34
Image for mongodump.
backup.images.uploader
string
docker.io/helmforge/mc:1.0.0
Image for S3 upload.
backup.resources
object
{}
Resources for backup containers.
backup.database.uri
string
""
Override MongoDB URI for backup (uses app URI if empty).
backup.database.existingSecret
string
""
Existing Secret containing the backup MongoDB URI.
backup.database.existingSecretUriKey
string
mongodb-uri
URI key in the backup MongoDB Secret.
backup.database.mongodumpArgs
array or legacy string
[]
Extra arguments passed without shell evaluation.
backup.s3.endpoint
string
""
S3-compatible endpoint URL.
backup.s3.bucket
string
""
Target bucket name.
backup.s3.prefix
string
countly
Key prefix within the bucket.
backup.s3.createBucketIfNotExists
boolean
true
Create the bucket automatically if it does not exist.
backup.s3.existingSecret
string
""
Existing secret with S3 access and secret keys.
backup.s3.existingSecretAccessKeyKey
string
access-key
Key in the existing secret for the S3 access key.
backup.s3.existingSecretSecretKeyKey
string
secret-key
Key in the existing secret for the S3 secret key.
backup.s3.accessKey
string
""
Inline S3 access key (ignored when existingSecret is set).
backup.s3.secretKey
string
""
Inline S3 secret key (ignored when existingSecret is set).
Service
Parameter
Type
Default
Description
service.type
string
ClusterIP
Kubernetes service type.
service.port
integer
80
Dashboard service port (maps to 6001).
service.apiPort
integer
3001
SDK API service port.
service.annotations
object
{}
Annotations for the Service.
Ingress
Parameter
Type
Default
Description
ingress.enabled
boolean
false
Enable an Ingress resource for the Dashboard.
ingress.ingressClassName
string
traefik
Ingress class name.
ingress.annotations
object
{}
Annotations for the Ingress (e.g. cert-manager).
ingress.hosts
array
[]
Ingress host and path rules.
ingress.tls
array
[]
TLS configuration (secret name and hosts).
Probes
Parameter
Type
Default
Description
probes.startup.enabled
boolean
true
Enable startup probe.
probes.startup.initialDelaySeconds
integer
20
Startup probe initial delay.
probes.startup.periodSeconds
integer
5
Startup probe period.
probes.startup.timeoutSeconds
integer
3
Startup probe timeout.
probes.startup.failureThreshold
integer
30
Startup probe failure threshold.
probes.liveness.enabled
boolean
true
Enable liveness probe.
probes.liveness.initialDelaySeconds
integer
0
Liveness probe initial delay.
probes.liveness.periodSeconds
integer
15
Liveness probe period.
probes.liveness.timeoutSeconds
integer
5
Liveness probe timeout.
probes.liveness.failureThreshold
integer
3
Liveness probe failure threshold.
probes.readiness.enabled
boolean
true
Enable readiness probe.
probes.readiness.initialDelaySeconds
integer
0
Readiness probe initial delay.
probes.readiness.periodSeconds
integer
10
Readiness probe period.
probes.readiness.timeoutSeconds
integer
5
Readiness probe timeout.
probes.readiness.failureThreshold
integer
3
Readiness probe failure threshold.
Resources and Security
Parameter
Type
Default
Description
resources
object
{}
CPU and memory requests and limits.
podSecurityContext
object
RuntimeDefault
Pod-level security context.
securityContext
object
hardened root exception
Main container security context.
Service Account
Parameter
Type
Default
Description
serviceAccount.create
boolean
true
Create a dedicated ServiceAccount.
serviceAccount.name
string
""
Override the ServiceAccount name.
serviceAccount.annotations
object
{}
Annotations for the ServiceAccount.
serviceAccount.automountServiceAccountToken
boolean
false
Mount a Kubernetes API token.
Network Policy
Parameter
Type
Default
Description
networkPolicy.enabled
boolean
true
Create an ingress and egress NetworkPolicy.
networkPolicy.ingressFrom
array
[]
Sources allowed to reach both Countly listeners.
networkPolicy.egress
array
[{}]
Egress rules for MongoDB and plugin integrations.
Scheduling
Parameter
Type
Default
Description
nodeSelector
object
{}
Node selector for scheduling.
tolerations
array
[]
Tolerations for scheduling.
affinity
object
{}
Affinity rules.
topologySpreadConstraints
array
[]
Topology spread constraints.
priorityClassName
string
""
PriorityClass for the pod.
terminationGracePeriodSeconds
integer
30
Termination grace period.
podLabels
object
{}
Extra labels for the pod.
podAnnotations
object
{}
Extra annotations for the pod.
Extra
Parameter
Type
Default
Description
extraVolumes
array
[]
Extra volumes to attach to the pod.
extraVolumeMounts
array
[]
Extra volume mounts for the container.
extraManifests
array
[]
Extra Kubernetes manifests deployed alongside the chart.
Security and Production Operations
The chart disables Kubernetes API token mounting, applies
RuntimeDefault seccomp, creates a NetworkPolicy, and runs the MongoDB wait
and backup containers as non-root. The pinned upstream combined image starts
/sbin/my_init as root and then drops the API and dashboard processes to the
countly user. This upstream entrypoint constraint is why the main container
does not force runAsNonRoot or a read-only root filesystem.
For production:
keep MongoDB and S3 credentials in existing Secrets or External Secrets;
replace the permissive default egress with the exact MongoDB, DNS, mail,
webhook, push-provider, and plugin destinations you need;
expose the dashboard and SDK API only through TLS and apply edge controls;
use a replicated or managed MongoDB service and test a restore;
size ephemeral storage for one compressed backup archive;
verify both listeners after upgrades, especially when using custom ports.
The default Ingress and HTTPRoute expose the dashboard only. SDK clients outside
the cluster require a deliberate route or load balancer for service.apiPort.
Upgrade Compatibility
Older Countly chart releases accepted a space-delimited string in
backup.database.mongodumpArgs. Existing releases can upgrade without resetting
their values: the chart converts that legacy string into individual arguments.
New and updated configurations should use an array so argument boundaries remain
explicit.