Radiant Engineering

Устанавливаем OTRS 6
на CentOS 7

Подготовка операционной системы. Установка OTRS. Первоначальная настройка.
Выбор CentOS для установки OTRS 6 очевиден: система стабильна и в случае чего предоставляет корпоративную поддержку RedHat. Вопросов, в общем-то, не возникает.

Но почему мы собрались рассказывать про установку OTRS на 7-ю версию CentOS? Дело в том, что разработчик ((OTRS)) Community Edition — компания OTRS AG — официально пока не поддерживает CentOS 8 в пакетах (https://ftp.otrs.org/pub/otrs/RPMS/rhel/).

Конечно, поставить на «восьмёрку» OTRS 6 всё равно можно: главное, не ставьте пакетом под RHEL 7, а ставьте архивом. Несколько раз мы и сами так делали, но в правильной установке есть много нюансов, и их стабильность пока под вопросом.

Итак, поехали.
Считаем, что у нас есть чистая установка CentOS 7 Minimal, и SSH-доступ на неё. Процесс установки разделим на три этапа:

1
Подготовка операционной системы
2
Установка OTRS
3
Начальные настройки
Подготовка операционной системы
1.1 Добавляем репозиторий EPEL

yum install epel-release -y
1.2 Лайфхак 1
Дальше я ставлю tmux и работаю в нём, но если кому-то удобней screen — ставьте его. Если вы не пользуетесь ни тем, ни другим, уверены в канале связи, то можете устанавливать OTRS без них.

yum install tmux -y
Перехожу в консоль tmux. Шпаргалка по консоли на русском здесь, английский вариант — здесь.

tmux
1.3 Если нужно сменить имя хоста

hostnamectl set-hostname host_name
systemctl restart systemd-hostnamed
hostnamectl status
1.4 Устанавливаем нужный часовой пояс

timedatectl set-timezone Europe/Moscow или Europe/Berlin
1.5 И обновляем перед следующими установками

yum update -y
1.6 Дальше я ставлю несколько инструментов — что-то удобно мне, что-то требуется для установки

yum install net-tools vim wget man vim-enhanced screen mc telnet wget crontabs openssh-clients mailx sudo make gcc htop nmon sysstat sysbench hdparm lsof -y
1.7 Проверяем файрвол. У некоторых хостеров он отключен или вообще не установлен. Сразу смотрим, что открыто. Если фаервол установлен, то мы увидим список открытых протоколов. Если нет…

firewall-cmd --list-all
…то устанавливаем его:

yum install firewalld -y
systemctl enable firewalld
systemctl start firewalld

1.8 Дальше убираем dhcpv6 и добавляем http(https):

firewall-cmd --permanent --zone=public --remove-service=dhcpv6-client
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https

1.9 Для восьмёрки не забудьте убрать ещё кокпит, он открыт по умолчанию

firewall-cmd --permanent --zone=public --remove-service=cockpit
firewall-cmd --reload
1.10 Теперь обезопасим наш SSH:
Уберём его с 22-го порта на тот, который вам больше нравится.

Меняем порт в конфигурации SSHD:

vim /etc/ssh/sshd_config
## Port 22 -> Port 22222
Меняем порт в сервисе файрвола:

vim /usr/lib/firewalld/services/ssh.xml
<port protocol="tcp" port="22222"/>
И применяем:

systemctl restart sshd && systemctl restart firewalld
Да, я специально не написал sed'ы. Зато вы сами пройдёте весь путь установки, а не будете просто копировать, не читая инструкцию.
Закроемся немного от брутфорса:

yum install fail2ban -y
systemctl enable fail2ban
systemctl start fail2ban
systemctl status fail2ban
 
echo '
[DEFAULT]
# Ban hosts for one hour:
bantime = 3600
# Override /etc/fail2ban/jail.d/00-firewalld.conf:
banaction = iptables-multiport
[sshd]
enabled = true' > /etc/fail2ban/jail.local
 
systemctl restart fail2ban
1.11 Мы немного обезопасились — теперь отрубим SELINUX. Желающие могут его настроить, всё будет работать и с ним. Но мы поступим, как в старом анекдоте: в классе было два окна, одно с решеткой от грабителей, второе — без, для пожарной безопасности.

sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/sysconfig/selinux
setenforce 0
1.12 И последний штрих по настройке ОС.
Это уже про тюнинг системы. Я всегда меняю минимум 1 параметр —vm.swappiness — объём оставшейся оперативной памяти, при котором система начнёт писать в SWAP. По общим рекомендациям я выставляю на нём 10% — получается, система начнёт писать в SWAP при 90% занятой оперативной памяти. Вы можете выставить этот параметр на своё усмотрение.

sysctl vm.swappiness=10
echo 'vm.swappiness = 10' >> /etc/sysctl.conf

//Да можно использовать sysctl -p, но мне нравится так
На этом минимальные настройки ОС завершены. Обычно на этом этапе я делаю reboot и проверяю, ничего ли я не забыл.
Установка OTRS
…которая начнётся сразу после установки и обновления всего, что потребуется для OTRS.
2.1 Установка веб-сервера. Начнём с самого простого.

yum install httpd -y
systemctl enable httpd
systemctl start httpd
2.2 Установка СУБД.
Выбираем либо MariaDB, либо PostgreSQL. Сейчас детали продуктовых установок СУБД я расписывать не буду — есть масса хороших статей и курсов. Загуглите. А к полному раскрытию темы установки СУБД мы ещё как-нибудь вернёмся.
a) MariaDB
На данный момент актуальная версия — 10.4

echo '
# MariaDB 10.4 CentOS repository list - created 2020-06-19 21:29 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.4/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1’ > /etc/yum.repos.d/MariaDB.repo
Установка + devel, иначе не соберётся актуальный пакет DBD::mysql (хотя он и так может упасть на zerofill)

yum install MariaDB-server MariaDB-client MariaDB-devel -y
Все настройки СУБД вы должны делать, исходя из технических параметров сервера. Подскажу с одной, чтобы не было проблем с заливкой файлов и установкой пакетов:

[mysqld]
max_allowed_packet = 100M
………………..
[mysqldump]
max_allowed_packet = 100M
После всех настроек стартуем и добавляем в автозагрузку:

systemctl start mariadb
systemctl enable mariadb
systemctl status mariadb
Традиционно устанавливаем пароль рута и убиваем тестовую БД:

mysql_secure_installation
б) PostgreSQL
Официально основной версией на данный момент является 10. Реально используется и практически является основной версия 12. Поэтому ставим 12:

# Install the repository RPM:
yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
 
# Install PostgreSQL:
yum install postgresql12-server postgresql12-contrib postgresql12-devel postgresql12
 
# Optionally initialize the database and enable automatic start:
/usr/pgsql-12/bin/postgresql-12-setup initdb
systemctl enable postgresql-12
systemctl start postgresql-12
Разрешаем доступ на локальном хосте по паролю:

vim /var/lib/pgsql/12/data/pg_hba.conf
Меняем #host all all 127.0.0.1/32 ident
На host all all 127.0.0.1/32 md5
Ставим пароль для пользователя postgresql

sudo -u postgres pqsl
alter role postgres with password ‘свой_пароль’;
\q
systemctl restart postgresql-12
Если вы будете копировать с сайта, то обратите внимание, что я добавил еще 2 пакета: contrib и devel. Первый понадобится для статистики и других расширений, второй — для сборки DBD::Pg.

Примечание: на продуктовую систему, конечно, можно ставить и так, но это неправильно. Дефолтные настройки подходят не только для тестовых или вспомогательных целей, но и для подавляющего большинства небольших компаний. Если же у вас есть компетенции DBA, ставьте и настраивайте ресурсы правильно!
2.3 Установка Perl модулей и приведение их в актуальное состояние
Установка основных модулей:

