Concrete CMS on Ubuntu 24.04 on Azure User Guide
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/concretefor 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.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_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.

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.

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.

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.

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

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.

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

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
concretedatabase (for example withmysqldump) and the/var/lib/concrete/concrete-filesdirectory, 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.