Zammad
Overview
Zammad is a modern open source helpdesk and customer-support platform. It is a shared inbox and ticketing system that brings requests from email, web forms, chat, phone and social channels into one agent workspace. It includes SLAs, triggers and schedulers, a knowledge base, reporting, and a full web UI for agents and customers.
Zammad is a Ruby on Rails application backed by PostgreSQL, with Redis for background jobs and Elasticsearch for fast full-text ticket and knowledge-base search. The SecureAnyCloud image installs Zammad 7.1 from the official Zammad package repository. It keeps the database and search index on a dedicated Azure data disk, and it generates the initial administrator account and the application secret uniquely on the first boot of each VM.
What you get:
- Zammad 7.1 installed from the official Zammad apt repository (AGPL-3.0)
- The
zammad-web(Puma railsserver),zammad-websocketandzammad-workerservices, fronted by nginx on:80with an unauthenticated/healthzprobe - PostgreSQL 16 and Redis bound to loopback, and Elasticsearch 8 bound to
127.0.0.1:9200with a conservative512m-1gheap. X-Pack security is disabled because Elasticsearch is never network-reachable - A single administrator account, created uniquely on first boot and recorded in a root-only credentials file, so no default login ships in the image
- The Getting Started wizard closed on the shipped image, so nobody can claim the instance before you retrieve the per-VM admin password
- A per-VM Rails application secret generated on first boot, with none baked into the image
- A dedicated 20 GiB Azure data disk at
/var/lib/zammad-datathat holds the PostgreSQL cluster and the Elasticsearch index, captured into the image and re-provisioned with every VM - 24/7 SecureAnyCloud support
Prerequisites
You need an active Azure subscription, an SSH key pair, and a VNet with a subnet in the target region.
Standard_D4s_v5 (4 vCPU / 16 GiB RAM) is the recommended size. Zammad runs the Rails web, websocket and worker services alongside PostgreSQL, Redis and Elasticsearch, so do not go below 8 GiB of RAM.
Configure the network security group (NSG) to allow inbound 22/tcp from your management network, and 80/tcp for the web interface. Also allow 443/tcp once you add your own TLS certificate.
The appliance serves plain HTTP on port 80, so the UI works immediately. For production, add a domain and TLS (see Step 9, Harden for production).
Step 1 - Deploy from the Azure Marketplace
Sign in to the Azure Portal, choose Create a resource, search the Marketplace for Zammad by SecureAnyCloud, and select Create.
On the Basics tab, pick your subscription, resource group, region and size (Standard_D4s_v5). Under Administrator account, choose SSH public key and paste your key. Under Inbound port rules, allow SSH (22) and HTTP (80).
Review the dedicated data disk on the Disks tab, then select Review + create and Create.
Step 2 - Deploy from the Azure CLI
# Accept the Marketplace terms once per subscription (required before the first CLI deploy)
az vm image terms accept --urn sac1647283583153:zammad-ubuntu-24-04:default:latest
az vm create \
--resource-group <your-rg> \
--name zammad \
--image sac1647283583153:zammad-ubuntu-24-04:default:latest \
--size Standard_D4s_v5 \
--admin-username azureuser \
--ssh-key-values ~/.ssh/id_ed25519.pub \
--vnet-name <your-vnet> --subnet <your-subnet> \
--public-ip-sku Standard
az vm open-port --resource-group <your-rg> --name zammad --port 80 --priority 1010Step 3 - Connect to your VM
ssh azureuser@<vm-public-ip>Step 4 - Confirm the services are running
On first boot, the image generates the per-VM application secret, sets the Zammad fqdn to the VM public IP, creates the administrator account, rebuilds the search index and starts the stack. Confirm that all services are active and bound to loopback:
PG=$(ls /etc/postgresql | sort -V | tail -1)
systemctl is-active postgresql@${PG}-main elasticsearch redis-server nginx zammad-web zammad-websocket zammad-workersudo ss -tlnp | grep -E ':80 |127.0.0.1:3000 |127.0.0.1:6042 |127.0.0.1:9200 |127.0.0.1:5432 |127.0.0.1:6379 'Step 5 - Check health and search
The unauthenticated :80/healthz endpoint returns 200 for load-balancer probes. The Elasticsearch index powers Zammad's full-text ticket and knowledge-base search. The system_init_done setting confirms that the Getting Started wizard is closed:
curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1/healthzcurl -s 'http://127.0.0.1:9200/_cat/indices?v' | grep zammadStep 6 - Retrieve the per-VM admin credentials
First boot generates the administrator account and a strong password and writes them to a root-only file. The Rails application secret is unique to this VM and never leaves it:
sudo cat /root/zammad-credentials.txtThe file records the web URL and the admin email and password. The PostgreSQL cluster and the Elasticsearch index live on the dedicated data disk:
findmnt -no SOURCE,TARGET,FSTYPE,SIZE /var/lib/zammad-dataStep 7 - Sign in and work your ticket queue
Browse to http://<vm-public-ip>/ and sign in with the admin email and password from the credentials file. Zammad opens on your ticket overviews, the agent workspace where you triage incoming requests. Each overview (Open Tickets, Unassigned & Open, Escalated, and so on) is a live, filterable queue.
Open a ticket to see the full conversation: every article (email, note or chat message) and the customer and organisation. In the right-hand panel, you set the owner, state, priority and tags, add internal notes, and reply to the customer.
Step 8 - Administration settings
Open the admin area (the gear icon, or http://<vm-public-ip>/#manage) to configure the system. From the admin area, you manage users and agents, groups, roles and permissions, organisations, ticket overviews, SLAs, triggers and schedulers, macros, text modules, the knowledge base, and channels (email, chat and more).
Step 9 - Harden for production
The appliance boots ready to evaluate on a bare IP over plain HTTP. Before you go live, complete the following:
- Set your fully qualified domain name. Point a DNS record (for example
helpdesk.example.com) at the VM public IP. Then set the name in Admin -> Settings -> System -> Base, or from the shell:
bash sudo zammad run rails r "Setting.set('fqdn','helpdesk.example.com')"
- Add TLS. Put a certificate in front of nginx (for example with
certbot), open port443, and set the Zammadhttp_typetohttpsso that generated links and email use HTTPS. - Configure an email channel. In Admin -> Channels -> Email, add the mailbox that Zammad polls for new tickets and the SMTP server that it sends replies and notifications through. This turns Zammad into a shared support inbox and delivers password-reset emails.
- Review agents, groups and roles. Create individual agent accounts (do not share the initial admin), assign them to groups, and define which groups each role can access.
Maintenance and production notes
- Data and search on the data disk. The PostgreSQL cluster and the Elasticsearch index live on the dedicated 20 GiB disk at
/var/lib/zammad-data. For a busy helpdesk, attach a larger disk and monitor free space. - Search index. If search results look stale, rebuild the index with
sudo zammad run rake zammad:searchindex:rebuild. - Backups. Back up the PostgreSQL database, which also holds ticket attachments, regularly. You can always rebuild the Elasticsearch index from the database.
- Updates. Apply OS security updates with
sudo apt update && sudo apt upgrade. Zammad version upgrades follow the upstream release notes and are delivered through the Zammad package repository. - Security. The appliance ships no default login. The administrator account and the application secret are generated uniquely per VM on first boot, and the Getting Started wizard is closed. Keep
/root/zammad-credentials.txtprotected and change the admin password after your first sign-in.
Zammad is free software licensed under the AGPL-3.0. SecureAnyCloud produces this image, which is not affiliated with, sponsored by or endorsed by Zammad GmbH or the Zammad Foundation. "Zammad" is a trademark of its respective owner.
Deploy on Azure
Launch Zammad on Ubuntu 24.04 LTS on Azure with 24/7 support from SecureAnyCloud.
View this image
Need Help?
Our support team is available 24/7.
sales@secureanycloud.com