TestRail: QA Test Case Management система — установка на Linux

Автор: | 03/22/2019
 

TestRail — Test Case Management Software for QA and Development Teams.

Собственно — этого достаточно для описания)

Ниже — описание процесса его установки на Debian с NGINX, Let’s Encrypt, PHP-FPM, MariaDB и Exim.

Домашняя страница проекта — www.gurock.com/testrail

Документация по установке — тут>>>.

Устанавливать будем на AWS EC2.

LEMP и SSL

Логинимся на сервер:

ssh admin@testrail.example.com -i bttrm-testrail-eu-west-1.pem

Обновляем пакеты и систему:

root@ip-172-31-25-137:/home/admin# apt update && apt upgrade

Let’s Encrypt

Устанавливаем клиент Let’s Encrypt:

root@ip-172-31-25-137:/home/admin# apt install -y git unzip
root@ip-172-31-25-137:/home/admin# git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt

Получаем сертификат через standalone аутентификатор:

root@ip-172-31-25-137:/home/admin# /opt/letsencrypt/letsencrypt-auto certonly -d testrail.example.com
...
1: Spin up a temporary webserver (standalone)
2: Place files in webroot directory (webroot)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 1
...
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/testrail.example.comd/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/testrail.example.com/privkey.pem
Your cert will expire on 2019-06-19.
...

NGINX

Устанавливаем NGINX:

root@ip-172-31-25-137:/home/admin# apt -y install nginx

К настройке вернёмся чуть позже.

PHP

Добавляем репозиторий для PHP 7.2:

root@ip-172-31-25-137:/home/admin# wget -q https://packages.sury.org/php/apt.gpg -O- | sudo apt-key add -
OK
root@ip-172-31-25-137:/home/admin# echo "deb https://packages.sury.org/php/ stretch main" | sudo tee /etc/apt/sources.list.d/php.list
deb https://packages.sury.org/php/ stretch main

Обновляем списки доступных пакетов:

root@ip-172-31-25-137:/home/admin# apt update

Устанавливаем PHP и необходимые для TestRail модули:

root@ip-172-31-25-137:/home/admin# apt -y install php7.2 php7.2-fpm php7.2-mysql php7.2-curl php7.2-json php7.2-mbstring php7.2-xml php7.2-zip

Находим файлы настроек PHP:

root@ip-172-31-25-137:/home/admin# find /etc/ -name php.ini
/etc/php/7.2/cli/php.ini
/etc/php/7.2/fpm/php.ini

Обновляем оба два /etc/php/7.2/fpm/php.ini и /etc/php/7.2/cli/php.ini, добавляем загрузку библиотек:

...
extension=mysql.so
extension=curl.so
Установка ionCube

Загружаем его архив:

root@ip-172-31-25-137:/home/admin# cd /tmp/
root@ip-172-31-25-137:/tmp# wget https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz

Распаковываем его, переносим в /opt:

root@ip-172-31-25-137:/tmp# tar xfpz ioncube_loaders_lin_x86-64.tar.gz
root@ip-172-31-25-137:/tmp# mv ioncube /opt/

Добавляем zend_extension в оба ini-файла, как в примере выше:

...
extension=mysql.so
extension=curl.so

zend_extension=/opt/ioncube/ioncube_loader_lin_7.2.so

Настройка NGINX

Генерируем ключ:

root@ip-172-31-25-137:/tmp# openssl dhparam -out /etc/nginx/dhparams.pem 2048

Добавляем файл настроек виртуалхоста — /etc/nginx/conf.d/testrail.example.com:

server {

    listen 80;
    server_name testrail.example.com;

    # Lets Encrypt Webroot
    location ~ /.well-known {
        root /var/www/html;
        allow all;
    }

    location / {

        # office1
        allow 194.***.***.24/29;
        # office2
        allow 91.***.***.78/32;
        # arseny home
        allow 188.***.***.48/32;
        deny  all;

        return 301 https://testrail.example.com;
    }
}

server {

    listen       443 ssl;
    server_name  testrail.example.com;

    root /var/www/testrail.example.com;

    access_log  /var/log/nginx/testrail.example.com-access.log;
    error_log /var/log/nginx/testrail.example.com-error.log warn;

    # office1
    allow 194.***.***.24/29;
    # office2
    allow 91.***.***.78/32;
    # arseny home
    allow 188.***.***.48/32;
    deny  all;

    ssl_certificate /etc/letsencrypt/live/testrail.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/testrail.example.com/privkey.pem;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_dhparam /etc/nginx/dhparams.pem;
    ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
    ssl_session_timeout 1d;
    ssl_stapling on;
    ssl_stapling_verify on;

    location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar|otf|ttf)\$ {
        try_files \$uri =404;
    }

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|js|woff)$ {
        access_log off;
        log_not_found off;
        expires max;
    }

    location ~ \.php(?:/|$) {
        try_files $uri =404;
        fastcgi_pass unix:/run/php/testrail.example.com.sock;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_intercept_errors on;
        fastcgi_index index.php;
    }
}

