Back to Apps
Zammad

Deploy Zammad on Your Own Server

Zammad is a web-based, open source user support/ticketing solution.

📦 Other

Want to deploy Zammad on your server faster? Try Senate with one-command setup, automatic HTTPS and monitoring.

Get Started

What is Zammad?

Zammad is a web-based, open source user support/ticketing solution. For Zammad and a database server like PostgreSQL we recommend at least: - 2 CPU cores - 4 GB of RAM (+4 GB if you want to run Elasticsearch on the same server) - For optimal performance up to 40 agents: - 4 CPU cores - 6 GB of RAM (+6 GB if you want to run Elasticsearch on the same server)

Self-Host Zammad

Follow these steps to deploy on your own server.

1

Install Docker

Skip this step if Docker is already installed on your server.

curl -fsSL https://get.docker.com | sh
2

Configure

Customize the settings below. Defaults work for most cases.

General
3

Deploy

Copy the configuration and run it on your server.

services:
  zammad-backup:
    environment:
      BACKUP_SLEEP: "86400"
      HOLD_DAYS: "10"
      POSTGRESQL_DB: zammad_production
      POSTGRESQL_HOST: zammad-postgresql
      POSTGRESQL_PASSWORD: bdc7cc5e74
      POSTGRESQL_PORT: "5432"
      POSTGRESQL_USER: postgresuser
      ZAMMAD_RAILSSERVER_HOST: zammad-railsserver
      ZAMMAD_RAILSSERVER_PORT: "3000"
    volumes:
      - zammad-backup:/var/tmp/zammad
      - zammad-data:/opt/zammad
    depends_on:
      - zammad-railsserver
  zammad-elasticsearch:
    image: zammad/zammad-docker-compose:zammad-elasticsearch-5.1.0-48
    environment:
      discovery.type: single-node
    volumes:
      - zammad-elasticsearch-data:/usr/share/elasticsearch/data
  zammad-init:
    environment:
      AUTOWIZARD_JSON: ""
      ELASTICSEARCH_ENABLED: "true"
      ELASTICSEARCH_HOST: zammad-elasticsearch
      ELASTICSEARCH_NAMESPACE: zammad
      ELASTICSEARCH_PORT: "9200"
      ELASTICSEARCH_REINDEX: "true"
      ELASTICSEARCH_SCHEMA: http
      ELASTICSEARCH_SSL_VERIFY: "true"
      MEMCACHED_HOST: zammad-memcached
      MEMCACHED_PORT: "11211"
      NGINX_PORT: "8080"
      NGINX_SERVER_NAME: _
      NGINX_SERVER_SCHEME: \$scheme
      POSTGRESQL_DB: zammad_production
      POSTGRESQL_DB_CREATE: "true"
      POSTGRESQL_HOST: zammad-postgresql
      POSTGRESQL_PASS: bdc7cc5e74
      POSTGRESQL_PORT: "5432"
      POSTGRESQL_USER: postgresuser
      RAILS_TRUSTED_PROXIES: "['127.0.0.1', '::1']"
      RSYNC_ADDITIONAL_PARAMS: --no-perms --no-owner
      ZAMMAD_RAILSSERVER_HOST: zammad-railsserver
      ZAMMAD_RAILSSERVER_PORT: "3000"
      ZAMMAD_WEBSOCKET_HOST: zammad-websocket
      ZAMMAD_WEBSOCKET_PORT: "6042"
    volumes:
      - zammad-data:/opt/zammad
    depends_on:
      - zammad-postgresql
  zammad-memcached: {}
  zammad-nginx:
    environment:
      ZAMMAD_RAILSSERVER_HOST: zammad-railsserver
      ZAMMAD_RAILSSERVER_PORT: "3000"
      ZAMMAD_WEBSOCKET_HOST: zammad-websocket
      ZAMMAD_WEBSOCKET_PORT: "6042"
    volumes:
      - zammad-data:/opt/zammad
    ports:
      - 8080:8080
    depends_on:
      - zammad-railsserver
  zammad-postgresql:
    image: zammad/zammad-docker-compose:zammad-postgresql-5.1.0-48
    environment:
      POSTGRES_PASSWORD: bdc7cc5e74
      POSTGRES_PORT: "5432"
      POSTGRES_USER: postgresuser
    volumes:
      - zammad-postgresql-data:/var/lib/postgresql/data
  zammad-railsserver:
    environment:
      ZAMMAD_RAILSSERVER_PORT: "3000"
    volumes:
      - zammad-data:/opt/zammad
    depends_on:
      - zammad-memcached
      - zammad-postgresql
  zammad-scheduler:
    volumes:
      - zammad-data:/opt/zammad
    depends_on:
      - zammad-memcached
      - zammad-railsserver
  zammad-websocket:
    environment:
      ZAMMAD_WEBSOCKET_PORT: "6042"
    volumes:
      - zammad-data:/opt/zammad
    depends_on:
      - zammad-memcached
      - zammad-railsserver
volumes:
  zammad-backup: {}
  zammad-data: {}
  zammad-elasticsearch-data: {}
  zammad-postgresql-data: {}

Then run:

docker compose up -d
4

Access

Once started, access your app at http://localhost:8080

Why Self-Host Zammad?

Full Data Ownership

Your data stays on your servers. No third-party access.

No Monthly Fees

Pay only for your server. No per-seat or usage charges.

Complete Control

Customize, backup, and scale on your own terms.

Privacy & Compliance

Meet GDPR, HIPAA, or internal security requirements.

Technical Details

Want to go faster?

Try Senate! Senate handles Docker, HTTPS, updates, and monitoring for you. Deploy any of our 300+ apps with a single command.

Install on any Linux server:

sh -c "$(curl -sSL https://get.senate.sh)"