Yes. The cleanest approach is Docker Engine from Docker’s official repository, followed by Zammad’s official Docker Compose stack.
For Zammad, I recommend at least:
These steps assume you’re connected over SSH/PuTTY with a sudo-capable account.
sudo apt update
sudo apt upgrade -y sudo apt install -y ca-certificates curl git nano
If Ubuntu says a reboot is required:
sudo reboot
Reconnect through PuTTY after the server restarts.
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
-o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
Paste this entire block:
sudo tee /etc/apt/sources.list.d/docker.sources >/dev/null <<EOF Types: deb URIs: https://download.docker.com/linux/ubuntu Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") Components: stable Architectures: $(dpkg --print-architecture) Signed-By: /etc/apt/keyrings/docker.asc EOF
Update the package list:
sudo apt update
sudo apt install -y \
docker-ce \
docker-ce-cli \
containerd.io \
docker-buildx-plugin \
docker-compose-plugin
Enable and start Docker:
sudo systemctl enable --now docker
Verify its status:
sudo systemctl status docker --no-pager
You should see:
Active: active (running)
Test Docker:
sudo docker run --rm hello-world
This follows Docker’s current supported installation method for Ubuntu 24.04. Docker Engine installation documentation
sudo usermod -aG docker "$USER"
Activate the new group membership:
newgrp docker
Test without sudo:
docker version
docker compose version
Membership in the docker group effectively grants root-level control of the server, so only add trusted administrator accounts. Docker post-installation guidance
Zammad uses Elasticsearch for fast ticket and content searching. Set the required kernel value:
sudo sysctl -w vm.max_map_count=262144
Make it persistent after reboot:
echo 'vm.max_map_count=262144' | sudo tee /etc/sysctl.d/99-zammad.conf
Load it:
sudo sysctl --system
Confirm:
sysctl vm.max_map_count
Expected result:
vm.max_map_count = 262144
This value is specifically required in Zammad’s official Docker instructions. Zammad Docker documentation
sudo mkdir -p /opt/zammad
sudo chown "$USER":"$USER" /opt/zammad
Clone the official Zammad Compose repository:
git clone https://github.com/zammad/zammad-docker-compose.git /opt/zammad
Enter the directory:
cd /opt/zammad
First validate the Compose configuration:
docker compose config --quiet
If that returns without an error, download the images:
docker compose pull
Start the stack:
docker compose up -d
The first startup can take several minutes because Zammad must initialize PostgreSQL, Redis, Elasticsearch, and the application database.
Check container status:
docker compose ps
Follow the initialization logs:
docker compose logs -f zammad-init
When initialization finishes, press Ctrl+C. That only exits the log viewer; it does not stop Zammad.
Check everything again:
docker compose ps
Most services should show Up, running, or healthy. The zammad-init container is expected to finish and exit successfully after initialization.
To see recent logs from the entire stack:
docker compose logs --tail=100
From another computer on your LAN, browse to:
http://SERVER-IP:8080
For example, if the server is 10.1.100.96:
http://10.1.100.96:8080
You should receive Zammad’s setup wizard. Zammad does not give you a predetermined default admin login; you create the initial administrator during this wizard.
The wizard will ask for: