Skip to main content
Helm is the supported Kubernetes deployment path. The chart renders the web server, mail control service, MongoDB, Redis, WildDuck, Haraka, ZoneMTA, and Rspamd from one OCI chart. Only the web server should be exposed outside the cluster. Complete the Self-Host Setup Guide before installing the chart.

Chart reference

The chart is published as an OCI artifact:
No Helm repository add step is required.

Minimal values

The chart uses semantic values, not a raw environment-variable bag.

Admin transactional SMTP

Transactional SMTP is only for system email from the admin instance. It is not used for user-domain mail.

Secret references

Sensitive values support valueFrom.secretKeyRef where the chart can render them as container environment variables:
Secrets rendered into bundled service config files, such as mailRuntime.loopSecret and mailRuntime.zonemtaRelayPassword, must use inline value entries because those values are rendered into ConfigMaps at install time.

Logging controls

The web server and mail-control-service emit operational info/error logs to stdout/stderr by default. Leave debug namespaces unset for normal production.
Set webServer.debug.enabled to true only for short-lived web-server diagnostics. Helm renders the safe app:frontend namespace only; arbitrary DEBUG wildcard patterns are not accepted. The mail-control-service does not require a logging environment variable.

Install or upgrade

Render before installing:
Install or upgrade:
Pin production rollouts with --version.

Public exposure

publicHostname must route to the web server service:
Use chart Ingress when your cluster has a public ingress controller:
If your cluster is not directly public, run tunnel or proxy infrastructure outside the chart and route it to the web server service:
Do not expose the internal control API, WildDuck, MongoDB, Redis, Haraka, ZoneMTA, or Rspamd.

Persistence

The chart renders PersistentVolumeClaims for MongoDB, Redis, Rspamd, and the Haraka queue. The bundled MongoDB runs as a single-node replica set named rs0, supporting MongoDB transactions and oplog-based logical backups.
Set existingClaim when your environment manages storage independently.
persistence.enabled=false uses emptyDir for stateful services. Data is lost when pods restart.

Example values

Example values files are committed under docs/examples/helm/:
  • values-basic.yaml
  • values-existing-secret.yaml