WildFly 39
Overview
This guide covers deploying WildFly 39 on Ubuntu 24.04 on Azure. WildFly is the upstream open-source Jakarta EE application server, the engine behind Red Hat's commercial JBoss EAP. Version 39 implements Jakarta EE 11 and runs on OpenJDK 21.
The image installs WildFly 39.0.1.Final from the official GitHub release tarball. At first boot, wildfly-firstboot.service generates a per-VM admin password and registers it in ManagementRealm via add-user.sh. It then starts WildFly with standalone-full.xml (web, EJB, JMS, JPA and WS subsystems) and writes the password to /stage/scripts/wildfly-credentials.log (mode 0600, root only).
What you get:
- WildFly 39.0.1.Final from the official GitHub release tarball
- OpenJDK 21 JRE headless
wildfly.servicesystemd unit running aswildfly:wildfly, bound to0.0.0.0for both HTTP (8080) and management (9990)wildfly-firstboot.servicerotating the admin passwordstandalone-full.xmlprofile active (web, EJB, JMS, JPA and WS)- HTTP application listener on TCP 8080, and Management Console and HTTP API on TCP 9990
JBOSS_HOME=/opt/wildfly(not/mnt)CATALINA_OPTS-equivalent JVM tuning through the systemd Environment block (default heap 512M-1024M)- Ubuntu 24.04 LTS base, patched at build time
- Azure Linux Agent for cloud integration
- 24/7 SecureAnyCloud support, 24h response SLA
Prerequisites
- An active Azure subscription, an SSH key, and a VNet with a subnet
- A subscription to the WildFly 39 Marketplace listing
- Recommended VM:
Standard_B2s(2 vCPU, 4 GB RAM) for development and testing, orStandard_D4s_v5(4 vCPU, 16 GB RAM) for production with-Xms2g -Xmx4g
Deploy from the Azure Portal
Search for WildFly 39 in the Azure Marketplace, select the SecureAnyCloud listing, and choose Create. In the network security group, allow TCP 22, 8080 and 9990 from your client networks only.
Do not expose the VM to the public internet without a TLS reverse proxy.
Deploy from the Azure CLI
RG="wildfly-prod"; LOCATION="eastus"; VM_NAME="wildfly-01" IMAGE_URN="sac1647283583153:wildfly-39-ubuntu-24-04:default:latest" SSH_KEY="$(cat ~/.ssh/id_rsa.pub)" az group create --name "$RG" --location "$LOCATION" az network vnet create -g "$RG" --name wf-vnet --address-prefix 10.101.0.0/16 --subnet-name wf-subnet --subnet-prefix 10.101.1.0/24 az network nsg create -g "$RG" --name wf-nsg az network nsg rule create -g "$RG" --nsg-name wf-nsg --name allow-ssh --priority 100 \
--source-address-prefixes "<your-mgmt-cidr>" --destination-port-ranges 22 --access Allow --protocol Tcp az network nsg rule create -g "$RG" --nsg-name wf-nsg --name allow-http --priority 110 \
--source-address-prefixes 10.101.0.0/16 --destination-port-ranges 8080 --access Allow --protocol Tcp az network nsg rule create -g "$RG" --nsg-name wf-nsg --name allow-mgmt --priority 120 \
--source-address-prefixes 10.101.0.0/16 --destination-port-ranges 9990 --access Allow --protocol Tcp
# Accept the Marketplace terms once per subscription (required before the first CLI deploy)
az vm image terms accept --urn sac1647283583153:wildfly-39-ubuntu-24-04:default:latest
az vm create -g "$RG" --name "$VM_NAME" --image "$IMAGE_URN" \
--size Standard_B2s --storage-sku StandardSSD_LRS \
--admin-username azureuser --ssh-key-values "$SSH_KEY" \
--vnet-name wf-vnet --subnet wf-subnet --nsg wf-nsg --public-ip-sku StandardConnect via SSH
ssh azureuser@<vm-ip>Both wildfly.service and wildfly-firstboot.service start automatically.
Verify the WildFly Service
sudo systemctl status wildfly.service --no-pager sudo test -f /var/lib/sac/data/wildfly-firstboot.done && echo FIRSTBOOT_DONE
sudo ss -tln | grep -E ':(8080|9990)'Retrieve the Admin Password
sudo cat /stage/scripts/wildfly-credentials.logWILDFLY_ADMIN_USER=admin WILDFLY_ADMIN_PASSWORD=<WILDFLY_ADMIN_PASSWORD> HTTP_PORT=8080 MGMT_PORT=9990 JBOSS_HOME=/opt/wildflyUse the Management API
PASS=$(sudo grep '^WILDFLY_ADMIN_PASSWORD=' /stage/scripts/wildfly-credentials.log | cut -d= -f2-)
# whoami curl --digest -u "admin:${PASS}" -H 'Content-Type: application/json' \
-d '{"operation":"whoami","address":[]}' \
http://localhost:9990/management
# product-version curl --digest -u "admin:${PASS}" -H 'Content-Type: application/json' \
-d '{"operation":"read-attribute","name":"product-version","address":[]}' \
http://localhost:9990/managementOpen the WildFly Welcome Page
open http://<vm-ip>:8080/Open the Management Console
Browse to http://<vm-ip>:9990/console/. The console uses HTTP digest authentication. Sign in as admin with the password from /stage/scripts/wildfly-credentials.log.
The console shows Configuration, Runtime, Deployments, Patching and Access Control. The Runtime view shows JVM threads, memory and per-subsystem state.
Deploy Your First WAR
Copy a .war file into /opt/wildfly/standalone/deployments/. WildFly deploys it automatically with no restart. Or upload it through the management API:
PASS=$(sudo grep '^WILDFLY_ADMIN_PASSWORD=' /stage/scripts/wildfly-credentials.log | cut -d= -f2-)
curl --digest -u "admin:${PASS}" -F "file=@myapp.war" \
http://localhost:9990/management-uploadServer Components
- JBOSS_HOME: /opt/wildfly
- standalone.sh: /opt/wildfly/bin/standalone.sh
- Active config: /opt/wildfly/standalone/configuration/standalone-full.xml
- Management user file: /opt/wildfly/standalone/configuration/mgmt-users.properties
- Deployments: /opt/wildfly/standalone/deployments/
- Logs: /opt/wildfly/standalone/log/server.log
- Systemd unit: /etc/systemd/system/wildfly.service
- First-boot script: /usr/local/sbin/wildfly-firstboot.sh
- Credentials: /stage/scripts/wildfly-credentials.log (mode 0600)
- First-boot sentinel: /var/lib/sac/data/wildfly-firstboot.done
To print the installed version, run:
/opt/wildfly/bin/standalone.sh --versionManaging the WildFly Service
sudo systemctl status wildfly.service --no-pager sudo systemctl restart wildfly.service
sudo tail -f /opt/wildfly/standalone/log/server.logSecurity Recommendations
- Rotate the admin password with
sudo /opt/wildfly/bin/add-user.sh -u admin -p '<new>' -s - Restrict the network security group so that ports 8080 and 9990 are reachable only from trusted networks
- Front WildFly with a TLS reverse proxy in production
- Tighten interface bindings in
standalone-full.xmlif you do not need HTTP from outside the VNet - Patch the OS monthly with
apt-get update && apt-get upgrade && reboot
Support and Licensing
WildFly is licensed under the Apache License 2.0, with no per-CPU or per-deployment fees. SecureAnyCloud provides commercial support separately.
- Email: sales@secureanycloud.com
- Website: secureanycloud.com
- Support hours: 24/7, 24h response SLA
Deploy on Azure
Launch WildFly 39 on Ubuntu 24.04 with 24/7 support from SecureAnyCloud.
View on Marketplace
Need Help?
Our support team is available 24/7. sales@secureanycloud.com
Deploy on Azure
Launch WildFly 39 on Ubuntu 24.04 LTS on Azure with 24/7 support from SecureAnyCloud.
View on Marketplace
Need Help?
Our support team is available 24/7.
sales@secureanycloud.com