L6
Application Servers Azure

Lucee 6.2 on Ubuntu 24.04 on Azure User Guide

| Product: Lucee 6.2 on Ubuntu 24.04 LTS on Azure

Overview

Lucee is the leading open source CFML (ColdFusion Markup Language) application server. It runs .cfm and .cfc applications on the Java Virtual Machine and is a lightweight, permissively licensed engine for CFML workloads. The cloudimg image installs Lucee 6.2.7.16 as an exploded web application on Apache Tomcat 9.0.120 and the system OpenJDK 21, runs it as a systemd service bound to loopback behind an nginx reverse proxy on port 80, ships a demo page that renders live CFML on first boot, and generates a unique Server Administrator password on the first boot of every VM. Backed by 24/7 cloudimg support.

What is included:

  • Lucee 6.2.7.16 (CFML engine) deployed as the ROOT web application on Apache Tomcat 9.0.120
  • The system OpenJDK 21 JRE (apt managed, so it keeps receiving security updates)
  • nginx on :80 as a reverse proxy to the loopback Tomcat connector on 127.0.0.1:8080, with an unauthenticated /healthz endpoint for load balancer probes
  • A demo index.cfm landing page that renders the Lucee version, runtime information and a CFML loop
  • The Lucee Server Administrator at /lucee/admin/server.cfm and Web Administrator at /lucee/admin/web.cfm
  • A per-VM Server Administrator password generated on first boot and recorded in a root-only file
  • lucee.service + nginx.service as 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 reasonable starting point; size up for heavier CFML workloads. NSG inbound: allow 22/tcp from your management network and 80/tcp. Lucee serves plain HTTP on port 80; for production, terminate TLS in front of it with your own domain.

Step 1 - Deploy from the Azure Marketplace

Sign in to the Azure Portal, choose Create a resource, search the Marketplace for Lucee 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). Then Review + create and Create.

Step 2 - Deploy from the Azure CLI

az vm create \
  --resource-group <your-rg> \
  --name lucee \
  --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 lucee --port 80 --priority 1010

Step 3 - Connect to your VM

ssh azureuser@<vm-public-ip>

Step 4 - Confirm the services are running

systemctl is-active lucee.service nginx.service

Both report active. Lucee runs inside Tomcat, whose HTTP connector listens only on the loopback address 127.0.0.1:8080; nginx fronts it on port 80.

lucee.service and nginx.service reported active on the Lucee appliance

Step 5 - Retrieve your Server Administrator password

The Lucee Server Administrator password is generated uniquely on the first boot of your VM and written to a root-only file:

sudo cat /root/lucee-credentials.txt

This file contains LUCEE_ADMIN_USERNAME (admin) and LUCEE_ADMIN_PASSWORD, along with the Server Administrator, Web Administrator and demo page URLs. Store the password somewhere safe. The Java runtime, the deployed Lucee ROOT web application and the credentials file are shown below.

Java 21 runtime, the deployed Lucee ROOT web application and the per-VM credentials file

Step 6 - Confirm the demo page and health endpoint

nginx serves an unauthenticated health endpoint for load balancers and probes, and the demo page renders live CFML:

curl -s http://localhost/healthz
curl -s http://localhost/ | grep -i "Lucee is running"

healthz returns OK, and the demo page returns rendered HTML confirming Lucee is executing CFML (the Lucee version and a computed loop are rendered server side, not returned as source).

The demo page rendering executed CFML and the nginx health endpoint returning OK

Step 7 - Open the demo page in a browser

Browse to http://<vm-public-ip>/. The demo page renders the Lucee version, the Java and servlet container versions, the operating system, the server time, and a CFML loop that computes squares - proof that the CFML engine is executing code, not serving source.

The Lucee demo page showing the version, runtime information and a rendered CFML loop

Step 8 - Sign in to the Lucee Server Administrator

Browse to http://<vm-public-ip>/lucee/admin/server.cfm. The Server Administrator has no username field - sign in with the password from Step 5. There is no default password: the administrator is provisioned with a unique secret on the first boot of your VM.

The Lucee Server Administrator login page

After signing in, the Overview page shows the Lucee version, the operating mode, available updates and system metrics. From the left navigation you can configure performance and caching, language and compiler settings, security, datasources, ORM, mail, scheduled tasks, mappings and more.

The Lucee Server Administrator Overview page after signing in

Step 9 - Configure a datasource

Under Services -> Datasource you can register a database connection that your CFML applications reference by name with cfquery and queryExecute. Give the datasource a name, choose its type, provide the connection details and select create.

The Server Administrator Datasource configuration page

The Web Administrator at http://<vm-public-ip>/lucee/admin/web.cfm configures the same categories of settings scoped to an individual web context; in the single mode this image ships, the Server Administrator manages all contexts.

Step 10 - Deploy your own CFML application

The Lucee ROOT web application is served from /var/lib/lucee/webapps/ROOT. Drop your .cfm and .cfc files there and Lucee compiles and serves them immediately:

sudo install -o lucee -g lucee -m 0644 /dev/stdin /var/lib/lucee/webapps/ROOT/hello.cfm <<'CFM'
<cfoutput>Hello from CFML at #dateTimeFormat(now(), "yyyy-mm-dd HH:nn:ss")#</cfoutput>
CFM
curl -s http://localhost/hello.cfm

The response is the rendered output of your page. For a larger application, place its directory under /var/lib/lucee/webapps/ROOT/ or configure a mapping in the Server Administrator under Archives & Resources -> Mappings.

Step 11 - Maintenance

The system OpenJDK 21 receives security updates through Ubuntu's unattended upgrades. To apply the latest OS updates manually:

sudo apt-get update && sudo apt-get -y upgrade

Restart Lucee after configuration changes that require it:

sudo systemctl restart lucee.service

Lucee serves plain HTTP on port 80. For production, front it with TLS using your own domain and a reverse proxy or a certificate manager such as certbot before exposing it to the internet.

Support

This image is maintained by cloudimg with 24/7 support. For help with the image, the deployment or the Lucee Server Administrator, contact cloudimg support.