yum install fetchmail perl-URI mod_perl perl-libwww-perl perl-Net-DNS perl-IO-Socket-SSL \
perl-XML-Parser perl-DBI procmail perl-DateTime-Format-DateParse perl-core perl-Crypt-SSLeay \
perl-POEComponent-Client-LDAP perl-JSON-XS perl-Mail-IMAPClient perl-PDF-API2 perl-Text-CSV_XS \
perl-Digest-SHA perl-LDAP perl-GDGraph perl-Encode-HanExtra perl-Text-CSV perl-Crypt-Eksblowfish \
perl-YAML-LibYAML fcgi perl-Archive-Zip perl-Template-Toolkit perl-XML-LibXSLT bash-completion \
perl-DBD-Pg perl perl-File-MimeInfo perl-Mojolicious perl-DBD-MySQL -y
Обновление Perl пакетов
ВНИМАНИЕ! Так можно делать только на тестовых системах или при первоначальной установке, иначе можно положить прод. Если очень нужно обновить на проде, не забывайте о снепшотах и резервном копировании.

#Cтавим cpanm
yum install perl-App-cpanminus -y
#Обновляем cpanm
cpanm App::cpanminus
#Удаляем cpanm установленный из репо
yum erase perl-App-cpanminus
#Создаем линк для новой версии
ln -s /usr/local/bin/cpanm /bin/cpanm
#Ставим cpanoutdated
cpanm App::cpanoutdated
#Обновляем все пакеты, которые считаются устаревшими
/usr/local/bin/cpan-outdated -p | cpanm
#Поскольку outdated обновляет не все пакеты, то дальше руками
cpanm Apache::DBI Apache2::Reload Archive::Tar Archive::Zip Crypt::Eksblowfish::Bcrypt Crypt::SSLeay Date::Format DateTime DBI DBD::Pg Digest::SHA Encode::HanExtra JSON::XS List::Util::XS LWP::UserAgent Mail::IMAPClient IO::Socket::SSL Authen::SASL Authen::NTLM ModPerl::Util Net::DNS Net::LDAP Net::SMTP Template Template::Stash::XS Text::CSV_XS Time::HiRes XML::LibXML XML::LibXSLT XML::Parser YAML::XS
cpanm Archive::Zip XML::LibXML DBD::File Moo Date::Calc
Кто будет ставить на MariaDB или MySQL, вместо DBD::Pg – DBD::mysql. Если ошибка будет только по тесту на zerofil — а она, скорее всего, будет — cpanm DBD::mysql – force
Если ошибок больше, надо разбираться в причинах. Возможно, потребуется установить пакет MariaDB-shared, в некоторых случаях это помогает.
2.4 Установка OTRS (ну наконец-то).
Ставим последнюю версию. На сегодняшний день это 6.0.28:

wget https://ftp.otrs.org/pub/otrs/RPMS/rhel/7/otrs-6.0.28-01.noarch.rpm
rpm -ivh otrs-6.0.28-01.noarch.rpm
Если вы всё сделали верно, то после установки будет инструкция по запуску демонов и добавлению кронджобы. Но это мы будем делать после окончания установки OTRS.

Перезапускаем апач и идём на веб по ссылке в конце установки пакета. Вы можете написать его сами по аналогии с примером, если хостнейм и fqdn не совпадают.

systemctl restart httpd
Нажимаем вперёд
Принимаем условия лицензии и продолжаем
Выбираем свою СУБД, в моем случае PostgreSQL, Вперёд
Пишем учётные данные, в нашем случае «свой пароль» и «Проверить настройки БД»
Вперёд
Вперёд
Вписываем название компании, если надо, почту администратора и убираем проверку МХ. Вперёд
Пропустить этот шаг, всё равно в инсталлере это работает криво, и придётся настраивать потом в системе.
Все. Основная часть установки завершена, но кому нужна система, в которой ничего еще не работает…

Запуск демона, кронджобов.

/opt/otrs/bin/Cron.sh start otrs
Проверка что появились кронджобы, точнее один джоб это запуска Демона, а он уже управляет остальными джобами.

