Deployment guide

Zenario

Overview

Zenario is a mature open source content management system for building and running websites, including sites that serve content in many languages. It offers 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 SecureAnyCloud 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). The entire installation is driven at build time, so there is no web setup wizard for you to complete. A starter site and skin mean that a fresh VM serves a real, rendered site immediately.

The MySQL database and Zenario's file stores live on a dedicated Azure data disk. On the first boot of every VM, the image rotates the database password and the administrator account. The image is backed by 24/7 SecureAnyCloud support.

What you get:

  • Zenario 10.4 served on port 80 by nginx through 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/zenario for 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.service and mysql.service as systemd units, enabled and active
  • 24/7 SecureAnyCloud support

Prerequisites

You need 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.

In the network security group (NSG), allow inbound 22/tcp from your management network and 80/tcp for the Zenario web interface. For public exposure, front the site with TLS (see Step 11).

Step 1 - Deploy from the Azure Marketplace

Sign in to the Azure Portal, choose Create a resource, search the Marketplace for Zenario by SecureAnyCloud, 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 choose Review + create, followed by Create.

Step 2 - Deploy with the Azure CLI

# Accept the Marketplace terms once per subscription (required before the first CLI deploy)
az vm image terms accept --urn sac1647283583153:zenario-ubuntu-24-04:default:latest
az vm create \
  --resource-group <your-rg> --name zenario \
  --image sac1647283583153:zenario-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 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 that 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 the credentials file 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, and the values are unique to this VM. Zenario's own verifier rejects blank or weak passwords.

After your first sign-in, change the email address and password from the Organizer.

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. You can start editing at once, with no blank page and no 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 you sign in, you land on the Organizer, the "under-the-hood" control centre for your site. It covers 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.

Manage the menu structure under Menu navigation, images and downloads under Library, and page layouts (including the Gridmaker grid and CSS) under Layouts. Install and configure additional functionality through the module system under Configuration.

Step 9 - Security: no re-runnable installer

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. HTTP requests for zenario_siteconfig.php (which holds the database credential) and for the private file store are denied:

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. Check the mount:

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 these steps on your VM, using your own domain name and contact email:

  • Install Certbot: sudo apt-get update && sudo apt-get install -y certbot python3-certbot-nginx
  • Obtain and install a certificate for your domain by running certbot with the nginx plugin for your-domain.example.com. Supply your contact email when prompted.
  • Zenario derives its base URL from the request, so it switches generated links to https:// automatically once TLS is terminated in front of it. No configuration change is required.

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

Step 12 - Maintenance

  • Updates: the OS continues to receive unattended security updates. To update Zenario itself, follow the upstream upgrade guide at zenar.io.
  • Backups: back up the MySQL zenario database (for example with mysqldump) and the /var/lib/zenario/public and /var/lib/zenario/private directories. Together they hold your content and uploaded media.
  • Logs: web server logs are under /var/log/nginx/, and PHP-FPM logs are in /var/log/php8.3-fpm.log.

Support

SecureAnyCloud maintains this image and backs it with 24/7 support. If you need help deploying or operating Zenario on Azure, contact the SecureAnyCloud team through the SecureAnyCloud website.

Deploy on Azure

Launch Zenario 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