Запускаем OTRS

27 апреля 2020

Быстрая установка OTRS

  • Понятия helpdesk и servicedesk неразрывно связаны с двумя программными продуктами — Request Tracker и OTRS, потому что они не только стали первыми представителями Open Source в этой сфере, но и успешно существуют по сей день.
  • Хотя к ним существует много справедливых претензий, трудно предложить альтернативу, совмещающую такой же набор характеристик: открытые исходные тексты, бесплатность, возможность размещения на собственном сервере, относительная нетребовательность к ресурсам, гибкость настроек, широкая клиентская база, обилие документации и наличие коммерческих вариантов, гарантирующих продолжение разработки.
  • По этой причине количество инсталляций OTRS продолжает расти, и мы решили свести в одном документе все рецепты, позволяющие запустить новую систему за минимальное время.

Выбор пакета:

  • Готовые пакеты имеются во многих распространённых дистрибутивах, но использовать их не рекомендуется из-за отставания версий:
  • Разработчики собирают пакеты только для трёх дистрибутивов: CentOS 7, Fedora 26 и OpenSuSE 13.
  • С учётом сроков поддержки это означает, что единственным приемлемым вариантом становится CentOS 7, в противном случае придётся иметь дело либо со старым пакетом, либо с полностью ручной установкой.

Предварительные требования:

  • Для работы системе потребуется не менее 4 гигабайт ОЗУ. На 2 гигабайтах мы столкнулись с нехваткой памяти.
  • Официальная документация покушается на святое требует отключать SELinux:
  • sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config &&
    reboot
  • С другой стороны, Google находит несколько инструкций по поддержке OTRS в SELinux.
    Мы пока не стали проверять их на собственном опыте, но готовы рекомендовать это сделать всем борцам за безопасность:

SQL-сервер:

  • Годится любой форк MySQL. Например:
  • yum install -y mariadb-server
  • Создадим файл /etc/my.cnf.d/server.cnf и заполним его настройками, необходимыми для работы OTRS:
  • [mysqld]
    bind-address = 127.0.0.1
    max_allowed_packet = 64M
    character-set-server = utf8
    collation-server = utf8_general_ci
    innodb_log_file_size = 512M
  • Включим автозапуск и запустим:
  • systemctl enable mariadb
    systemctl start mariadb
  • Современная MariaDB научилась не спрашивать пароль при подключении администратора через файловый сокет, как это изначально умел Postgresql, но OTRS при создании базы будет подключаться как обычный пользователь, поэтому потребуется авторизация с паролем (сохраните пароль, который здесь выведется):
  • SQLPASS="$(openssl rand -hex 30)"
    echo "New root password for MySQL: $SQLPASS"
    mysql -u root -e "set password for root@localhost = password('$SQLPASS')"

Теперь установим OTRS:

  • Разработчики выкладывают собранные пакеты на Веб-сервер, но не стали утруждать себя созданием Yum-репозитария, поэтому нам необходимо автоматизировать поиск актуальной версии.
    На помощь снова приходит замечательная утилита lftp, которая уже выручала нас в одной из предыдущих статей:
  • which lftp || yum install -y lftp
    FPATH="$(lftp -e 'cls -q -1 -D --sort=date /pub/otrs/RPMS/rhel/7/otrs*.noarch.rpm; exit' http://ftp.otrs.org/ | tail -1)"
    echo $FPATH
    yum install -y http://ftp.otrs.org/$FPATH
  • Во время повторных установок может выскочить ошибка, которая вроде бы ни на что не влияет, но наглядно характеризует общее качество сборки пакета:
  • Check OTRS user ... useradd: не удалось создать каталог /opt/otrs/

Продолжение установки:

  • По зависимостям установится HTTP-сервер Apache, но т.к. в дистрибутивах от RedHat не принято автоматически запускать устанавливаемые сервисы, мы должны запустить его сами:
  • systemctl enable httpd
    systemctl start httpd
  • Apache должен иметь доступ к статическим файлам (html, изображениям и т.д.), поэтому назначим им соответствующую группу-владельца:
  • /opt/otrs/bin/otrs.SetPermissions.pl --web-group=apache
  • Плохая повость — поскольку пакет собран «на отвяжись», в его зависимостях не указана часть модулей, требуемых OTRS для работы. Хорошая новость — их можно легко доустановить одной командой благодаря готовой вспомогательной утилите:
  • /opt/otrs/bin/otrs.CheckModules.pl | egrep -o 'perl\([^ ]+::[^ ]+\)' | xargs -r yum install -y
  • В состав инсталляционного пакета OTRS не входят настройки для Systemd, поэтому самостоятельно создадим файл /etc/systemd/system/otrs.service
  • [Unit]
    Description=OTRS Help Desk Daemon.
    After=network.target mariadb.service
    
    [Service]
    Type=forking
    User=otrs
    Group=apache
    ExecStart=/opt/otrs/bin/otrs.Daemon.pl start
    ExecStop=/opt/otrs/bin/otrs.Daemon.pl stop
    
    [Install]
    WantedBy=multi-user.target
  • Читаем, включаем, запускаем, проверяем:
  • systemctl daemon-reload
    systemctl enable otrs
    systemctl start  otrs
    systemctl status otrs

Настройка через веб-интерфейс:

  • Теперь мы можем открыть в веб-браузере http://настроенное-имя-сайта/otrs/installer.pl и выполнить начальную настройку.
  • Почти все шаги очевидны, за исключением “Mail setup”.
  • Для “Mail setup” следует выбрать “skip”, чтобы избежать ошибки, описанной в https://github.com/complemento/docker.otrs/issues/2 и до сих пор не исправленной.
  • Установщик требует задать пароль для пользователя root@localhost — важно понимать, что это пользователь OTRS, а не пользователь MySQL. У них одинаковые имена, но они хранятся в разных базах, имеют разные пароли и используются разными приложениями.

Устранение неполадок:

  • Довольно часто OTRS отказывается запускаться, показывая следующую ошибку:
  • There was an error executing Execute() in Kernel::System::Console::Command::Maint::Ticket::FulltextIndexRebuildWorker: Error: Active indexing process already running! Skipping...
  • Как правило, причиной служит внезапная перезагрузка.
    Более подробное объяснение приведено на официальном форуме: http://forums.otterhub.org/viewtopic.php?f=62&t=38469
  • Решение:
  • sudo -u otrs /opt/otrs/bin/otrs.Console.pl Maint::Ticket::FulltextIndexRebuildWorker --force-pid
  • Не исключено, что в дальнейшем мы добавим эту команду в ExecStartPre, но пока предпочитаем выполнять её вручную.

Логи:

  • По умолчанию OTRS пишет сообщения в Syslog. Мы направим их в файл и сделаем более подробными.
  • Для этого открываем раздел Admin => System Configuration
  • Параметр LogModule::LogFile:
    • было: /tmp/otrs.log
    • стало: /opt/otrs/var/log/otrs.log
  • Параметр LogModule:
    • было: Kernel::System::Log::Syslog
    • стало: Kernel::System::Log::File
  • Параметр MinimumLogLevel:
    • было: Error
    • стало: Debug
  • Применяем изменения:
  • systemctl restart otrs

Проверка и установка обновлений:

  • Создадим файл /usr/local/bin/otrs-new-package (и сделаем исполняемым с помощью “chmod +x”):
  • #!/bin/sh
    
      FPATH="$(lftp -e 'cls -q -1 -D --sort=date /pub/otrs/RPMS/rhel/7/otrs*.noarch.rpm; exit' http://ftp.otrs.org/ 2>&1 | tail -1)"
     LATEST="${FPATH##*/}" #"
     LATEST="${LATEST%.rpm}"
    CURRENT="$(rpm -q otrs)"
    
    case "$1" in
      install|reinstall ) yum "$1" "http://ftp.otrs.org/$FPATH" ;;
      geturl   )              echo "http://ftp.otrs.org/$FPATH" ;;
      update   ) test "$LATEST" = "$CURRENT" && true   || yum install "http://ftp.otrs.org/$FPATH" ;;
      zbxcheck ) test "$LATEST" = "$CURRENT" && echo 0 || echo 1 ;;
      *        ) test "$LATEST" = "$CURRENT" && echo "$CURRENT is actual." || echo "$CURRENT can be updated to $LATEST" ;;
    esac
  • Проверяем:
  • otrs-new-package geturl
    otrs-new-package
    otrs-new-package install

