Deployment guide

Request Tracker

Overview

Request Tracker (RT) is a mature, enterprise-grade open source ticketing platform from Best Practical. It tracks requests, incidents and tasks through their whole lifecycle, with queues, custom fields, approvals, service level reminders, a full rights and permission model, and a searchable history of every interaction. Teams use it to run help desks, IT service management, and operational and security workflows from one place.

This SecureAnyCloud image ships RT 5 served by Apache with mod_perl on a hardened Ubuntu 24.04 LTS base, patched at build time. It includes a local PostgreSQL server, so the appliance is complete and useful on its own.

What you get:

  • Request Tracker 5 served by Apache 2 with mod_perl (prefork), managed by systemd
  • A bundled PostgreSQL 16 server holding the RT database, already installed and initialised
  • RT served on :80, with the login page reachable at /
  • A per-VM administrator password generated on first boot and recorded in a root-only file
  • No shipped default login: RT's well-known root / password default is replaced by a unique per-VM secret, and no known or blank credential authenticates
  • A per-VM PostgreSQL secret: the database password and the RT_SiteConfig database secret are also rotated on first boot, so nothing is baked into the image
  • PostgreSQL bound to 127.0.0.1 only (port 5432 on the loopback interface), never exposed to the network
  • A dedicated Azure data disk carrying the entire PostgreSQL cluster, so all of your ticket data lives off the operating system disk
  • postgresql.service and apache2.service as enabled systemd units
  • 24/7 SecureAnyCloud support

Prerequisites

You need an active Azure subscription, an SSH key pair, and a VNet with a subnet in the target region.

Standard_B2s (2 vCPU / 4 GiB RAM) is a sensible starting size. Choose a larger size for bigger or busier instances.

Configure the network security group (NSG) to allow inbound 22/tcp from your management network and 80/tcp for RT. RT serves plain HTTP on port 80, so for production terminate TLS in front of it with your own domain. The bundled PostgreSQL listens on 127.0.0.1 only, so port 5432 stays off the network.

Step 1 - Deploy from the Azure Marketplace

Sign in to the Azure Portal, choose Create a resource, search the Marketplace for Request Tracker by SecureAnyCloud, and select Create.

On the Basics tab, pick your subscription, resource group, region and size. Under Administrator account, choose SSH public key and paste your key. Under Inbound port rules, allow SSH (22) and HTTP (80).

Review the dedicated data disk on the Disks tab, then select Review + create and Create.

Step 2 - Deploy from the Azure CLI

# Accept the Marketplace terms once per subscription (required before the first CLI deploy)
az vm image terms accept --urn sac1647283583153:request-tracker-ubuntu-24-04:default:latest
az vm create \
  --resource-group <your-rg> \
  --name request-tracker \
  --image sac1647283583153:request-tracker-ubuntu-24-04:default:latest \
  --size Standard_B2s \
  --admin-username azureuser \
  --generate-ssh-keys \
  --public-ip-sku Standard

Open port 80 for RT:

az vm open-port --resource-group <your-rg> --name request-tracker --port 80

Step 3 - Confirm the services are running

SSH in as azureuser and confirm that PostgreSQL and Apache are both active. PostgreSQL listens only on 127.0.0.1:5432, while Apache serves RT on port 80.

systemctl is-active postgresql apache2 request-tracker-firstboot
ss -tln | grep -E ':80 |:5432 '

Step 4 - Retrieve the per-VM administrator password

Every VM generates its own RT administrator password on first boot. The password, the login user and the URL are written to a root-only credentials file. Read it with sudo:

sudo cat /root/request-tracker-credentials.txt

Sign in to RT as user root with the RT_ADMIN_PASSWORD from this file. On the VM itself, run sudo -u postgres psql rt5 to reach the database directly over the local socket.

Step 5 - Sign in to Request Tracker

Browse to http://<vm-public-ip>/. The RT login page opens.

Sign in with username root and the password from Step 4.

Step 6 - Explore the RT dashboard

After you sign in, RT opens on RT at a glance, your home dashboard. It summarises the highest-priority tickets you own, the newest unowned tickets and your bookmarks, and it includes a quick ticket creation box.

The top menu gives you Search, Reports, an Admin area and the Create button.

Step 7 - Create and view a ticket

Click Create in the top menu, choose a queue such as General, give the ticket a subject and description, and submit it.

RT opens the ticket display page. There you can see the basics (status, priority, owner and queue), add correspondence and comments, set custom fields, and follow the full history.

Step 8 - Configure RT in the administration area

Open the Admin area to configure RT. From here you manage Users and their passwords, Groups and membership, Queues and their properties, Custom Fields, Custom Roles and Scrips. Scrips are the automation rules that drive RT's workflows.

Use this area to tailor RT to your team's process.

Step 9 - Confirm there are no known or default credentials

Request Tracker ships with a well-known default web login of root / password. The SecureAnyCloud image removes it. The root account is given a unique per-VM secret on first boot, and no known or blank password authenticates.

You can verify this with the built-in round-trip check. It confirms that the per-VM administrator signs in through RT's web login, and that a blank password and common weak guesses are all rejected:

sudo -u postgres psql -d rt5 -c "SELECT id, name FROM users WHERE name = 'root'"
sudo bash /usr/local/sbin/request-tracker-cred-roundtrip.sh

Step 10 - Verify the stack and where your data lives

Confirm the RT version, the dedicated data disk and the installed database.

The entire PostgreSQL cluster lives on the data disk mounted at /data and bind-mounted onto /var/lib/postgresql. All of your tickets, transactions, attachments and users are kept separate from the operating system disk and travel with the VM:

dpkg-query -W -f='RT ${Version}\n' request-tracker5
findmnt -no SOURCE,TARGET,FSTYPE,SIZE /data;
findmnt -no SOURCE,TARGET /var/lib/postgresql
sudo -u postgres psql -d rt5 -tAc "SELECT 'tickets = '||count(*) FROM tickets UNION ALL SELECT 'users = '||count(*) FROM users UNION ALL SELECT 'queues = '||count(*) FROM queues"

Adding your own domain and TLS

The appliance serves plain HTTP on port 80. RT builds its base URL into the links it puts in tickets and notifications, so for production you should set your own address.

Front RT with your domain and a TLS certificate. Then set $WebDomain to your public hostname in /etc/request-tracker5/RT_SiteConfig.d/91-sac-web.pm and restart Apache:

sudo systemctl restart apache2

You can terminate TLS with Azure Application Gateway, an nginx or Caddy reverse proxy, or a managed load balancer with a certificate for your domain.

Security notes

  • Encrypt web traffic. RT serves plain HTTP on port 80. Beyond a trusted network, put it behind your own TLS-terminating reverse proxy or Azure Application Gateway with a certificate for your domain.
  • Keep PostgreSQL private. The bundled PostgreSQL listens on 127.0.0.1 only and is never reachable from the network. Administer it through RT, or over SSH with sudo -u postgres psql rt5.
  • Protect the credentials. The administrator password and the database secret are unique per VM, and no known or blank credential authenticates. Keep /root/request-tracker-credentials.txt protected, and change the password from within RT if you share access.
  • Restrict the NSG. Allow inbound 80/tcp only from the networks that need RT.

Support

SecureAnyCloud maintains this image and provides 24/7 support. For help deploying or operating Request Tracker on Azure, contact us at secureanycloud.com.

Deploy on Azure

Launch Request Tracker on Ubuntu 24.04 LTS on Azure with 24/7 support from SecureAnyCloud.

View this image

Need Help?

Our support team is available 24/7.

sales@secureanycloud.com

Deploy on Azure