Skip to content

Self-host Zammad

updated Sep 2026prices checked · Jul 2026
We earn commissions when you shop through the links below. Full disclosure →

A full ticketing helpdesk under AGPL-3.0, owned by the Zammad Foundation and developed by Zammad GmbH: email, web form, chat widget, SMS, Telegram, WhatsApp and Facebook channels plus CTI phone integrations, with SLAs, time accounting, a knowledge base, core workflows and LDAP. The whole codebase is AGPL-3.0; Zammad GmbH sells hosting and support packages, not a paid edition.

Zendesk / yr$300
Self-hosted / yr~$283
You keep$17/yr
Pocket the difference — spin it up on a cheap VPS in minutes.Start free on Kamatera → (opens in new tab)

Key facts

CategoryHelpdesk
LicenseAGPL-3.0
StackRuby, Rails, PostgreSQL, Elasticsearch
Min RAM4096 MB
Official imageyes
Difficulty
Our recommendation

Pick Zammad when you are replacing a Zendesk-style ticket desk and want every feature without a licence key: email (including Google and Microsoft 365 mailboxes), web form, chat, SMS, Telegram, WhatsApp and Facebook channels, CTI phone integrations, SLAs with calendars, time accounting, a knowledge base, core workflows, and LDAP, SAML and OpenID Connect sign-in. The whole codebase is AGPL-3.0, owned by the Zammad Foundation and developed by Zammad GmbH, which sells hosting and support rather than a paid edition. The official `zammad-docker-compose` stack runs Rails, PostgreSQL, Redis, Memcached, Elasticsearch and nginx. If most of your support is live chat and messaging apps, Chatwoot fits better; for a small shared email inbox, FreeScout is much lighter.

What you need

  • Any VPS with at least 4096 MB of RAM
  • A domain you control — most self-hosted setups need HTTPS in front of them
  • About an afternoon — budget time for troubleshooting
Where to host itaffiliate disclosure
Hetzner Cloudrun it on
From $23.59/mo · 2 vCPU / 4 GB / 80 GB · EU + US
Get Hetzner Cloud (opens in new tab)
Kamaterafree trial
From $4/mo · 1 vCPU / 1 GB / 20 GB · US + EU + Asia
Start free on Kamatera → (opens in new tab)
DigitalOceanalso works on
From $6/mo · 1 vCPU / 1 GB / 25 GB · US + EU + Asia
Deploy on DigitalOcean → (opens in new tab)

Paid link — we earn a commission if you shop through it.

Install

Run these commands on your server:

# Zammad — official zammad-docker-compose stack (Zammad 7.2.0, PostgreSQL, Elasticsearch, Redis, Memcached, nginx), per docs.zammad.org/en/latest/install/docker-compose.html
sudo sysctl -w vm.max_map_count=262144   # required by Elasticsearch; persist it in /etc/sysctl.conf
git clone --branch v17.4.0 https://github.com/zammad/zammad-docker-compose.git
cd zammad-docker-compose
cp .env.dist .env   # set POSTGRES_PASS (default: zammad) before the first start
docker compose up -d
# first boot runs DB migrations; on a 2 vCPU box they outlast the railsserver healthcheck and compose exits "unhealthy" — wait ~5 min, then run docker compose up -d again
# open http://SERVER_IP:8080 — the Getting Started wizard creates the first administrator
# for HTTPS load scenarios/add-nginx-proxy-manager.yml or add-cloudflare-tunnel.yml (see the .env comments)

What you take on

Zammad's docs are specific about sizing and about the parts of the Docker stack you own:

non-negotiableSize it properly. The Docker install page asks for at least 4 GB of RAM; the hardware guide sets the minimum at 2 CPU cores and 6 GB of RAM, plus 4 GB when Elasticsearch runs on the same server, and suggests 6 cores and 6 GB (+6 GB for Elasticsearch) for up to 40 agents.
non-negotiableElasticsearch needs vm.max_map_count=262144 on the host; set it with sysctl and persist it. It is optional (scenarios/disable-elasticsearch-service.yml removes it), but upstream says search is then "very limited" and calls it "strongly recommended".
non-negotiablePOSTGRES_PASS defaults to zammad; set your own in .env before the first start. nginx serves plain HTTP on port 8080, so load the Nginx Proxy Manager or Cloudflare Tunnel scenario, or set NGINX_SERVER_SCHEME=https behind your own TLS proxy, or logins fail with a CSRF error.
non-negotiableThe compose repository pins a Zammad image version (VERSION) per release. Upgrade by moving to a newer release of zammad-docker-compose and reading its release notes. A zammad-backup service is included and runs daily; copy its volume off the server. Docker Swarm is not supported.

An alternative to

Head-to-head

More self-hosted tools

Common questions

First start fails with "dependency failed to start: container zammad-docker-compose-zammad-railsserver-1 is unhealthy". Is the install broken?

Usually not. On a small server the first boot runs database migrations for longer than the railsserver health check allows (a 120-second start period, then three 30-second retries), so Compose gives up and never starts nginx. Wait a few minutes for the migrations to finish, then run docker compose up -d again. On our 2 vCPU / 8 GB test server (2026-09-28), a second docker compose up -d about four minutes later brought the web UI up (HTTP 200).

We use analytics cookies (Google Analytics, PostHog) to see which guides are useful. No ad networks, no cross-site tracking. See our privacy policy.