Exponent CMS on Ubuntu 24.04 on Azure User Guide
Overview
Exponent CMS is a long-standing open-source content management system and web application framework for building and running websites: content is organised into sections and built from a library of pluggable modules (text, news, blogs, galleries, forms, navigation and more) that you drop onto pages and edit in place from an admin toolbar, all on the classic LAMP stack. The cloudimg image installs Exponent CMS 3.0.2 on a full LAMP stack from the Ubuntu 24.04 repositories (nginx, PHP 8.3-FPM and MariaDB), drives the entire installation at build time so there is no web setup wizard for you to complete, ships the bundled sample site so a fresh VM serves a real rendered site immediately, stores the MariaDB database and uploaded files on a dedicated Azure data disk, and rotates the database password and the administrator account on the first boot of every VM. Backed by 24/7 cloudimg support.
What is included:
- Exponent CMS 3.0.2 served on port 80 by nginx via the PHP 8.3-FPM FastCGI socket
- The bundled sample site and a theme so the front end renders immediately
- MariaDB on loopback with its data directory on a dedicated Azure data disk
- A dedicated Azure data disk at
/var/lib/exponentfor the MariaDB database and uploaded files - A per-VM database password and a unique administrator account generated on first boot
- The web installer removed after build and blocked by nginx, so it can never be re-run
nginx.service,php8.3-fpm.serviceandmariadb.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. NSG inbound: allow 22/tcp from your management network and 80/tcp for the Exponent CMS web interface (front with TLS for public exposure - see Enabling HTTPS).
Step 1 - Deploy from the Azure Marketplace
Sign in to the Azure Portal, choose Create a resource, search the Marketplace for Exponent CMS 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). Review the dedicated data disk on the Disks tab, then Review + create -> Create.
Step 2 - Deploy with the Azure CLI
az vm create \
--resource-group <your-rg> --name exponent-cms \
--image <cloudimg-exponent-cms-image-urn> \
--size Standard_B2s \
--admin-username azureuser \
--ssh-key-values ~/.ssh/id_ed25519.pub \
--vnet-name <your-vnet> --subnet <your-subnet> \
--public-ip-sku Standard
az vm open-port --resource-group <your-rg> --name exponent-cms --port 80 --priority 1010
Step 3 - Connect to your VM
ssh azureuser@<vm-public-ip>
Step 4 - Confirm the LAMP stack is running
On first boot Exponent CMS rotates its database password, resets the administrator account to a fresh per-VM password, clears the cache and starts the stack.
systemctl is-active nginx php8.3-fpm mariadb
All three report active. The website is served on port 80; MariaDB listens on loopback only, and PHP-FPM runs on a Unix socket rather than a TCP port.

Step 5 - Retrieve the administrator password
The administrator account is unique to your VM and is generated on first boot. Read it as root:
sudo cat /root/exponent-cms-credentials.txt
The file contains the login (admin), the sign-in URL and a unique password, plus the database name, user and password. Nothing in the image ships with a known login, and the web installer has been removed so it can never be re-run. Change the administrator email and password from the admin console after your first sign-in.

Step 6 - Browse to your site
Browse to http://<vm-public-ip>/. The image ships with the bundled sample site and a theme, so you see a complete, rendered site immediately and can start editing rather than facing a blank page. The appliance derives its address from the request, so it answers correctly on the public IP, the private IP or any DNS name you point at it.

Step 7 - Sign in to the admin toolbar
Browse to http://<vm-public-ip>/index.php?controller=login&action=showlogin and sign in with admin and the password from the credentials file.

After signing in, the Exponent admin toolbar appears at the top of every page, with Admin, Files and Pages menus, and in-place editing controls (add a module, edit text, add a news post) appear directly on the content. This lets you build and rearrange your site visually.

Step 8 - Manage content, pages and users
Use the Pages menu to add, move and edit pages and sections, and the in-place module controls to add and configure content modules (text, news, blogs, galleries, forms and more). The Admin menu opens the management consoles - for example user management, where you can create and manage accounts (a fresh instance has a single administrator).

Step 9 - The dedicated data disk
The MariaDB database and Exponent's uploaded files live on a dedicated Azure data disk mounted at /var/lib/exponent, separate from the OS disk. This keeps your content independent of the OS image and lets you resize the disk as your site grows. The web installer is removed after build and the application configuration is never served over HTTP.
df -h /var/lib/exponent
findmnt /var/lib/exponent

The web installer is removed after build and blocked by nginx, and framework/conf/config.php (which holds the database password) is denied over HTTP:

Step 10 - Enabling HTTPS
For any public deployment, front Exponent CMS with TLS. Point a DNS A record at your VM's public IP, then install a certificate with Certbot and the nginx plugin. Run the following as prose-driven steps on your VM (replace the placeholders with your real values; do not paste them verbatim):
- Install Certbot:
sudo apt-get update && sudo apt-get install -y certbot python3-certbot-nginx - Obtain and install a certificate for your domain, supplying your contact email when prompted, by running certbot with the nginx plugin for
your-domain.example.com. - Exponent CMS derives its base URL from the request, so it automatically switches generated links to
https://once TLS is terminated in front of it. No configuration change is required.
Certbot installs a renewal timer automatically; certificates renew without further action.
Step 11 - Maintenance
- Updates: the OS continues to receive unattended security updates. Exponent CMS itself is upgraded by deploying newer application code and running the upstream upgrade routine; back up first.
- Backups: back up the MariaDB
exponentdatabase (for example withmysqldump) and the/var/lib/exponent/filesdirectory, which together hold your content and uploaded files. - Logs: web server logs are under
/var/log/nginx/; PHP-FPM logs are under/var/log/php8.3-fpm.log.
Support
Every cloudimg image is backed by 24/7 support. If you have any questions about deploying or operating Exponent CMS on Azure, contact us at support@cloudimg.co.uk.