Application Development Azure

Concrete CMS on Ubuntu 24.04 on Azure User Guide

| Product: Concrete CMS on Ubuntu 24.04 LTS on Azure

Overview

Concrete CMS (formerly concrete5) is an open-source content management system known for its in-context editing experience: signed-in editors edit pages directly on the page, dragging blocks and content into place rather than working through a separate back-end form. The cloudimg image installs Concrete CMS 9.5.2 on a full LAMP stack from the Ubuntu 24.04 repositories (nginx, PHP 8.3-FPM and MariaDB), runs the entire headless install at build time so there is no web wizard, stores the MariaDB database and Concrete application 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:

  • Concrete CMS 9.5.2 served on port 80 by nginx via the PHP 8.3-FPM FastCGI socket, with pretty URLs
  • MariaDB on loopback with its data directory on a dedicated Azure data disk
  • A dedicated Azure data disk at /var/lib/concrete for the MariaDB database and the Concrete application files and configuration
  • A per-VM database password and a unique administrator account generated on first boot
  • nginx.service, php8.3-fpm.service and mariadb.service as 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_B2ms (2 vCPU / 8 GiB RAM) is a good starting point. NSG inbound: allow 22/tcp from your management network and 80/tcp for the Concrete 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 Concrete 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 from the Azure CLI

az vm create \
  --resource-group <your-rg> \
  --name concrete-cms \
  --image <marketplace-image-urn> \
  --size Standard_B2ms \
  --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 concrete-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 Concrete CMS rotates its database password, resets the administrator account to a fresh per-VM password, sets the canonical URL to your VM's public IP and starts the stack.

systemctl is-active nginx php8.3-fpm mariadb

All three report active.

You can confirm the component versions and that the Concrete site answers on port 80:

php -v | head -1
mariadb --version
curl -s -o /dev/null -w 'HTTP %{http_code}\n' http://127.0.0.1/

The site home returns HTTP 200.

LAMP stack status for Concrete CMS on Ubuntu 24.04

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/concrete-cms-credentials.txt

The file contains the login (admin), the email (admin@cloudimg.local) and a unique password. Change the email and password from the dashboard after your first sign-in.

Per-VM Concrete CMS credentials file

Step 6 - Browse to your site

Browse to http://<vm-public-ip>/. The image ships with the Elemental sample theme and content so you can see a complete site immediately and start editing rather than facing a blank page.

Concrete CMS site home page

Step 7 - Sign in to the dashboard

Browse to http://<vm-public-ip>/index.php/login and sign in with admin and the password from the credentials file.

Concrete CMS sign-in page

After signing in you land on the Dashboard, the control centre for your site - pages and themes, files, members, reports and system settings.

Concrete CMS dashboard

Step 8 - Manage pages and edit in context

Open Dashboard -> Sitemap -> Full Sitemap to see your page tree. From here you can add, move, duplicate and delete pages.

Concrete CMS full sitemap

To edit a page in context, browse to the page while signed in and choose Edit from the toolbar. You can then click any area to add blocks (content, images, forms, navigation and more) and drag them into place. Click Publish when you are finished.

Step 9 - The dedicated data disk

The MariaDB database and the Concrete application files (uploads, generated configuration, packages and updates) live on a dedicated Azure data disk mounted at /var/lib/concrete, separate from the OS disk. This keeps your content independent of the OS image and lets you resize the disk as your site grows.

df -h /var/lib/concrete
findmnt /var/lib/concrete

Concrete CMS data disk mounted at /var/lib/concrete

Step 10 - Enabling HTTPS

For any public deployment, front Concrete 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.
  • After issuance, set the Concrete canonical URL to your HTTPS address in Dashboard -> System & Settings -> SEO & Statistics -> URLs and Redirection so generated links use https://.

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

Step 11 - Maintenance

  • Updates: the OS continues to receive unattended security updates. Concrete CMS itself can be updated from Dashboard -> System & Settings -> Update Concrete.
  • Backups: back up the MariaDB concrete database (for example with mysqldump) and the /var/lib/concrete/concrete-files directory, which together hold all of your content and uploads.
  • Logs: application and web server logs are under /var/log/nginx/ and within the Concrete dashboard under Reports -> Logs.

Support

This image is maintained by cloudimg with 24/7 support. Concrete CMS is a trademark of its respective owners; cloudimg is not affiliated with or endorsed by the Concrete CMS project. For help with the image, contact support@cloudimg.co.uk.