> Source: https://meetrix.io/blogs/zammad-developer-guide/
> Markdown copy of that page. Cite the URL above, not this file.

Development

# Zammad - Developer Guide

[By Binuka Ranatunga](https://meetrix.io/blogs/authors/binuka-ranatunga/) • September 18, 2026 • 9 min read

Learn how to install and configure Zammad on AWS with our step-by-step deployment guide. This comprehensive resource walks you through provisioning your cloud environment, securely deploying Zammad, and operating it reliably in a self-hosted AWS environment. Whether you're consolidating support tickets from email and chat, building a searchable knowledge base, or replacing a hosted help desk subscription, this guide will help you set up and run Zammad efficiently in the cloud.

Zammad pairs well with the rest of a self-hosted support stack - if your team already runs a [team chat tool](https://meetrix.io/blogs/rocketchat-vs-mattermost/) for internal communication, Zammad handles the customer-facing side without sending ticket data to a third party. Let's get started deploying Zammad on AWS.

Prerequisites

Before you get started with the Zammad AMI, ensure you have the following prerequisites:

-   Basic knowledge of AWS services, including EC2 instances and CloudFormation.
-   An active AWS account with appropriate permissions.
-   Enough vCPU limit to create an instance (Follow [https://meetrix.io/blogs/increase-aws-vcpu-quota/](https://meetrix.io/blogs/increase-aws-vcpu-quota/)).

## Launching the AMI

### Step 1: Find and Select the Zammad AMI

1.  Log in to your AWS Management Console.
2.  Navigate to '[Zammad](https://aws.amazon.com/marketplace/pp/prodview-fqqfwzfdhskdm)' in AWS Marketplace.

### Step 2: Initial Setup & Configuration

1.  Click the **"Continue to Subscribe"** button.
2.  After subscribing, accept the terms and click **"Accept Terms"**.
3.  Wait a few minutes until processing completes, then click **"Continue to Configuration"**.
4.  Select **"CloudFormation script to deploy Zammad"** as the fulfillment option and choose your region. Click **"Continue to Launch"**.
5.  From the "Choose Action" dropdown, select **"Launch CloudFormation"** and click **"Launch"**.

## Create CloudFormation Stack

### Step 1: Create a stack

1.  Ensure the **"Template is ready"** option is selected under "Prepare template".
2.  Click "Next".

### Step 2: Specify stack options

1.  Provide a unique **"Stack name"**.
2.  Enter the **"AdminEmail"** used for SSL certificate generation.
3.  Enter a value for **"DeploymentName"**.
4.  Provide a public domain for **"DomainName"**. Zammad will automatically try to set up SSL if the domain is hosted on Route53. If unsuccessful, you must set up SSL manually.
5.  Choose an instance type **"InstanceType"** (Recommended: **t3a.xlarge**, since Zammad's Elasticsearch and Redis services need more headroom than a single-service AMI).
6.  Select your preferred **"KeyName"**.
7.  Provide an S3 bucket name for **"S3Bucket"**, used for storing PostgreSQL database backups.
8.  Set **"SSHLocation"** to 0.0.0.0/0.
9.  Keep **"SubnetCidrBlock"** as 10.0.0.0/24.
10.  Keep **"VpcCidrBlock"** as 10.0.0.0/16.
11.  Click "Next".

### Step 3: Configure stack options

1.  Choose "Roll back all stack resources" and "Delete all newly created resources" under "Stack failure options".
2.  Click "Next".

### Step 4: Review

Review and verify the details you've entered. Here's an example of a completed set of stack parameters:

![CloudFormation Parameters tab listing the Zammad stack parameters including AdminEmail, AmiId, DeploymentName, DomainName, InstanceType set to t3a.xlarge, KeyName, and S3Bucket](https://meetrix.io/blog-images/paas-dev-guides/zammad/zammad-01.png)

1.  Tick **"I acknowledge that AWS CloudFormation might create IAM resources with custom names"**.
2.  Click **"Submit"**.

![AWS CloudFormation capabilities notice for AWS::IAM::Policy and AWS::IAM::Role with the IAM acknowledgement checkbox ticked](https://meetrix.io/blog-images/paas-dev-guides/zammad/zammad-02.png)

Afterward, you'll be directed to the CloudFormation stacks page. Please wait for 5-10 minutes until the stack has been successfully created.

![Zammad CloudFormation stack Outputs tab showing DashboardUrl, DashboardUrlIp, and PublicIp after a successful CREATE\_COMPLETE](https://meetrix.io/blog-images/paas-dev-guides/zammad/zammad-03.png)

## Update DNS

### Step 1: Copy IP Address

Copy the public IP labeled **"PublicIp"** in the **"Outputs"** tab.

![Copying the PublicIp value from the CloudFormation Outputs tab](https://meetrix.io/blog-images/paas-dev-guides/zammad/zammad-04.png)

### Step 2: Update DNS

1.  Go to AWS Route 53 and navigate to "Hosted Zones".
2.  Click **Create record**.
3.  Add a **record name** and paste the copied **PublicIp** into the **value** textbox.
4.  Click "Save".

![Creating an A record in AWS Route 53 for the Zammad domain](https://meetrix.io/blog-images/paas-dev-guides/zammad/zammad-05.png)

## Access Zammad

Access Zammad using the **"DashboardUrl"** or **"DashboardUrlIp"** provided in the Outputs tab.

Note

If you receive a "502 Bad Gateway" error, wait approximately **5 minutes** and refresh the page. The application may still be initializing.

![502 Bad Gateway error page shown by nginx while Zammad is still starting up](https://meetrix.io/blog-images/paas-dev-guides/zammad/zammad-13.png)

On first access, Zammad walks you through its onboarding wizard instead of a plain login form.

![Zammad onboarding screen with options to set up a new system or migrate from another system](https://meetrix.io/blog-images/paas-dev-guides/zammad/zammad-06.png)

Click **"Set up a new system"** to create your admin account and complete the initial configuration. If your team already runs a centralized identity provider, Zammad also supports SAML and OAuth2 login - see our [Authentik developer guide](https://meetrix.io/blogs/authentik-developer-guide/) if you want to put Zammad behind the same SSO your other self-hosted tools use.

## Generate SSL Manually

Zammad will automatically try to set up SSL when a Route53-hosted domain is provided. If it fails, follow these steps to generate SSL manually.

### Step 1: Copy IP Address

Follow the **Update DNS** steps above, if not already done, and copy the Public IP indicated as **"PublicIp"** in the **"Outputs"** tab.

### Step 2: Log in to the server

1.  Open the terminal and go to the directory where your private key is located.
2.  Run: **ssh -i <your key name> ubuntu@<Public IP address>**
3.  Type "yes" and press Enter to confirm.

![Logging into the Zammad server via SSH and confirming the host key fingerprint](https://meetrix.io/blog-images/paas-dev-guides/zammad/zammad-07.png)

### Step 3: Generate SSL

Run the following command and follow the prompts:

```plaintext
sudo /root/certificate_generate_standalone.sh
```

## Check Server Logs

### Step 1: Log in to the server

```plaintext
ssh -i <your key name> ubuntu@<Public IP address>
```

![Logging into the Zammad server via SSH from a second session](https://meetrix.io/blog-images/paas-dev-guides/zammad/zammad-08.png)

### Step 2: Check the logs

```plaintext
sudo docker ps

sudo docker logs <container-id-prefix>
```

## Shutting Down Zammad

1.  In CloudFormation, click the link labeled **"Instance"** in the **"Resources"** tab to open the EC2 instance.
2.  Stop the Zammad instance from the **Instance state** dropdown. You can restart it later as needed.

![Navigating to the EC2 instance from the CloudFormation Resources tab](https://meetrix.io/blog-images/paas-dev-guides/zammad/zammad-09.png) ![Stopping the Zammad EC2 instance from the instance state dropdown](https://meetrix.io/blog-images/paas-dev-guides/zammad/zammad-10.png)

## Remove Zammad

Delete the CloudFormation stack from the AWS Management Console under "CloudFormation Stacks" by clicking "Delete".

## Upgrades

When a new version is available in AWS Marketplace, remove the previous deployment after backing up necessary server data, and relaunch with the new version.

## Troubleshoot

1.  If you face vCPU quota limits, request an increase: [How to increase AWS quota](https://meetrix.io/blogs/increase-aws-vcpu-quota/).
![AWS vCPU quota limit error when launching the Zammad stack](https://meetrix.io/blog-images/paas-dev-guides/zammad/zammad-11.png)3.  If you face _insufficient capacity_ errors while creating the stack, try another region or time.
![AWS insufficient instance capacity error during stack creation](https://meetrix.io/blog-images/paas-dev-guides/zammad/zammad-12.png)

Check whether the instance storage is full - Zammad's Elasticsearch index can grow quickly on busy support desks.

-   Log into the server and run:

```plaintext
df -h
```

![Checking disk usage on the Zammad server with df -h](https://meetrix.io/blog-images/paas-dev-guides/zammad/zammad-14.png)

-   If the root volume is between 90-100%, resize the EBS volume (per AWS docs), then reboot and restart the service.

## Conclusion

The Meetrix Zammad Deployment Guide helps you integrate a self-hosted help desk into your AWS environment. Whether you're a DevOps engineer, support lead, or IT administrator, this guide provides step-by-step instructions for a secure and reliable setup. For a broader look at self-hosting business software on AWS, see our [ERPNext developer guide](https://meetrix.io/blogs/erpnext-developer-guide/) or our roundup of [collaboration tools on AWS Marketplace](https://meetrix.io/blogs/best-collaboration-tools-aws-marketplace/).

## Technical Support

Reach out to Meetrix Support ([aws@meetrix.io](mailto:aws@meetrix.io)) for assistance with Zammad issues.

For questions about Zammad itself rather than the AWS deployment, the [official Zammad documentation](https://docs.zammad.org/), the [Zammad GitHub repository](https://github.com/zammad/zammad), and [zammad.com](https://zammad.com/) are the best starting points.

## Frequently Asked Questions

What is Zammad?

Zammad is an open-source help desk and customer support ticketing system. It brings email, chat, phone, and social media requests into a single queue, and adds a knowledge base, SLA tracking, and reporting on top.

What are the prerequisites for installing Zammad on AWS?

You need basic knowledge of AWS services (EC2, CloudFormation), an active AWS account with appropriate permissions, and a sufficient vCPU limit to launch the required instance type.

Which instance type is recommended, and why?

t3a.xlarge is recommended as a baseline. Zammad's stack bundles PostgreSQL, Redis, and Elasticsearch alongside the Rails application, so it needs more memory and CPU headroom than a typical single-service AMI.

What is the S3Bucket parameter used for?

It points the instance at an S3 bucket in your own account for storing PostgreSQL database backups. You can leave the default if you don't need automated backups yet.

What if the automatic SSL setup fails?

Zammad tries to provision SSL automatically when the domain is hosted on Route53. If that fails, SSH into the instance and run the certificate script manually - see the Generate SSL Manually section below.

How do I handle upgrades?

When a new version is available in the AWS Marketplace, back up your data, remove the previous deployment, then relaunch with the new version.

How do I get technical support?

Reach out to Meetrix Support at [aws@meetrix.io](mailto:aws@meetrix.io) for assistance with Zammad issues.

## Ready to Deploy Your Own Zammad Instance?

Get started in minutes with our pre-configured AMI and bring your support tickets, knowledge base, and SLAs into a self-hosted help desk you control.

[Deploy Zammad from AWS Marketplace](https://aws.amazon.com/marketplace/pp/prodview-fqqfwzfdhskdm)

Meetrix Store

Pre-configured open source images for AWS and Google Cloud.

[Browse products](https://meetrix.io/store/)

Meetrix Store New

One-click deploys on AWS and Google Cloud.

-    [Jitsi Meet Self-hosted video calls for 50 to 500 users](https://meetrix.io/store/jitsi-meet/)
-    [RustDesk Remote desktop AMI, a TeamViewer alternative](https://meetrix.io/store/rustdesk/)
-    [Coturn TURN/STUN for WebRTC, no per-minute relay fees](https://meetrix.io/store/coturn/)
-    [Listmonk Newsletters with no per-subscriber fees](https://meetrix.io/store/listmonk/)
-    [Supabase Postgres, Auth, Storage and Realtime, self-hosted](https://meetrix.io/store/supabase/)
-    [OpenVPN Encrypted remote access, no per-user fees](https://meetrix.io/store/openvpn/)

[Browse all products](https://meetrix.io/store/)
