Zenario on Ubuntu 24.04 on Azure User Guide
Overview
Zenario is a mature open-source content management system for building and running websites, including sites that serve content in many languages: page and layout management, a central image and document library, an "Organizer" admin back-end, and a module ecosystem, all on the classic LAMP stack. The cloudimg image installs Zenario 10.4 on a full LAMP stack from the Ubuntu 24.04 repositories (nginx, PHP 8.3-FPM and MySQL 8.0), drives the entire installation at build time so there is no web setup wizard for you to complete, ships a starter site and skin so a fresh VM serves a real rendered site immediately, stores the MySQL database and Zenario's file stores 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:
- Zenario 10.4 served on port 80 by nginx via the PHP 8.3-FPM FastCGI socket
- A starter site and skin so the front end renders immediately
- MySQL 8.0 on loopback with its data directory on a dedicated Azure data disk
- A dedicated Azure data disk at
/var/lib/zenariofor the database, uploaded media and document store - A per-VM database password and a unique administrator account generated on first boot
nginx.service,php8.3-fpm.serviceandmysql.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. NSG inbound: allow 22/tcp from your management network and 80/tcp for the Zenario 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 Zenario 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 with the Azure CLI
az vm create \
--resource-group <your-rg> --name zenario \
--image <cloudimg-zenario-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 zenario --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 Zenario rotates its database password, resets the administrator account to a fresh per-VM password, clears the cache and starts the stack. Confirm the three services are active and note the component versions and exposed ports - MySQL listens on loopback only, and PHP-FPM is on a unix socket rather than a TCP port:
systemctl is-active nginx php8.3-fpm mysql
php -v | head -1
mysql --version
curl -s -o /dev/null -w 'HTTP %{http_code}\n' http://127.0.0.1/
All three services report active and 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/zenario-credentials.txt
The file contains the login (admin), the admin console URL and a unique password, plus the database name, user and password. The file is 0600 and owned by root, the values are unique to this VM, and blank or weak passwords are rejected by Zenario's own verifier. Change the email and password from the Organizer after your first sign-in.

Step 6 - Browse to your site
Browse to http://<vm-public-ip>/. The image ships with a starter site and skin, so you see a complete, rendered site immediately and can start editing rather than facing a blank page or a setup wizard.

Step 7 - Sign in to the Organizer admin console
Browse to http://<vm-public-ip>/admin.php and sign in with admin and the password from the credentials file.

After signing in you land on the Organizer, the "under-the-hood" control centre for your site - content and pages, menu navigation, the image and document library, layouts, users and contacts, and site configuration.

Step 8 - Manage content, pages and layouts
Open the Content panel in the Organizer to see your pages. From here you can create, edit, move and publish pages, and edit page content in the built-in editor.

Menu structure is managed under Menu navigation, images and downloads under Library, and page layouts (including the Gridmaker grid and CSS) under Layouts. Additional functionality is installed and configured through the module system under Configuration.
Step 9 - Security: no re-runnable installer
Because the whole installation is completed at build time, once the database has tables Zenario serves the administrator login at /admin.php and never the installer wizard. The build-time installer helper is deleted, and zenario_siteconfig.php (which holds the database credential) is denied over HTTP, as is the private file store:
curl -s -o /dev/null -w '/admin.php HTTP %{http_code}\n' http://127.0.0.1/admin.php
curl -s -o /dev/null -w '/zenario_siteconfig.php HTTP %{http_code}\n' http://127.0.0.1/zenario_siteconfig.php
/admin.php returns HTTP 200 (the login screen) and /zenario_siteconfig.php returns HTTP 403.

Step 10 - The dedicated data disk
The MySQL database and Zenario's file stores (the public and private file trees, plus the document store) live on a dedicated Azure data disk mounted at /var/lib/zenario, 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/zenario
findmnt /var/lib/zenario

Step 11 - Enabling HTTPS
For any public deployment, front Zenario 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. - Zenario derives its base URL from the request, so it automatically switches generated links to
https://once TLS is terminated in front of it. No configuration change is required.
Certbot installs a renewal timer automatically; certificates renew without further action.
Step 12 - Maintenance
- Updates: the OS continues to receive unattended security updates. Zenario itself can be updated by following the upstream upgrade guide at zenar.io.
- Backups: back up the MySQL
zenariodatabase (for example withmysqldump) and the/var/lib/zenario/publicand/var/lib/zenario/privatedirectories, which together hold your content and uploaded media. - Logs: web server logs are under
/var/log/nginx/; PHP-FPM logs are under/var/log/php8.3-fpm.log.
Support
This image is maintained by cloudimg and backed by 24/7 support. If you need help deploying or operating Zenario on Azure, contact the cloudimg team through the cloudimg website.