crontab -u otrs -l
Начальные настройки
Заходим в агентский интерфейс с выданными нам учётными данными. Переходим в раздел «Администрирование».
Почта настраивается в трёх местах. Сначала настраиваем адрес, от имени которого система будет отправлять письма из очереди. Переходим с адреса email.
Выбираем otrs@localhost. Будем менять его на реальный адрес.
  1. Вписываем реальный адрес, от которого OTRS будет отправлять письма.
  2. Выбираем, из какой очереди будут уходить уведомления и ответы под этим именем, в данном случае — Postmaster. Если запись одна, то из всех очередей отправка будет от этой записи. Если создать несколько, то от каждой указанной очереди письма будут отправляться от имени того, кого вы укажете. Но есть нюансы по отправке: по умолчанию только одна учетная запись на отправку, поэтому на почтовом сервере потребуется настроить ей права «отправка от имени». Если требуется, можно настроить сторонний модуль MultiSMTP для отправки через несколько smtp-серверов.
  3. Сохраняем и выходим.
Настраиваем входящую почту:
Переходим в «Администрирование» – «Учетные записи почты для Postmaster»
Нажимаем «Добавить почтовую учетную запись»
  1. Choose the protocol. It can be IMAP, POP3 or its variation.
  2. Fill in the login.
  3. Fill in the password.
  4. Put the host. If a port is different from default one, you may put mail.yourmailserver.com:port.
  5. Dispatching. Choose "Dispatching by selected Queue.
  6. Choose the queue for getting letters and creating tickets from this email account.
  7. Save.
Дальше настраиваем исходящую почту:
«Администрирование» -> «Настройка Системы»
Разворачиваем «Навигация» -> «Core» -> «Email»
  1. Прописываем протокол SMTP, SMTPS, SMTPTLS. Или MultiSMTP, если он установлен. Тогда настройки исходящей почты делаются в соответствующем пункте «Администрирование» – «SMTPнастройки»)
  2. Подтверждаем изменение.
  3. Вписываем пароль.
  4. Подтверждаем изменение.
  5. Вписываем логин.
  6. Подтверждаем изменение.
  7. Вписываем имя почтового сервера для исходящей почты.
  8. Подтверждаем изменение.
  9. Вписываем порт, если он отличен от дефолтного.
  10. Подтверждаем изменение.
Настроим хранение артиклов, чтобы не перегружалась база, и логи, чтобы было удобно их смотреть.
Переходим в Core (1) – CommunicationChannel(2) – MIMEBase(3)
И меняем ArticleStorageDB на ArticleStorageFS (4) и подтверждаем (5)
Примечание: Если не устраивает штатное место хранения, можете тут также указать путь хранения, но не забудьте там дать соответствующие права. Если у вас часть артиклов уже хранится в БД и выносить вы их не хотите, то поставьте галочку CheckAllStorageBackends, чтобы система их просматривала и в БД, и на ФС.
Настроим логи, чтобы было удобно их смотреть.
  1. Переходим Core(1) – Log(2)
  2. Указываем метод. Kernel::System::Log::File
  3. Подтверждаем изменение.
  4. Указываем, куда сохранять логи (в данном случае указано сохранение в штатную папку otrs, но если вы захотите сохранять в другое место или /var/log, то не забудьте дать права)
  5. Подтверждаем изменение.
  6. Ставим галочку, и тогда каждый месяц будет создаваться новый лог-файл.
  7. Подтверждаем изменение.
  8. И наконец ПРИМЕНЯЕМ ВСЕ НАШИ ИЗМЕНЕНИЯ В КОНФИГУРАЦИИ СИСТЕМЫ! Всё, что мы вносили и подтверждали до этого момента, ещё не применено!
После нажатия на кнопку «Применение», нам выведется список со всеми нашими изменениями, которые были сделаны.
Если всё верно, то нажимаем «Применить выбранные изменения».
Всё! OTRS установлена, почта, логи, артиклы и, в том числе, вложения настроены.
Нет предела совершенству, и мы обязательно найдём, о чём писать дальше.
Что можно еще сделать? Конечно, надо настроить https. Можно установить nginx перед apache. Ещё можно оптимизировать кэш, СУБД, и это далеко не всё.