Jump to content
From ArchWiki

MantisBT (Mantis Bug Tracker) is a bug tracker written in PHP. For a list of features, visit its website.

## Installation

Install the mantisbtAUR package.

Choose your favorite web server and/or application server (such as UWSGI) for making the application available.

## Configuration

mantisbt has a decent administration guide, that can be followed for setting it up.

All configuration is exposed in `/etc/webapps/mantisbt/config_inc.php`.

- Setup a compatible DBMS and use the 'Database Configuration' section to connect mantisbt with it.
- The 'Anonymous Access / Signup' section needs special attention, if you are not planning on disabling CAPTCHAs for new signups (see #PHP extensions and #TTF fonts).
- If you want to use SMTP you can set it up in the 'Email Configuration' section. mantisbt defaults to a phpmailer setup, which has the downside of not reaching mail servers that use grey listing.

In any case, you will need to meet some requirements for mantisbt to work properly:

### PHP extensions

- mysqli (if you are using MySQL/MariaDB)
- gd (if you plan on using CAPTCHA for user signup)

### TTF fonts

- make sure to install a TrueTypeFont, that you would like to use for the creation of CAPTCHAs
- setup the paths and names of the fonts, you would like to use:

    /etc/webapps/mantisbt/config_inc.php

    # trailing slash is important!
    $g_system_font_folder = '/usr/share/fonts/TTF/';

    # here DroidSans.ttf from the package ttf-droid is used for illustration
    $g_font_per_captcha = 'DroidSans.ttf';

Note: Make sure to also include the TTF path (e.g. `/usr/share/fonts/TTF`) in the open_basedir of your PHP instance!

### Web server

#### nginx + uwsgi

This example shows a basic setup using a subdomain for the bug tracker, with some handson redirects. The below mentioned file needs of course to be sourced within `/etc/nginx/nginx.conf`. For a subfolder-based setup for mantisbt, some modifications are needed.

    /etc/nginx/nginx.conf

    server {
      listen 80;
      listen [::]:80;
      server_name bugs.mydomain.org www.mydomain.org;
      return 301 https://bugs.mydomain.org$request_uri;
    }
    server {
      listen 443 ssl;
      listen [::]:443 ssl;
      server_name www.bugs.mydomain.org;
      return 301 https://bugs.mydomain.org$request_uri;
    }
    server {
      listen 443 ssl;
      listen [::]:443 ssl;
      server_name bugs.mydomain.org;
      include tls.conf;
      root /usr/share/webapps/mantisbt;
      access_log /var/log/nginx/access.bugs.mydomain.log;
      error_log /var/log/nginx/error.bugs.mydomain.log;
      include letsencrypt-challenge.conf;

      location ~ ^/(admin|core|doc|lang) {
        deny all;
      }

      location / {
        index index.php;
        try_files $uri $uri/ @mantisbt;
      }

      location @mantisbt {
        include uwsgi_params;
        uwsgi_modifier1 14;
        uwsgi_pass unix:/run/uwsgi/mantisbt.sock;
      }

      location ~  \.php?$ {
        include uwsgi_params;
        uwsgi_modifier1 14;
        uwsgi_pass unix:/run/uwsgi/mantisbt.sock;
      }

      # Deny serving files beginning with a dot, but allow letsencrypt acme-challenge
      location ~ /\.(?!well-known/acme-challenge) {
        access_log off;
        log_not_found off;
        deny all;
      }
    }

UWSGI can be used to achieve a resource preserving setup with dedicated PHP settings.

    /etc/uwsgi/mantisbt.ini

    [uwsgi]
    procname-master = mantisbt
    plugins = php
    master = true
    socket = /run/uwsgi/%n.sock
    uid = http
    gid = http
    processes = 10
    cheaper = 2
    cheaper-step = 1
    idle = 600
    die-on-idle = true

    php-allowed-ext = .php
    php-docroot = /usr/share/webapps/mantisbt
    php-index = index.php
    php-set = date.timezone=Europe/Berlin
    php-set = open_basedir=/tmp/:/usr/share/fonts/TTF:/usr/share/webapps/mantisbt:/usr/share/webapps/mantisbt/core:/etc/webapps/mantisbt
    php-set = session.save_path=/tmp
    php-set = session.gc_maxlifetime  21600
    php-set = session.gc_divisor      500
    php-set = session.gc_probability  1
    php-set = post_max_size=64M
    php-set = upload_max_filesize=64M
    php-set = always_populate_raw_post_data=-1
    php-set = extension=curl
    php-set = extension=gd
    php-set = extension=imagick
    php-set = extension=intl
    php-set = extension=mysqli

If your (modified) versions of these files are in place, you should restart your nginx and start/enable a uwsgi socket for mantisbt using systemd.

### Database

After making the application available, go to `/admin/install.php` with a web browser to setup the database. Follow the instructions on that page and let mantisbt generate the tables.

Note: You have to modify your #Web server settings temporarily to be able to visit that page. Here this is shown according to the example of using #nginx + uwsgi.

    /etc/nginx/nginx.conf

      location ~ ^/(core|doc|lang) {
        deny all;
      }

### Administrator

The initial account generated by mantisbt is called administrator and has the password root.

Warning: Make sure to change the password for the administrator user and set it up properly, right after logging in for the first time!
Note: Modify your #Web server settings again, to make the admin settings unavailable again. The example of using #nginx + uwsgi shows you how.

## Usage

mantisbt should be all setup now. The administrator user is able to create new projects and give user rights to signed up users.

## See also

- Official website
- Official wiki
- Official documentation
- Official bug tracker
- Official forums
- MantisBT on github

Categories:

- Issue tracking systems
- Web applications