Deployment guide

Exponent CMS

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). You drop the modules onto pages and edit them in place from an admin toolbar, all on the classic LAMP stack.

This SecureAnyCloud 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). The installation runs entirely at build time, so there is no web setup wizard to complete. The image ships the bundled sample site, so a fresh VM serves a rendered site immediately. The MariaDB database and uploaded files live on a dedicated Azure data disk, and the database password and administrator account are rotated on the first boot of every VM. The image is backed by 24/7 SecureAnyCloud support.

What you get:

  • Exponent CMS 3.0.2 served on port 80 by nginx through 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/exponent for 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.service and mariadb.service as systemd units, enabled and active
  • 24/7 SecureAnyCloud support

Prerequisites

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

Standard_B2s (2 vCPU / 4 GiB RAM) is a good starting point. In the NSG, allow inbound 22/tcp from your management network and 80/tcp for the Exponent CMS web interface. Front the site with TLS for public exposure (see Step 10).

Step 1 - Deploy from the Azure Marketplace

Sign in to the Azure Portal, choose Create a resource, search the Marketplace for Exponent CMS 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

# Accept the Marketplace terms once per subscription (required before the first CLI deploy)
az vm image terms accept --urn sac1647283583153:exponent-cms-ubuntu-24-04:default:latest
az vm create \
  --resource-group <your-rg> --name exponent-cms \
  --image sac1647283583153:exponent-cms-ubuntu-24-04:default:latest \
  --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, the VM rotates the Exponent CMS database password, resets the administrator account to a fresh per-VM password, clears the cache and starts the stack. Check that the three services are running:

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 the credentials file 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. The image ships with no known login, and the web installer has been removed so it can never be re-run.

After your first sign-in, change the administrator email and password from the admin console.

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 instead of facing a blank page.

The image 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 you sign in, the Exponent admin toolbar appears at the top of every page, with Admin, Files and Pages menus. In-place editing controls (add a module, edit text, add a news post) appear directly on the content, so you can 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. Use 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 lets you 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. Check the mount with:

df -h /var/lib/exponent findmnt /var/lib/exponent

The web installer is removed after build and blocked by nginx. The file framework/conf/config.php, which holds the database password, is denied over HTTP, so the application configuration is never served.

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. Complete these steps on your VM, and use your own domain and email in place of the example values:

  • Install Certbot: sudo apt-get update && sudo apt-get install -y certbot python3-certbot-nginx
  • Obtain and install a certificate for your domain by running Certbot with the nginx plugin for your-domain.example.com. Supply your contact email when prompted.
  • Exponent CMS derives its base URL from the request, so it switches generated links to https:// automatically once TLS is terminated in front of it. No configuration change is required.

Certbot installs a renewal timer automatically, so certificates renew without further action.

Step 11 - Maintenance

  • Updates: the OS continues to receive unattended security updates. To upgrade Exponent CMS itself, deploy newer application code and run the upstream upgrade routine. Back up first.
  • Backups: back up the MariaDB exponent database (for example with mysqldump) and the /var/lib/exponent/files directory. Together they hold your content and uploaded files.
  • Logs: web server logs are under /var/log/nginx/. PHP-FPM logs are in /var/log/php8.3-fpm.log.

Support

Every SecureAnyCloud image is backed by 24/7 support. If you have questions about deploying or operating Exponent CMS on Azure, email sales@secureanycloud.com.

Deploy on Azure

Launch Exponent CMS 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