DevLearningTools

2026-09-24

How to Deploy Lucee (ColdFusion) on Oracle Cloud, Free Forever

Unlike AWS's 12-month free trial, Oracle Cloud's Always Free tier genuinely never expires. A real step-by-step setup for Lucee on an Ampere A1 ARM instance, including the ARM-specific installer and a dual-firewall gotcha unique to Oracle.

Deploying Lucee on Oracle Cloud Always Free — a genuinely permanent free ARM instance, unlike AWS's 12-month trial

Genuinely free, not a 12-month trial

AWS's free tier (covered in an earlier post) expires after 12 months, after which normal billing kicks in. Oracle Cloud's Always Free resources are different: Oracle's own documentation states they're available for the lifetime of the account, not a trial period, as long as usage stays within the Always Free limits.

The catch is that Oracle's free compute is ARM-based (Ampere A1), not the x86_64 architecture most guides assume, which means a couple of genuinely different steps compared to a typical AWS or DigitalOcean setup: the right Lucee installer variant, and a firewall quirk that trips up a lot of people the first time.

Prerequisites

  • An Oracle Cloud account (a credit card is required for identity verification at signup, but isn't charged unless you explicitly upgrade to paid resources)
  • An SSH key pair, or let Oracle generate one for you during instance creation
  • Comfort running commands over SSH
  • A domain name, if you want real HTTPS at the end (optional)

Step by Step

01

1. Create an Always Free Ampere A1 instance

In the Oracle Cloud Console, go to Compute > Instances > Create Instance. Choose the Ampere A1 Flex shape and make sure it's marked as Always Free-eligible, up to 2 OCPUs and 12 GB RAM total are free across all your A1 instances combined (one 2-OCPU/12GB instance, or two smaller ones). Pick a Canonical Ubuntu 22.04 or 24.04 aarch64 image, generate or upload an SSH key pair, and launch it.

02

1a. If you hit "Out of host capacity"

This is a well-known, commonly reported issue specifically with the free Ampere A1 shape, Oracle's free ARM capacity in a given region/availability domain can genuinely run out. Trying a different availability domain, or simply retrying later, is the standard workaround.

03

2. Connect over SSH

Oracle's Ubuntu images use the ubuntu user by default, same as AWS.

chmod 400 your-key.pem
ssh -i your-key.pem ubuntu@YOUR_INSTANCE_PUBLIC_IP
04

3. Update the system and install Java

Same package, same command as any Ubuntu server, apt resolves the correct ARM64 build automatically.

sudo apt update && sudo apt upgrade -y
sudo apt install openjdk-21-jre-headless -y
java -version
05

4. Download the Lucee Linux ARM64 installer

This is the one genuinely different step: Ampere A1 is ARM, so it needs the aarch64 installer, not the x64 one used on a typical AWS/x86 instance. Using the wrong architecture's installer simply won't run.

wget https://cdn.lucee.org/lucee-7.1.0.204-linux-aarch64-installer.run
06

5. Make it executable and run the installer

Unattended mode again, same flags as any Linux installation of Lucee, the installer itself doesn't care that this is ARM once you've grabbed the right file.

chmod 744 lucee-7.1.0.204-linux-aarch64-installer.run
sudo ./lucee-7.1.0.204-linux-aarch64-installer.run \
  --mode unattended \
  --luceepass "ChooseARealPassword123" \
  --servicename lucee \
  --prefix /opt/lucee \
  --startatboot true
07

6. Verify the service is running

Same systemd service as any Linux Lucee install.

sudo systemctl status lucee_ctl
sudo systemctl enable lucee_ctl
08

7. Open port 80 — the real Oracle-specific gotcha

Oracle Cloud has two separate firewall layers, and both need to allow the traffic, or it never reaches Lucee at all. First, the Security List at the network level: in the Console, go to Networking > Virtual Cloud Networks > your VCN > the public subnet > Default Security List, and add an ingress rule for TCP port 80 (and 443) from source 0.0.0.0/0.

09

7a. Then the instance's own iptables

This is the step that catches almost everyone the first time: Oracle's Ubuntu images ship with iptables rules that drop everything except SSH by default, even after the Security List allows it. The Security List alone is not enough.

sudo iptables -I INPUT 6 -m state --state NEW -p tcp --dport 80 -j ACCEPT
sudo iptables -I INPUT 6 -m state --state NEW -p tcp --dport 443 -j ACCEPT
sudo netfilter-persistent save
10

8. Open the Lucee Administrator

Visit http://YOUR_INSTANCE_PUBLIC_IP/lucee/admin/server.cfm, log in with the password from step 5, and configure a datasource under Data Sources. As with any Lucee 7.1+ install, PDF generation, mail, images, charts, and spreadsheets each need their own extension installed from the Extensions page before use.

11

9. Add real HTTPS with Let's Encrypt

Identical to any other Apache-fronted Lucee install, this part doesn't care about the CPU architecture underneath it. Needs a real domain pointed at the instance's IP first.

sudo apt install certbot python3-certbot-apache -y
sudo certbot --apache -d yourdomain.com

Always Free Resource Limits Reference

ResourceAlways Free Limit
Ampere A1 compute2 OCPUs + 12 GB RAM total (1,500 OCPU-hours + 9,000 GB-hours/month)
Block storage200 GB total (boot + block volumes combined)
Outbound data transfer10 TB per month
AMD micro instancesUp to 2, 1/8 OCPU + 1 GB RAM each (a separate, smaller allowance)

Common Mistakes

Downloading the x64 installer on an Ampere A1 instance

Ampere A1 is ARM64 (aarch64), not x86_64. The x64 installer simply won't execute, grab the aarch64 build specifically.

Only configuring the Security List and assuming that's enough

Oracle's Ubuntu images also run iptables rules that drop non-SSH traffic by default. Both the Security List (network level) and iptables (instance level) need to explicitly allow the port, missing either one leaves the site unreachable.

Assuming Oracle's free tier works the same way as AWS's

AWS's free tier expires after 12 months. Oracle's Always Free resources are lifetime, as long as usage stays within the documented limits, a genuinely different value proposition, not just a longer trial.

Giving up immediately on "Out of host capacity"

This is a known, commonly reported limitation specific to the free Ampere A1 shape when a region's free capacity is temporarily exhausted. Trying a different availability domain or retrying later is the normal workaround, not a sign something is broken.

Frequently Asked Questions

Is this actually free forever, or is there a catch?

Genuinely free for the lifetime of the account, per Oracle's own documentation, as long as usage stays within the Always Free limits (2 OCPUs/12GB for Ampere A1, 200GB storage, 10TB/month transfer). Exceeding those limits on Always Free resources specifically doesn't auto-charge, but provisioning anything outside the Always Free catalog does require a paid upgrade.

Why does Lucee need a different installer here than on AWS?

Oracle's free compute shape is Ampere A1, an ARM64 (aarch64) processor, not the x86_64 architecture most cloud free tiers (including AWS's) default to. Lucee publishes a separate aarch64 installer specifically for this.

Why does port 80 stay unreachable even after opening it in the Security List?

Oracle's Ubuntu images have their own instance-level iptables rules blocking it too. Both layers, the Security List and iptables, need to explicitly allow the traffic.

← Back to Blog