osTicket 1.18 on Ubuntu 24.04 on Azure User Guide
Overview
osTicket is the widely used open source support ticketing and helpdesk system. It routes inbound email and web tickets into queues, assigns them to agents and teams, enforces SLAs, and lets your team reply with canned responses from a clean agent control panel. The cloudimg image installs osTicket 1.18 from the official release, fronted by nginx with PHP 8.3 and backed by a local MariaDB, all from the Ubuntu 24.04 noble archive with no third party APT repositories. The web installer has already been run and removed, so you land directly on the agent sign in page.
What is included:
- osTicket 1.18.3 from the official release, served from
/var/www/osticket - nginx with the osTicket vhost at
/etc/nginx/sites-available/cloudimg-osticket - PHP 8.3 with the mysqli, imap, gd, intl, mbstring, xml, apcu, opcache, bcmath, curl and zip extensions
- MariaDB with the
osticketdatabase andosticketapp user on loopback only osticket-firstboot.servicerotating the MariaDB password, the configuration secret and the administrator password per instanceosticket-cron.timerrunning the osTicket cron every minute for queued tasks and email fetch- The MariaDB database on a dedicated Azure data disk mounted at
/var/lib/mysql - nginx, php8.3-fpm and mariadb enabled and auto starting on boot
- 24/7 cloudimg support
Prerequisites
An active Azure subscription, an SSH key, and a VNet with a subnet. Standard_B2s (2 vCPU, 4 GB RAM) suits a small helpdesk team; move up to a larger burstable or a D series size for busier helpdesks. Open ports 80 and 443 on the network security group, plus 22 for SSH from your management address.
Step 1 to 3: Deploy and connect
ssh azureuser@<vm-ip>
Step 4: Verify the services
sudo systemctl is-active nginx php8.3-fpm mariadb
sudo ss -tlnp | grep ':80 '
php -r 'echo "php ".PHP_VERSION."\n";'

Step 5: Read the first boot credentials
On the first boot of your instance, a one shot service generates a fresh MariaDB password, a fresh configuration secret and a fresh administrator password, all unique to that instance, and writes them to a root only file.
sudo cat /root/osticket-credentials.txt
Note the osticket.admin.user (ostadmin) and the osticket.admin.pass value. The screenshot below masks the passwords, which are unique on every instance.

Step 6: The seeded helpdesk
The web installer has already imported the schema and the default data, so departments, help topics, an SLA, agent roles and ticket statuses are all in place, with the administrator agent created and ready.
sudo mariadb -N osticket -e "SELECT 'help_topics', COUNT(*) FROM ost_help_topic UNION ALL SELECT 'departments', COUNT(*) FROM ost_department UNION ALL SELECT 'agents', COUNT(*) FROM ost_staff;"

Step 7: Endpoints and the data disk
nginx serves an unauthenticated health endpoint for load balancer probes, the agent control panel at /scp/ and the customer portal at /. The MariaDB database lives on a dedicated data disk, kept separate from the operating system disk.
curl -s -o /dev/null -w 'healthz %{http_code}\n' http://127.0.0.1/healthz
curl -s -o /dev/null -w 'agent %{http_code}\n' http://127.0.0.1/scp/login.php
sudo findmnt -no SOURCE,TARGET,FSTYPE /var/lib/mysql

Step 8: Sign in to the agent control panel
Browse to http://<vm-ip>/scp/ and sign in as ostadmin with the password from Step 5.

Step 9: The ticket queue
After signing in you land on the open ticket queue, the core of the helpdesk, listing each ticket with its number, subject, sender, priority and assignee.

Step 10: Working a ticket
Open a ticket to read the customer message thread and reply. The reply editor supports canned responses, rich text, internal notes and file attachments, and you can set the department, status and assignee from the same view.

Step 11: The admin panel
The admin panel is where you configure departments, help topics, SLAs, email and agents. The System Settings page confirms the running osTicket version and your helpdesk name.

Step 12: Email and queues
- Departments and help topics: create the queues that inbound tickets route into under Admin Panel then Manage.
- Inbound email: connect a mailbox so email becomes tickets under Admin Panel then Emails, using IMAP fetch or a piped mailbox.
- Agents and teams: add agents and set their roles and permissions under the Agents tab.
- Canned responses and knowledge base: write canned replies and publish knowledge base articles for the customer portal.
Step 13: Components
| Component | Path |
|---|---|
| osTicket install | /var/www/osticket/ |
| Configuration | /var/www/osticket/include/ost-config.php (read only, mode 0440) |
| nginx vhost | /etc/nginx/sites-available/cloudimg-osticket |
| nginx logs | /var/log/nginx/ |
| MariaDB data | /var/lib/mysql/ (dedicated data disk) |
| First boot script | /usr/local/sbin/osticket-firstboot.sh |
| Cron timer | osticket-cron.timer (queued tasks and email fetch every minute) |
| Credentials | /root/osticket-credentials.txt (mode 0600 root:root) |
Step 14: Security
- HTTPS: install certbot and obtain a Let's Encrypt certificate, then follow the nginx prompts:
sudo apt-get install -y certbot python3-certbot-nginx && sudo certbot --nginx - Restrict the network security group so port 80 and 443 are open only to the addresses that need them, and keep port 22 limited to your management range.
- Rotate the administrator password from the agent profile once you have signed in, and keep the customer portal registration policy tight.
- The MariaDB database stays on loopback (127.0.0.1) and the network security group never opens port 3306.
- Patch monthly:
sudo apt-get update && sudo apt-get upgrade && sudo reboot
Licensing
osTicket is GPL 2.0, free to use commercially. cloudimg provides commercial support separately. Contact support@cloudimg.co.uk.