Deployment guide

Roadiz

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, compose your site or app from typed, reusable nodes, and deliver the 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 back-office.

This SecureAnyCloud image installs Roadiz 2.7.5, the current v2 line from the actively maintained roadiz/skeleton distribution. It runs on a full stack from the Ubuntu 24.04 repositories: nginx, PHP 8.3-FPM, MySQL 8 and Redis. The entire install runs at build time, so there is no web wizard.

What you get:

  • Roadiz 2.7.5 (v2, headless) served on port 80 by nginx through 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/roadiz for the MySQL database and uploaded documents
  • A database password, application secret, JWT keypair and administrator password that are unique to each VM and rotated on first boot
  • The Rozier back-office at /rz-admin and the headless content API under /api
  • nginx.service, php8.3-fpm.service, mysql.service and redis-server.service as enabled, active systemd units
  • 24/7 SecureAnyCloud support

Prerequisites

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

Standard_B2s (2 vCPU / 4 GiB RAM) is a good starting size for a small Roadiz site. Step up to B2ms or B4ms for busier workloads.

Configure the network security group (NSG) to allow inbound 22/tcp from your management network and 80/tcp for the Roadiz web interface. For public exposure, put TLS in front of the site (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 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 from the Azure CLI

# Accept the Marketplace terms once per subscription (required before the first CLI deploy)
az vm image terms accept --urn sac1647283583153:roadiz-ubuntu-24-04:default:latest
az vm create \
  --resource-group <your-rg> \
  --name roadiz \
  --image sac1647283583153:roadiz-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 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 the administrator password to a unique value, and starts the stack. Check that all four services are active.

systemctl is-active nginx php8.3-fpm mysql redis-server

All four report active.

Then 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

Your VM generates a unique administrator password 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@sac.local) and the unique password.

After your first sign-in, change the email and password in the back-office.

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 you sign in, you land on the Rozier dashboard. The left-hand menu gives you the node tree, node-types, tags, documents, users, settings and translations. Together they cover 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 that 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 (with 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 your content, media and database on a managed disk that 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 from Certbot, once you have a DNS name that points 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 you enable 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. In outline, update the constraints in /var/www/roadiz/composer.json and run sudo -u www-data composer update as appropriate. Then run 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

SecureAnyCloud maintains this image with 24/7 support. For help, contact sales@secureanycloud.com.

Roadiz is open source software licensed under the MIT License and developed by REZO ZERO. SecureAnyCloud is not affiliated with or endorsed by the Roadiz project or REZO ZERO.

Deploy on Azure

Launch Roadiz 2 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