CDash on Ubuntu 24.04 on Azure User Guide
Overview
CDash is Kitware's free, open source, web based software testing server: the companion dashboard to CMake and CTest. Your build machines submit their configure, build, test, coverage and dynamic analysis results, and CDash aggregates them into a single sortable dashboard so your whole team can see the health of every branch and platform, spot regressions the moment they land, and drill into the exact failing test or compiler warning. The cloudimg image delivers CDash fully installed and configured on Ubuntu 24.04 as a PHP 8.3 Laravel 12 application with its Vue frontend compiled into the image and a PostgreSQL 16 database, so a complete testing dashboard is running within minutes of launch. Backed by 24/7 cloudimg support.
CDash is licensed under the BSD 3-Clause License (Copyright Kitware, Inc. and the Insight Software Consortium). All product and company names are trademarks or registered trademarks of their respective holders. This image repackages the upstream open source release with cloudimg's provisioning and support.
What is included:
- CDash 5.2.0 (BSD-3-Clause), served from
/var/www/cdash/public - PHP 8.3 (
php8.3-fpm) + nginx, with the web UI on port 80 - PostgreSQL 16 as the application database, listening on localhost only
- The Vue 3 frontend compiled into the image at build time, so nothing is fetched at runtime
- A per-VM administrator password, a fresh application encryption key and a rotated database password, all generated on first boot and written to a root-only file, so no default or shared login ships in the image
nginx.service,php8.3-fpm.serviceandpostgresql.serviceas systemd units, enabled and active- 24/7 cloudimg support

Prerequisites
An active Azure subscription, an SSH key pair, and a VNet plus subnet in the target region. Standard_B2s (2 vCPU / 4 GiB RAM) is a good starting point; scale up for larger teams or high submission volumes. NSG inbound: allow 22/tcp from your management network and 80/tcp (HTTP) from your users. Add 443/tcp if you enable HTTPS. The PostgreSQL database listens on localhost only, so no database port is exposed.
Step 1 — Deploy from the Azure Marketplace
Sign in to the Azure Portal, choose Create a resource, search the Marketplace for CDash by cloudimg, and select Create. On Basics 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). Then Review + create and Create.
Step 2 — Deploy from the Azure CLI
az vm create \
--resource-group <your-rg> \
--name cdash \
--image <marketplace-image-urn> \
--size Standard_B2s \
--admin-username azureuser \
--generate-ssh-keys \
--public-ip-sku Standard
Open HTTP to reach the web UI:
az vm open-port --resource-group <your-rg> --name cdash --port 80 --priority 900
Step 3 — Connect to your VM
ssh azureuser@<vm-public-ip>
Step 4 — Retrieve the first-boot administrator credentials
On the first boot of your instance, cdash-firstboot.service generates a fresh application encryption key, rotates the PostgreSQL password and creates a unique administrator account, writing everything to a root-only file. Read it with:
sudo cat /root/cdash-credentials.txt
You will see the generated administrator email and password, plus the database name and user. The password is unique to this VM and is not stored anywhere else.

Step 5 — Confirm the service is healthy
The web stack and database are managed by systemd and come up on boot. Confirm they are active:
systemctl is-active nginx php8.3-fpm postgresql
Check that the web UI answers and reports the CDash version:
curl -s -o /dev/null -w "GET /login -> HTTP %{http_code}\n" http://127.0.0.1/login
cat /var/www/cdash/public/VERSION


Step 6 — Sign in to the dashboard
Browse to http://<vm-public-ip>/ and sign in at /login with the generated administrator email and password from Step 4. You arrive at the CDash dashboard, which lists the projects you are a member of. A fresh instance has no projects yet.

Step 7 — Create a project
Click Create Project on the dashboard. Give the project a name and description, choose its visibility (Public, Protected or Private), and decide whether submissions must present a valid authentication token. Save it, and the project is ready to receive dashboards.

Step 8 — Submit dashboards from CTest
In your project's CTest script, point ctest_submit at this server by setting the CDash drop location. A minimal CTestConfig.cmake looks like:
set(CTEST_PROJECT_NAME "MyProject")
set(CTEST_SUBMIT_URL "http://<vm-public-ip>/submit.php?project=MyProject")
set(CTEST_DROP_METHOD "http")
Then run a dashboard build, for example:
ctest -D Experimental
Your configure, build and test results appear on the project's dashboard in CDash within seconds. CDash parses submissions synchronously, so no separate queue worker is required.
Security model
This image ships with no default login and no data. The database is created empty at build time, and the web server is held offline until first boot completes, so the dashboard is never reachable with a build-time secret. On first boot a one-shot service regenerates the Laravel APP_KEY, rotates the PostgreSQL password in lock-step with the application configuration, and creates a single administrator with a random password. A wrong password is rejected; only the generated per-VM password authenticates:
U=$(sudo grep '^cdash.admin.user=' /root/cdash-credentials.txt | cut -d= -f2-)
cj=$(mktemp); tok=$(curl -s -c $cj http://127.0.0.1/login | grep -oE 'name="_token"[^>]*value="[^"]+"' | head -1 | sed -E 's/.*value="([^"]+)".*/\1/')
curl -s -o /dev/null -w "wrong password -> HTTP %{http_code}\n" -b $cj -c $cj --data-urlencode "_token=$tok" --data-urlencode "email=$U" --data-urlencode "password=WrongGuess-123" http://127.0.0.1/login
rm -f $cj
A wrong password returns HTTP 401; the correct per-VM password returns HTTP 302 and lands on the dashboard.

Enable HTTPS with a custom domain
Point a DNS A record at your VM's public IP, allow 443/tcp in the NSG, then install a certificate with Certbot and set APP_URL to your https:// domain in /var/www/cdash/.env:
sudo apt-get update && sudo apt-get install -y certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.example.com
After changing .env, rebuild the config cache:
sudo -u www-data php /var/www/cdash/artisan config:cache
Maintenance
- Logs: application logs are at
/var/www/cdash/storage/logs/cdash.log; nginx logs are under/var/log/nginx/. - Database backups: back up the
cdashPostgreSQL database withsudo -u postgres pg_dump cdash > cdash-backup.sql. - OS updates: unattended security upgrades are enabled, so the base OS keeps patching itself.
- Admin CLI: manage users and projects with
sudo -u www-data php /var/www/cdash/artisan <command>.
Support
cloudimg provides 24/7 technical support for this CDash image by email (support@cloudimg.co.uk) and live chat, covering deployment, first-boot credentials, creating projects and submitting dashboards, notifications, LDAP authentication, HTTPS setup, database administration and upgrades. For billing or subscription questions, contact support@cloudimg.co.uk.