TestRail – Test Case Management Software for QA and Development Teams.
Well – that’s all needed as a description)
Below – its installation on Debian Linux with NGINX, Let’s Encrypt, PHP-FPM, MariaDB, and Exim.
As the TestRail is just a simple PHP/MySQL application - so this post might be interesting more as an example of a quick LEMP with SSL setup process description then TestRail's itself.
Project’s homepage – www.gurock.com/testrail
Installation official documentation – here>>>.
Setup will be on an AWS EC2.
LEMP and SSL
Log in to the EC2:
ssh admin@testrail.example.com -i bttrm-testrail-eu-west-1.pem
Update packages list and installed packages:
root@ip-172-31-25-137:/home/admin# apt update && apt upgrade
Let’s Encrypt
Install Let’s Encrypt client:
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
Obtain a certificate using the standalone authenticator:
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
Install NGINX:
root@ip-172-31-25-137:/home/admin# apt -y install nginx
Will configure it a bit later.
PHP
Add the PHP 7.2 repository:
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
Update the available packages list:
root@ip-172-31-25-137:/home/admin# apt update
Install PHP and necessary for the TestRail modules:
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
Find PHP configs:
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
Edit both /etc/php/7.2/fpm/php.ini
and /etc/php/7.2/cli/php.ini
and add libraries load:
...
extension=mysql.so
extension=curl.so
ionCube install
Download its archive:
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
Unpack it and move to the /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/
Add zend_extension
to both ini-files as in the example above:
...
extension=mysql.so
extension=curl.so
zend_extension=/opt/ioncube/ioncube_loader_lin_7.2.so
NGINX virtual host configuration
Generate DF-key:
root@ip-172-31-25-137:/tmp# openssl dhparam -out /etc/nginx/dhparams.pem 2048
Add a virtual host config /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;
}
}
Check syntax and reload config files:
root@ip-172-31-25-137:/tmp# nginx -t && service nginx reload
PHP-FPM configuration
Create a pool’s config file /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
Restart FPM and check if the new pool started:
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 test
Create a working directory:
root@ip-172-31-25-137:/tmp# mkdir -p /var/www/testrail.example.com
Create the /var/www/testrail.example.com/info.php
file:
<?php
phpinfo()
?>
Check in a browser:
MySQL
Install it:
root@ip-172-31-25-137:/tmp# apt -y install mariadb-server
Run initial config:
root@ip-172-31-25-137:/tmp# mysql_secure_installation
Create a database and user:
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 installation
Get your trial here>>>.
You’ll get an email with the download link and trial-key.
Download archive:
root@ip-172-31-25-137:/tmp# wget https://secure.gurock.com/downloads/testrail/testrail-latest-ion70.zip
Unpack it and move to the project’s directory:
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/
Open your URL in a browser and proceed with the installation there:
Configure the database connection details:
Create logs directory:
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/
Set your project’s details:
An email will be set later, skip it for now:
Add an admin user, the trial key was sent in an email:
Ready:
Log in:
Cron jobs
Now – add a cronjob to run TestRail’s tasks.
Check if task.php
works:
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 $?
If no errors here – it can be added to a crontab:
* * * * * www-data /usr/bin/php /var/www/testrail.example.com/task.php
Exim and email settings
To send emails – a local Exim will be used.
Install it:
root@ip-172-31-25-137:/home/admin# apt -y install exim4-base
Configure it:
root@ip-172-31-25-137:/home/admin# dpkg-reconfigure exim4-config
Check if email sending works:
root@ip-172-31-25-137:/home/admin# echo "Exim test" | mailx -s "Exim test" admin@example.com
Go to the TestRail admin page – Administration > Site Settings > Email:
Done.
Similar posts
- 02/15/2016 Debian: установка LEMP – NGINX + PHP-FPM + MariaDB (0)
- 02/10/2018 Ansible: миграция RTFM 2.10 – Let’s Encrypt, NGINX SSL, hostname и exim (0)
- 02/26/2019 OpenVPN: SSL and hostname configuration (0)
- 04/12/2016 TLS/SSL: NGINX – настройка SSL от Let’s Encrypt на Debian 8 (0)
Top comments (2)
This tutorial was really helpful! There are many applications out there that are able to solve issues, but it's so complicated to learn the process of each one, especially if you're new to this kind of stuff. Some friends of mine have started working towards test case management tools, like qacoverage.com/ because each program that they've tried was too complicated. After all, this is the source of many great inventions. If you're lacking something, you'll start to look for solutions and eventually create something on your own. After that, the progress is going to be beautiful
Is there a similar thing for Ubuntu users?