Проверяем синтаксис, перечитываем конфиги:

root@ip-172-31-25-137:/tmp# nginx -t && service nginx reload

Настройка PHP-FPM

Создаём файл настроек /etc/php/7.2/fpm/pool.d/testrail.example.com.conf:

[testrail.example.com]

user = www-data
group = www-data

listen = /run/php/testrail.example.com.sock

listen.owner = www-data
listen.group = www-data

pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

;php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f www@my.domain.com
;php_flag[display_errors] = off
;php_admin_value[error_log] = /var/log/fpm-php.www.log
;php_admin_flag[log_errors] = on
;php_admin_value[memory_limit] = 32M

Перезапускаем FPM, проверяем — создался ли новый пул:

root@ip-172-31-25-137:/tmp# service php7.2-fpm restart
root@ip-172-31-25-137:/tmp# ps aux | grep fpm
root     15008  0.5  2.7 400684 28368 ?        Ss   11:00   0:00 php-fpm: master process (/etc/php/7.2/fpm/php-fpm.conf)
www-data 15010  0.0  0.6 400676  6904 ?        S    11:00   0:00 php-fpm: pool testrail.example.com
www-data 15011  0.0  0.6 400676  6904 ?        S    11:00   0:00 php-fpm: pool testrail.example.com
www-data 15012  0.0  0.6 400676  6904 ?        S    11:00   0:00 php-fpm: pool www
www-data 15013  0.0  0.6 400676  6904 ?        S    11:00   0:00 php-fpm: pool www
Проверка PHP

Создаём рабочий каталог:

root@ip-172-31-25-137:/tmp# mkdir -p /var/www/testrail.example.com

Создаём файл /var/www/testrail.example.com/info.php:

<?php
phpinfo()
?>

Проверяем в браузере:

MySQL

Устанавливаем:

root@ip-172-31-25-137:/tmp# apt -y install mariadb-server

Запускаем первоначальную настройку:

root@ip-172-31-25-137:/tmp# mysql_secure_installation

Создаём базу данных:

MariaDB [(none)]> CREATE DATABASE testrail DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> GRANT ALL ON testrail.* TO 'testrail'@'localhost' identified by 'uo***8a';
Query OK, 0 rows affected (0.00 sec)

Установка TestRail

Триал получаем тут>>>.

В письме придёт ссылка на скачивание файла и сам ключик.

Загружаем архив:

root@ip-172-31-25-137:/tmp# wget https://secure.gurock.com/downloads/testrail/testrail-latest-ion70.zip

Распаковываем, и переносим в каталог проекта:

root@ip-172-31-25-137:/tmp# unzip testrail-latest-ion70.zip
root@ip-172-31-25-137:/tmp# cp -r testrail/* /var/www/testrail.example.com/
root@ip-172-31-25-137:/tmp# chown -R www-data:www-data /var/www/testrail.example.com/

Открываем в браузере — и продолжаем установку там:

Настраиваем подключение к базе данных:

Создаём каталог логов:

root@ip-172-31-25-137:/tmp# mkdir /var/www/testrail.example.com/logs
root@ip-172-31-25-137:/tmp# chown -R www-data:www-data /var/www/testrail.example.com/

Настраиваем детали проекта:

Почту добавим позже, пропускаем:

Создаём администратора, лицензионный ключ — в письме:

Готово:

Логинимся:

cron-задачи

Далее — добавим выполнение задач по расписанию.

Проверяем работу скрипта task.php:

root@ip-172-31-25-137:/home/admin# php /var/www/testrail.example.com/task.php
root@ip-172-31-25-137:/home/admin# echo $?

Ошибок нет — можно добавлять в cron:

* * * * * www-data /usr/bin/php /var/www/testrail.example.com/task.php

Exim и почта

Для отправки почты используем локальный Exim.

Устанавливаем:

root@ip-172-31-25-137:/home/admin# apt -y install exim4-base

Настраиваем его:

root@ip-172-31-25-137:/home/admin# dpkg-reconfigure exim4-config

Проверяем:

root@ip-172-31-25-137:/home/admin# echo "Exim test" | mailx -s "Exim test" admin@example.com

Переходим в настройки почты самого TestRail — Administration > Site Settings > Email:

Проверить отправку почты можно через форму восстановления пароля.

Готово.