Проверка для Zabbix:

  • Создаём /etc/zabbix/zabbix_agentd.d/OTRS.conf
  • UserParameter=otrs.update_available,/usr/local/bin/otrs-new-package zbxcheck
  • Проверяем:
  • sudo -u zabbix zabbix_agentd -t otrs.update_available
  • Применяем:
  • service restart zabbix-agent
  • В Zabbix создаём (а) целочисленную метрику otrs.update_available с ежедневной проверкой и (б) триггер на ненулевое значение.

Настройка электронной почты:

  • Подразумевается, что почта для домена example.org находится на GoogleApps.
  • Для OTRS заводится отдельный ящик otrs@example.org — на него приходят письма клиентов, которые OTRS преобразует в новые заявки или комментарии к уже созданным, и с него OTRS отправляет клиентам ответы.
  • Для подключения к ящику рекомендуется использовать отдельный набор паролей, которые предоставляют ограниченный доступ и работают в обход двухфакторной аутентификации — т.н. Application Passwords.
  • Вследствие нестандартных расширений GoogleApps мы столкнулись с проблемой зацикливания почты, которой посвятили отдельную заметку.

Входящая почта:

  • Зависимости:
  • yum install -y fetchmail
  • Admin => PostMaster Mail Accounts => Add:
    • Type = IMAPTLS
    • Username = otrs@example.org
    • Password = ...
    • Host = imap.gmail.com
    • Dispatching = by To: header
  • OTRS удаляет из ящика принимаемые письма, поэтому для их сохранения в ящике надо создать метку и фильтр:
    • New label = "Persistent"
    • Filter matches: from:(!me)
    • Filter actions: Apply label "Persistent", Never send it to Spam
  • Частота проверки входящих сообщений:
    • Admin => SystemConfiguration =>MailAccountFetch: 10 => 5
  • Принудительная проверка:
  • sudo -u otrs -H /opt/otrs/bin/otrs.Console.pl Maint::PostMaster::MailAccountFetch

Исходящая почта:

  • Admin => Email Addresses:
    • Email = otrs@example.org
    • Name = ISIX Support Team
  • Admin => System Configuration:
    • SendmailModule = SMTPTLS
    • SendmailModule::AuthUser = otrs@example.org
    • SendmailModule::AuthPassword = ...
    • SendmailModule::Host = smtp.gmail.com
    • SendmailModule::Port = 587

LDAP-авторизация:

  • Использованная нами документация: http://wiki.rsu.edu.ru/wiki/OTRS
  • Ключевой недостаток: при включении внешней авторизации отключается локальная.
  • Важная особенность: пользователи не создаются автоматически при первом входе, их надо регистрировать в OTRS явно. Из внешнего источника берётся только пароль.
  • Перед включением LDAP-авторизации надо завести в OTRS как минимум одного пользователя с LDAP-логином и присвоить ему права администратора, чтобы после её включения иметь возможность администрировать из-под него OTRS.
  • После этого редактируем /opt/otrs/Kernel/Config.pm
  • $Self->{'AuthModule'} = 'Kernel::System::Auth::LDAP';
    $Self->{'AuthModule::LDAP::Host'} = 'ldap.example.org';
    $Self->{'AuthModule::LDAP::BaseDN'} = 'ou=People,dc=example,dc=org';
    $Self->{'AuthModule::LDAP::UID'} = 'uid';
    $Self->{'AuthModule::LDAP::UserAttr'} = 'uid';
    $Self->{'AuthModule::LDAP::Params'} = {
        port => 389,
        timeout => 120,
        async => 0,
        version => 3,
    };
  • Применяем настройки:
  • systemctl restart otrs

Оповещения в Telegram:

  • OTRS умеет отправлять оповещения только по SMTP, поэтому для отправки в Телеграм придётся использовать шлюз — либо самодельный, доработанный для преобразования email-адресов в ChatID's, либо публичный, наподобие ETlgr.


← Назад в Блог

Подпишитесь на новые статьи: