Roadiz on Ubuntu 24.04 on Azure User Guide
Overview
Roadiz is a modern, open-source content management system built on the Symfony framework and Doctrine ORM. Instead of a fixed page model it uses a polymorphic node system: you define your own content types and compose your site or app from typed, reusable nodes, then deliver that content however you like - as a headless API for JavaScript front ends and native apps, or through server-rendered themes. Editors work in Rozier, Roadiz's powerful back-office. The cloudimg image installs Roadiz 2.7.5 (the current v2 line, from the actively maintained roadiz/skeleton distribution) on a full stack from the Ubuntu 24.04 repositories (nginx, PHP 8.3-FPM, MySQL 8 and Redis), runs the entire install at build time so there is no web wizard, stores the MySQL database and uploaded documents on a dedicated Azure data disk, and rotates the database password, the application secret, the JWT signing keys and the administrator password on the first boot of every VM. Backed by 24/7 cloudimg support.
What is included:
- Roadiz 2.7.5 (v2, headless) served on port 80 by nginx via the PHP 8.3-FPM FastCGI socket
- MySQL 8 and Redis on loopback, with the MySQL data directory on a dedicated Azure data disk
- A dedicated Azure data disk at
/var/lib/roadizfor the MySQL database and uploaded documents - Per-VM database credentials, application secret, JWT keypair and a unique administrator password generated on first boot
- The Rozier back-office at
/rz-adminand the headless content API under/api nginx.service,php8.3-fpm.service,mysql.serviceandredis-server.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 for a small Roadiz site; step up to a B2ms/B4ms for busier workloads. NSG inbound: allow 22/tcp from your management network and 80/tcp for the Roadiz 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 Roadiz 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 roadiz \
--image <marketplace-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 roadiz --port 80 --priority 1010
Step 3 - Connect to your VM
ssh azureuser@<vm-public-ip>
Step 4 - Confirm the stack is running
On first boot Roadiz regenerates its database credentials, application secret and JWT keypair, rotates a unique administrator password and starts the stack.
systemctl is-active nginx php8.3-fpm mysql redis-server
All four report active.

You can confirm the component versions and that the site answers:
php -v | head -1
mysql --version
curl -s -o /dev/null -w 'HTTP %{http_code}\n' http://127.0.0.1/health
curl -s -o /dev/null -w 'HTTP %{http_code}\n' http://127.0.0.1/rz-admin/login
The health endpoint and the Rozier login page both return HTTP 200.
Step 5 - Retrieve the administrator password
The administrator password is unique to your VM and is generated on first boot. Read the credentials file as root:
sudo cat /root/roadiz-credentials.txt

The file contains the Rozier back-office URL, the API URL, the login (admin), the email (admin@cloudimg.local) and a unique password. Change the email and password from the back-office after your first sign-in.
Step 6 - Sign in to the Rozier back-office
Browse to http://<vm-public-ip>/rz-admin and sign in with the username admin and the password from the credentials file.

Step 7 - Explore the Rozier dashboard
After signing in you land on the Rozier dashboard. The left-hand menu gives you the node tree, node-types, tags, documents, users, settings and translations - everything you need to model and manage your content.

Step 8 - Manage your content nodes
Roadiz content lives in a tree of typed nodes. Open the node tree to browse, create, reorder and edit nodes; each node is an instance of a node-type you define, so your content model is entirely your own. The image ships with the default node-types and settings installed, so the back-office is populated and ready to build on.

Step 9 - Use the headless content API
Roadiz v2 is headless: your published content is available as a JSON API under /api, ready to power a decoupled front end. The API is documented and browsable, and JWT authentication (keys generated per VM) protects write access.
curl -s -o /dev/null -w 'HTTP %{http_code}\n' http://127.0.0.1/api

Data on the dedicated data disk
The MySQL data directory (/var/lib/roadiz/mysql) and Roadiz's uploaded documents (/var/lib/roadiz/files, surfaced at /var/www/roadiz/public/files) live on a dedicated Azure data disk mounted at /var/lib/roadiz. This keeps all of your content, media and database on a managed disk you can snapshot, resize and back up independently of the OS disk.
df -h /var/lib/roadiz | tail -1

Enabling HTTPS
For production, put Roadiz behind TLS. The simplest approach is a free Let's Encrypt certificate with Certbot once you have a DNS name pointing at the VM:
sudo snap install --classic certbot
sudo ln -sf /snap/bin/certbot /usr/bin/certbot
sudo certbot --nginx -d your-domain.example.com
Certbot edits the nginx site to serve HTTPS and sets up automatic renewal. After enabling TLS, reload PHP-FPM and nginx with sudo systemctl reload php8.3-fpm nginx.
Maintenance
Roadiz periodically ships new releases in the v2 line. To upgrade, follow the official Roadiz upgrade guide (update the constraints in /var/www/roadiz/composer.json, run sudo -u www-data composer update as appropriate, then sudo -u www-data php /var/www/roadiz/bin/console doctrine:migrations:migrate --no-interaction and sudo -u www-data php /var/www/roadiz/bin/console cache:clear). The OS continues to receive unattended security updates. The MySQL database and uploaded documents persist on the data disk across reboots and upgrades.
Support
This image is maintained by cloudimg with 24/7 support. Roadiz is open-source software licensed under the MIT License and is developed by REZO ZERO; cloudimg is not affiliated with or endorsed by the Roadiz project or REZO ZERO. For help with this image, contact support@cloudimg.co.uk.