Как установить и настроить Zammad на VPS
Когда заявки от клиентов расползаются по почте, мессенджерам и звонкам, служба поддержки быстро тонет — кто-то теряет письмо, кто-то дважды отвечает на один вопрос. Zammad закрывает это одним инструментом: тикеты из почты, чата на сайте и звонков собираются в одну очередь с историей по каждому клиенту. Ниже — рабочая установка Zammad на собственном VPS с нуля: от системных требований до подключения email, веб-чата и телефонии.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Что понадобится перед установкой
Zammad написан на Ruby on Rails и под капотом использует PostgreSQL, Redis и (опционально, но крайне желательно для полнотекстового поиска) Elasticsearch или OpenSearch. Официальный пакет сам подтянет все зависимости, но ресурсы под них должен выделить сервер.
Ориентировочные требования для боевой установки на небольшую-среднюю команду поддержки (5–20 агентов):
| Параметр | Минимум | Комфортно |
|---|---|---|
| CPU | 2 vCPU | 4 vCPU |
| RAM | 4 ГБ | 8 ГБ |
| Диск | 20 ГБ SSD | 40+ ГБ SSD |
| ОС | Ubuntu 22.04/24.04, Debian 12 | — |
Это ориентир, а не гарантия — если у вас большая база тикетов и активно используется полнотекстовый поиск по вложениям, память съедает в первую очередь Elasticsearch. На 2 ГБ RAM Zammad формально стартует, но под нагрузкой Puma и поисковый движок начнут упираться в своп.
Также заранее подготовьте:
- домен или поддомен (например,
helpdesk.example.com) с A-записью на IP сервера; - открытые порты 80 и 443;
- почтовый ящик (IMAP/SMTP), из которого Zammad будет забирать и отправлять письма.
Для установки Docker и базовой настройки сети под сервер можно свериться со статьёй настройка домена и DNS с нуля — Zammad в этом гайде ставится не в Docker, а через официальный apt-репозиторий, это более предсказуемый вариант для продакшена и упрощает обновления.
Устанавливаем Zammad на Ubuntu 24.04
Разработчики Zammad поддерживают репозиторий пакетов для Debian/Ubuntu — это даёт готовые systemd-юниты, скрипты миграции при обновлении и меньше ручной возни, чем сборка из исходников.
Обновляем систему и ставим зависимости для подключения репозитория:
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl gnupg2 ca-certificates lsb-release apt-transport-https
Добавляем ключ и сам репозиторий (кодовое имя дистрибутива подставляется автоматически, чтобы не промахнуться версией):
curl -s https://dl.packager.io/srv/zammad/zammad/key | \
sudo gpg --dearmor -o /usr/share/keyrings/zammad-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/zammad-archive-keyring.gpg] \
https://dl.packager.io/srv/zammad/zammad/stable/ubuntu/$(lsb_release -cs) ./" | \
sudo tee /etc/apt/sources.list.d/zammad.list
Если для вашей версии Ubuntu репозитория ещё нет (актуально для самых свежих релизов сразу после выхода), проверьте список поддерживаемых дистрибутивов на странице пакетов Zammad и при необходимости используйте кодовое имя предыдущего LTS — пакет обычно совместим.
Устанавливаем сам Zammad — пакет сам поставит PostgreSQL, Redis, Nginx (если его ещё нет) и Elasticsearch:
sudo apt update
sudo apt install -y zammad
Установка занимает несколько минут: postinstall-скрипт создаёт базу данных, пользователя zammad, каталоги в /opt/zammad и включает systemd-юниты (zammad-web, zammad-websocket, zammad-worker). Проверить, что всё поднялось, можно так:
sudo systemctl status zammad-web zammad-websocket zammad-worker
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНастраиваем Nginx и SSL
Пакет Zammad кладёт готовый конфиг для Nginx в /opt/zammad/contrib/nginx/zammad.conf. Копируем его и правим под свой домен:
sudo cp /opt/zammad/contrib/nginx/zammad.conf /etc/nginx/sites-available/zammad.conf
sudo ln -s /etc/nginx/sites-available/zammad.conf /etc/nginx/sites-enabled/
В файле находим строку server_name и заменяем на свой домен:
server_name helpdesk.example.com;
Проверяем конфигурацию и перезапускаем Nginx:
sudo nginx -t && sudo systemctl reload nginx
Дальше выпускаем сертификат Let's Encrypt через certbot — подробный разбор нюансов (чейн-файлы, автопродление, частые ошибки) есть в статье установка Let's Encrypt SSL на VPS:
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d helpdesk.example.com
Certbot сам пропишет редирект с 80 на 443 и настроит автопродление через systemd-таймер. Если Zammad стоит за отдельным reverse-proxy (например, общий Nginx на нескольких доменах), логика проксирования на upstream 127.0.0.1:3000 и /ws для websocket подробно разобрана в статье Nginx как reverse proxy на VPS — конфиг из пакета Zammad построен по тому же принципу.
Не забудьте открыть порты в файрволе:
sudo ufw allow 'Nginx Full'
sudo ufw allow OpenSSH
sudo ufw enable
Первый вход и базовая настройка
Открываем https://helpdesk.example.com/ в браузере — Zammad встретит мастером первичной настройки. Он попросит:
- Создать учётную запись администратора (email + пароль).
- Указать название организации — оно попадёт в шаблоны писем.
- Выбрать часовой пояс и локаль по умолчанию.
После мастера вы попадёте в основной интерфейс. Первым делом стоит зайти в Settings → Security → Password и включить обязательную двухфакторную аутентификацию для агентов, а в Settings → System → Services — проверить, что фоновый воркер (zammad-worker) действительно обрабатывает очередь (там же видно, если он "залип").
Если планируется поиск по вложениям и полнотекстовый поиск по тикетам, проверьте статус Elasticsearch:
curl -s http://localhost:9200/_cluster/health?pretty
Статус green или yellow — это норма для одноузловой инсталляции. После первой установки индекс нужно построить вручную:
sudo -u zammad zammad run rake searchindex:rebuild
На базе в несколько тысяч тикетов это может занять от пары минут до получаса — процесс идёт в фоне, интерфейс им не блокируется.
Подключаем почту, чат на сайте и телефонию
Это то, ради чего обычно и берут Zammad — единая точка входа для всех каналов.
Почта. В Settings → Channels → Email добавляем аккаунт: указываем IMAP-сервер для входящих (порт 993, SSL) и SMTP для исходящих (порт 587, STARTTLS, либо 465 с SSL). Zammad сам предложит несколько готовых пресетов (Gmail, Office 365) или позволит ввести параметры вручную для своего почтового сервера. Если почта поднята на этом же VPS через Postfix, конфигурация IMAP/SMTP и типичные грабли с доставляемостью разобраны в статье почтовый сервер Postfix на VPS — Zammad просто подключается к нему как обычный почтовый клиент.
Каждое входящее письмо на подключённый адрес превращается в новый тикет или добавляется к существующему по теме/thread-id. Исходящие ответы агентов уходят с того же адреса через SMTP.
Чат на сайте. В Settings → Channels → Chat создаём новый чат-виджет — Zammad генерирует JS-сниппет вида:
<script id="zammad_chat" data-key="ВАШ_КЛЮЧ" src="https://helpdesk.example.com/assets/chat/chat.min.js"></script>
Сниппет вставляется перед </body> на вашем сайте. Сообщения из виджета попадают в ту же очередь тикетов, что и письма, — агент видит всё в одном месте и может переключаться между обращениями одного клиента независимо от канала.
Телефония (CTI). Zammad поддерживает готовые интеграции с несколькими облачными АТС (например, sipgate.io, Placetel) и универсальный "Generic CTI" — вебхук, на который ваша телефонная система шлёт события о входящих/исходящих звонках. В Settings → Channels → CTI выбираем Generic и получаем URL вида https://helpdesk.example.com/api/v1/cti/<token>/. Дальше на этот URL настраивается отправка событий со стороны АТС (формат зависит от конкретной телефонной платформы — сверяйтесь с документацией вашего провайдера). После настройки при входящем звонке в Zammad всплывает карточка клиента, если номер уже встречался в тикетах.
Бэкапы и обновления
Пакетная установка Zammad включает готовый скрипт бэкапа в /opt/zammad/contrib/backup/backup.sh — он снимает дамп PostgreSQL и архивирует файловое хранилище (вложения тикетов). Запуск вручную:
sudo /opt/zammad/contrib/backup/backup.sh
По умолчанию бэкапы складываются в /var/tmp/zammad_backup — этот путь и глубину хранения (HOLD_DAYS) можно поменять прямо в скрипте. Для регулярного запуска добавьте задачу в cron:
sudo crontab -e
# каждую ночь в 3:00
0 3 * * * /opt/zammad/contrib/backup/backup.sh
Локальный бэкап на том же диске — это не бэкап в полном смысле: если сервер целиком выйдет из строя, архивы пропадут вместе с ним. Полученные файлы стоит выгружать на отдельное хранилище — как именно это автоматизировать с ротацией и шифрованием, подробно описано в статье установка и настройка BorgBackup на VPS.
Обновление Zammad до новой версии — обычный apt-апгрейд, миграции базы данных пакет прогоняет сам при перезапуске сервисов:
sudo apt update
sudo apt install --only-upgrade zammad
Перед мажорным обновлением (смена версии вида 6.x → 7.x) обязательно снимите свежий бэкап и почитайте release notes — иногда меняется формат хранения вложений или требуется ручной шаг перед миграцией.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Можно ли поставить Zammad через Docker вместо apt-пакета?
Да, у проекта есть официальный docker-compose. Он удобен для быстрого теста, но пакетная установка на Ubuntu/Debian даёт более простые обновления и меньше сюрпризов с правами на файловое хранилище вложений — для продакшена мы рекомендуем именно её.
Обязателен ли Elasticsearch?
Формально нет, Zammad запустится и без него, но пропадёт полнотекстовый поиск по вложениям и часть фильтров в интерфейсе агента будет работать хуже. На небольшой команде можно отключить и сэкономить память, добавив позже при росте базы тикетов.
Сколько агентов потянет минимальный тариф VPS?
Жёсткой формулы нет — зависит от объёма писем, вложений и активности воркера. Ориентировочно 2 vCPU / 4 ГБ RAM хватает на 5–10 одновременно работающих агентов при умеренном потоке тикетов; для больших команд закладывайте запас по CPU под Elasticsearch и фоновые задачи.
Как перенести Zammad на новый сервер?
Через тот же backup.sh: дамп PostgreSQL и архив файлового хранилища переносятся на новую машину, разворачивается тот же пакет той же версии, база восстанавливается через psql, файлы — распаковкой в /opt/zammad/var/storage (или туда, куда указывает конфиг), после чего сервисы Zammad перезапускаются.
Чат-виджет работает только на одном домене?
Нет, один и тот же ключ виджета можно вставить на несколько сайтов — тикеты из всех источников попадут в общую очередь, а канал (chat) будет виден в карточке тикета.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →