Deployment guide

Lucee 6.2

Overview

Lucee is a 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 SecureAnyCloud image installs Lucee 6.2.7.16 as an exploded web application on Apache Tomcat 9.0.120 and the system OpenJDK 21. It runs as a systemd service bound to loopback behind an nginx reverse proxy on port 80. The image ships a demo page that renders live CFML on first boot, and it generates a unique Server Administrator password on the first boot of every VM.

What you get:

  • Lucee 6.2.7.16 (CFML engine) deployed as the ROOT web application on Apache Tomcat 9.0.120
  • The system OpenJDK 21 JRE (managed by apt, 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 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 reasonable starting point. Choose a larger size for heavier CFML workloads.

Configure the NSG inbound rules to allow 22/tcp from your management network and 80/tcp. Lucee serves plain HTTP on port 80, so 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 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).

Select Review + create, then 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:lucee-ubuntu-24-04:default:latest
az vm create \
  --resource-group <your-rg> \
  --name lucee \
  --image sac1647283583153:lucee-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 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 services 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.

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 output below also shows the Java runtime, the deployed Lucee ROOT web application and the credentials file.

Step 6 - Confirm the demo page and health endpoint

nginx serves an unauthenticated health endpoint for load balancers and probes. 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. This confirms that Lucee is executing CFML: the Lucee version and a computed loop are rendered server-side and not returned as source.

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. The loop shows that the CFML engine is executing code and not serving source.

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, so 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.

After you sign 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.

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 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 that 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. Copy 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 the unattended upgrades of Ubuntu. To apply the latest OS updates manually, run:

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

Restart Lucee after any configuration change that requires it:

sudo systemctl restart lucee.service

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

Support

SecureAnyCloud maintains this image and provides 24/7 support. For help with the image, the deployment or the Lucee Server Administrator, contact SecureAnyCloud support.

Deploy on Azure

Launch Lucee 6.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