Deployment guide

ProjeQtOr

Overview

ProjeQtOr is a free and open source project and quality management platform. Project managers, IT departments, service organisations and quality teams use it to run their delivery work from one web interface. It brings together projects and their planning with a Gantt view, activities and tasks, tickets and issues, risks, requirements, tests, meetings, documents, timesheets and resource assignment, all gated by ProjeQtOr's own user and access control.

This SecureAnyCloud image ships ProjeQtOr 13.0.0 served by nginx and PHP 8.3 FPM on a hardened Ubuntu 24.04 LTS base, patched at build time. A bundled local MariaDB server makes the appliance complete and useful on its own. ProjeQtOr runs behind nginx on port 80. MariaDB listens only on the loopback interface (127.0.0.1:3306) and keeps its database, along with your uploaded and generated files, on a dedicated Azure data disk.

First boot generates a unique administrator password on every VM. The well-known ProjeQtOr default login is never left active.

What you get:

  • ProjeQtOr 13.0.0 served by nginx and PHP 8.3 FPM, managed by systemd
  • A bundled MariaDB server holding the ProjeQtOr database, already installed and ready
  • A ready-to-use web console served on :80, with the full versioned schema in place (347 tables) and no install wizard left exposed
  • A per-VM administrator password, generated on first boot and recorded in a root-only file
  • No default login: the well-known ProjeQtOr admin / admin credential is rotated to a unique per-VM secret, and no known, blank or weak credential authenticates
  • The database secret kept out of the web tree: parameters.php lives on the data disk outside the docroot, so it can never be served over HTTP
  • All required PHP extensions and ProjeQtOr's recommended PHP limits, preconfigured
  • nginx.service, php8.3-fpm.service and mariadb.service as enabled systemd units
  • MariaDB bound to 127.0.0.1 only, never exposed to the network
  • A dedicated Azure data disk carrying the MariaDB database, the ProjeQtOr file store and the database configuration
  • An unauthenticated /healthz endpoint for Azure Load Balancer health probes
  • 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_D2s_v3 (2 vCPU / 8 GiB RAM) is a sensible starting point. Size up for larger or busier teams.

Configure the network security group (NSG) to allow inbound 22/tcp from your management network and 80/tcp for the console. Also allow 443/tcp once you add TLS.

ProjeQtOr serves plain HTTP on port 80 out of the box. For production, terminate TLS in front of it with your own domain. The bundled MariaDB is never exposed. It listens on 127.0.0.1 only, so port 3306 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 ProjeQtOr 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 with the Azure CLI (alternative)

To use the command line instead, create the VM from the SecureAnyCloud ProjeQtOr image with your resource group, image URN, size and SSH key. Open ports 22 and 80 on the NSG, then browse to the public IP.

# Accept the Marketplace terms once per subscription (required before the first CLI deploy)
az vm image terms accept --urn sac1647283583153:projeqtor-ubuntu-24-04:default:latest
az vm create \
  --resource-group my-rg \
  --name projeqtor \
  --image sac1647283583153:projeqtor-ubuntu-24-04:default:latest \
  --size Standard_D2s_v3 \
  --admin-username azureuser \
  --generate-ssh-keys \
  --public-ip-sku Standard
az vm open-port --resource-group my-rg --name projeqtor --port 80 --priority 900

Step 3 - Confirm the services and retrieve the admin password

Connect over SSH as azureuser. All three services and the first-boot unit should be active, with nginx listening on port 80 and MariaDB bound to the loopback interface only.

systemctl is-active nginx php8.3-fpm mariadb projeqtor-firstboot ss -tlnp | grep -E ':80 |:3306 '

On the first boot of every VM, ProjeQtOr generates a unique administrator password. It records the password, together with the sign-in URL, in a root-only file. Read the file with sudo:

sudo cat /root/projeqtor-credentials.txt

Step 4 - Sign in to ProjeQtOr

Browse to http://<your-vm-ip>/. ProjeQtOr presents its own sign-in page. Sign in with the user admin and the password from the credentials file.

After you sign in, the Start Guide home opens and walks you through your first configuration steps. The top navigation offers Projects, Activities, Milestones, Meetings, Planning, Resources and Reports. The left menu offers Planning, Ticketing, Agile scrum, Follow up, Steering and Financial.

Step 5 - Create your first project and task

Open the Projects screen from the top navigation and select the new item button to create a project. Give it a name (for example Website Redesign 2026) and save. The project appears in the list, and its full detail form opens, ready for type, planning, organisation and the rest.

Next, open the Activities screen and create a task against that project. Name it (for example Design homepage mockups), leave the activity type as Task and the project set to your new project, and save. The task is stored in MariaDB and reads straight back into the activity list and detail, linked to its project. This is ProjeQtOr at work, from planning down to individual work items.

From here, build out the plan and Gantt schedule, raise tickets and issues, log risks and requirements, record meetings and documents, and enter timesheets against each activity.

Security model - no default credentials

ProjeQtOr ships with a well-known default admin administrator account (admin / admin). This image removes that hazard. First boot rotates the single admin user (id 1) to a unique per-VM secret, stored as a salted SHA 256 hash. The default admin password, a blank password and common weak guesses no longer authenticate.

The database configuration file that holds the ProjeQtOr database secret is written outside the web tree on the data disk, so it can never be served over HTTP. The configuration wizard is never exposed.

Every build proves the following before the image is captured:

  • The per-VM admin authenticates through ProjeQtOr's own User::authenticate() code path, while the defaults and weak guesses are rejected.
  • An unauthenticated request to a privileged route is refused.
  • A real project and task persist through the application's own database layer.
bash /usr/local/sbin/projeqtor-cred-roundtrip.sh

Where your data lives

The MariaDB database, the ProjeQtOr file store (uploads, reports and cache) and the database configuration file all live on a dedicated Azure data disk, not on the OS disk. MariaDB's data directory is bind-mounted from the data disk onto /var/lib/mysql. The ProjeQtOr files directory is bind-mounted onto the same disk.

Your projects, tasks, tickets and uploaded documents therefore survive a VM resize or OS disk swap and stay on managed, snapshot-friendly storage.

curl -sI http://127.0.0.1/healthz | head -1 findmnt -no SOURCE,TARGET,FSTYPE,SIZE /data findmnt -no SOURCE,TARGET /var/lib/mysql

Production - add your own domain and TLS

ProjeQtOr serves plain HTTP on port 80 out of the box so you can sign in immediately. Before you rely on it for day-to-day project management, put it behind your own domain and TLS so the console is served over HTTPS.

Point a DNS record at the VM, open 443/tcp on the NSG, and terminate TLS in front of nginx with a certificate from your own certificate authority (for example Let's Encrypt).

Keep MariaDB on the loopback interface, take regular snapshots of the data disk, and restrict SSH to your management network.

Support

SecureAnyCloud builds and maintains this image and provides 24/7 support. ProjeQtOr is licensed under the GNU Affero General Public License version 3. SecureAnyCloud is not affiliated with or endorsed by the ProjeQtOr project.

Deploy on Azure

Launch ProjeQtOr 13 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