
Deploy Zammad on Your Own Server
Zammad is a web-based, open source user support/ticketing solution.
Want to deploy Zammad on your server faster? Try Senate with one-command setup, automatic HTTPS and monitoring.
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.
Install Docker
Skip this step if Docker is already installed on your server.
curl -fsSL https://get.docker.com | sh
Configure
Customize the settings below. Defaults work for most cases.
General
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
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)"