If you’re looking to run a robust open-source helpdesk on your AlmaLinux VPS, Zammad is a great pick. It’s modern, feature-packed, and supports everything from ticketing to chat and reporting. This guide will walk you through installing Zammad step by step.
What is Zammad?
Zammad is an open-source helpdesk and customer support system designed to help teams manage communication with customers across multiple channels. It provides a central place for handling tickets, emails, chats, phone calls, social media messages (like Twitter and Facebook), and more.
Key Features of Zammad:
- Ticketing System: Centralized management of support requests (tickets).
- Multi-Channel Support: Integrates with email, web forms, chat, Twitter, Facebook, and phone systems.
- User Roles & Permissions: Granular control over what users and agents can access.
- Full-Text Search: Fast and intuitive search across all tickets and customer data.
- Knowledge Base: Built-in self-service portal to reduce repetitive tickets.
- Time Tracking: Keep track of how much time is spent on tickets.
- API Access: REST API for integrations and automations.
- Modern UI: Built with a responsive, user-friendly interface.
- Self-hosted or Cloud: Available as a self-hosted app (great for privacy) or through Zammad’s cloud offering.
Ideal Use Cases:
- IT support desks
- Customer service teams
- Managed service providers
- Web hosting companies
- Any business needing structured support workflows
Requirements
Before you begin, make sure you have:
- AlmaLinux 8 or AlmaLinux 9 VPS
- Root or sudo access
- At least 2 GB RAM (4 GB+ recommended)
- A domain name (optional, but useful for production)
- SELinux disabled or in permissive mode (Zammad doesn’t play nice with enforcing mode)
How to Install Zammad on AlmaLinux VPS
To install Zammad on AlmaLinux VPS, follow the steps below:
-
Update the System
sudo dnf update -y sudo dnf install epel-release nano -y sudo dnf install imlib2 -ysudo dnf update -y sudo dnf install epel-release nano -y sudo dnf install imlib2 -ysudo dnf update -y sudo dnf install epel-release nano -y sudo dnf install imlib2 -y
-
Set Hostname (Optional but Recommended)
hostnamectl set-hostname support.yourdomain.comhostnamectl set-hostname support.yourdomain.comhostnamectl set-hostname support.yourdomain.com
Add your IP and hostname to
/etc/hosts
:sudo nano /etc/hostssudo nano /etc/hostssudo nano /etc/hosts
Example entry:
127.0.0.1 support.yourdomain.com support127.0.0.1 support.yourdomain.com support127.0.0.1 support.yourdomain.com support
-
Disable SELinux (or set to permissive)
Check status:
sestatussestatussestatus
If enforcing, set to permissive:
sudo setenforce 0sudo setenforce 0sudo setenforce 0
To make it permanent:
sudo nano /etc/selinux/configsudo nano /etc/selinux/configsudo nano /etc/selinux/config
Change:
SELINUX=permissiveSELINUX=permissiveSELINUX=permissive
Reboot if needed.
-
Add Dependencies
sudo dnf install postgresql nginx nodejs redis memcached sqlite-devel libyaml libyaml-devel -y curl -fsSL https://get.pnpm.io/install.sh | sh -sudo dnf install postgresql nginx nodejs redis memcached sqlite-devel libyaml libyaml-devel -y curl -fsSL https://get.pnpm.io/install.sh | sh -sudo dnf install postgresql nginx nodejs redis memcached sqlite-devel libyaml libyaml-devel -y curl -fsSL https://get.pnpm.io/install.sh | sh -
-
Add Elasticsearch
sudo tee /etc/yum.repos.d/elasticsearch.repo << EOF [elasticsearch-7.x] name=Elasticsearch repository for 7.x packages baseurl=https://artifacts.elastic.co/packages/7.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md EOFsudo tee /etc/yum.repos.d/elasticsearch.repo << EOF [elasticsearch-7.x] name=Elasticsearch repository for 7.x packages baseurl=https://artifacts.elastic.co/packages/7.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md EOFsudo tee /etc/yum.repos.d/elasticsearch.repo << EOF [elasticsearch-7.x] name=Elasticsearch repository for 7.x packages baseurl=https://artifacts.elastic.co/packages/7.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md EOF
Install Elasticsearch:
sudo dnf install java-11-openjdk-devel -y rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch sudo dnf install elasticsearch -ysudo dnf install java-11-openjdk-devel -y rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch sudo dnf install elasticsearch -ysudo dnf install java-11-openjdk-devel -y rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch sudo dnf install elasticsearch -y
Configure Elasticsearch:
sudo nano /etc/elasticsearch/elasticsearch.ymlsudo nano /etc/elasticsearch/elasticsearch.ymlsudo nano /etc/elasticsearch/elasticsearch.yml
Add the following:
cluster.name: es-almalinux node.name: es-node network.host: 127.0.0.1cluster.name: es-almalinux node.name: es-node network.host: 127.0.0.1cluster.name: es-almalinux node.name: es-node network.host: 127.0.0.1
Start and enable Elasticsearch:
sudo systemctl daemon-reload sudo systemctl start elasticsearch sudo systemctl enable elasticsearchsudo systemctl daemon-reload sudo systemctl start elasticsearch sudo systemctl enable elasticsearchsudo systemctl daemon-reload sudo systemctl start elasticsearch sudo systemctl enable elasticsearch
-
Add Zammad Repository
Zammad provides its own YUM repo:
sudo rpm --import https://dl.packager.io/srv/zammad/zammad/key sudo wget -O /etc/yum.repos.d/zammad.repo \ https://dl.packager.io/srv/zammad/zammad/stable/installer/el/8.reposudo rpm --import https://dl.packager.io/srv/zammad/zammad/key sudo wget -O /etc/yum.repos.d/zammad.repo \ https://dl.packager.io/srv/zammad/zammad/stable/installer/el/8.reposudo rpm --import https://dl.packager.io/srv/zammad/zammad/key sudo wget -O /etc/yum.repos.d/zammad.repo \ https://dl.packager.io/srv/zammad/zammad/stable/installer/el/8.repo
(Replace
/el/8.repo
with/el/9.repo
if you’re using AlmaLinux 9.) -
Install Zammad
sudo dnf install zammad -ysudo chmod -R 755 /opt/zammad/public/sudo dnf install zammad -y sudo chmod -R 755 /opt/zammad/public/sudo dnf install zammad -y sudo chmod -R 755 /opt/zammad/public/
This will install:
- Zammad app
- Nginx (as web server)
- PostgreSQL (as database)
- Elasticsearch (for search functionality)
- Systemd services
-
Start and Enable Services
sudo systemctl enable --now zammad sudo systemctl enable --now elasticsearch sudo systemctl enable --now nginxsudo systemctl enable --now zammad sudo systemctl enable --now elasticsearch sudo systemctl enable --now nginxsudo systemctl enable --now zammad sudo systemctl enable --now elasticsearch sudo systemctl enable --now nginx
-
Configure Firewall
Open required ports:
sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reloadsudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reloadsudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload
-
Access Zammad Web Installer
Open your browser and go to:
http://your-server-ip/http://your-server-ip/http://your-server-ip/
Or:
http://support.yourdomain.com/http://support.yourdomain.com/http://support.yourdomain.com/
Follow the web-based setup wizard to:
- Create an admin user
- Configure email (for ticketing)
- Connect Slack or chat (optional)
- Set branding
-
Secure with SSL (Recommended)
Install Certbot:
sudo dnf install certbot python3-certbot-nginx -ysudo dnf install certbot python3-certbot-nginx -ysudo dnf install certbot python3-certbot-nginx -y
Edit Nginx configuration:
sudo nano /etc/nginx/nginx.confsudo nano /etc/nginx/nginx.confsudo nano /etc/nginx/nginx.conf
Configure ServerName directive:
server { server_name support.yourdomain.com; root /usr/share/nginx/html;server { server_name support.yourdomain.com; root /usr/share/nginx/html;server { server_name support.yourdomain.com; root /usr/share/nginx/html;
Run Certbot:
sudo certbot --nginx -d support.yourdomain.comsudo certbot --nginx -d support.yourdomain.comsudo certbot --nginx -d support.yourdomain.com
Follow the prompts to get your free Let’s Encrypt SSL cert.
Set up auto-renewal:
echo "0 3 * * * root certbot renew --quiet" | sudo tee -a /etc/crontabecho "0 3 * * * root certbot renew --quiet" | sudo tee -a /etc/crontabecho "0 3 * * * root certbot renew --quiet" | sudo tee -a /etc/crontab
-
You’re Done
Zammad should now be fully operational. Log into the admin interface and start customizing workflows, email templates, triggers, and user roles.
Tips
- Keep Zammad and your server updated.
- Set up regular backups (use
zammad run rake
for exporting data). - Monitor logs (
/var/log/zammad/
) for issues.
Troubleshooting
Port 9200 not open? Elasticsearch might not be running. Restart it:
sudo systemctl restart elasticsearch
Permission issues? Run:
sudo zammad run rake zammad:permissions:reset
Got questions or hit an issue? Drop a comment or check out Zammad’s docs—they’re well-written and active.
Conclusion
You now know how to install Zammad on AlmaLinux VPS.