How to Install WildFly on Fedora

Install WildFly on Fedora

If you are a Java developer or system administrator working on enterprise applications, knowing how to install WildFly on Fedora Linux is an essential skill in 2026. WildFly — formerly known as JBoss Application Server — is one of the most powerful, lightweight, and production-ready open-source Jakarta EE application servers available today. Whether you are deploying a microservice, a RESTful API backend, or a full-stack Jakarta EE application, WildFly gives you the runtime environment, clustering capabilities, and web management console needed to do it right.

This guide is written for system administrators and developers with intermediate Linux experience. By following these steps precisely, you will have a fully operational WildFly 39 instance running as a systemd service on Fedora Linux — accessible via browser, secured with an admin account, and integrated with the system firewall.

What Is WildFly and Why Use It on Fedora?

WildFly is an open-source, modular Java application server developed and maintained by Red Hat. It fully implements the Jakarta EE 10 and MicroProfile specifications, making it ideal for enterprise Java workloads. As of February 2026, the latest stable version is WildFly 39.0.1.Final.

Fedora Linux is Red Hat’s upstream community distribution, which means WildFly and Fedora share the same engineering lineage. This makes Fedora the most natural Linux platform for running WildFly:

  • Both projects are sponsored by Red Hat, ensuring first-class compatibility
  • Fedora ships with modern dnf, systemd, firewalld, and SELinux out of the box
  • Fedora receives the latest Java OpenJDK packages faster than most other distributions
  • The Fedora package ecosystem provides all WildFly dependencies with minimal manual configuration

Prerequisites Before You Begin

Before installing WildFly, ensure your system is ready. Skipping these checks is the most common source of failed installations.

System Requirements

  • Fedora Linux 40, 41, or 42 (fully updated)
  • Minimum 2 GB RAM (4 GB recommended for production workloads)
  • At least 1 GB of free disk space under /opt
  • Root or sudo access
  • Active internet connection
  • Ports 8080 (HTTP) and 9990 (Management Console) must not be in use

Knowledge Prerequisites

  • Basic familiarity with Linux terminal commands
  • Understanding of systemd service management
  • Basic knowledge of Java JDK environments

Start by updating all system packages to their latest versions:

sudo dnf update -y && sudo dnf upgrade -y

Step 1: Install Java OpenJDK

WildFly 39 requires Java SE 11 or later to run. Fedora makes this straightforward with dnf.

sudo dnf install java-11-openjdk-devel -y

Verify the installation was successful:

java --version

Set the JAVA_HOME environment variable so WildFly can detect the JDK:

echo 'export JAVA_HOME=/usr/lib/jvm/java-11-openjdk' >> ~/.bashrc
echo 'export PATH=$PATH:$JAVA_HOME/bin' >> ~/.bashrc
source ~/.bashrc
echo $JAVA_HOME

Pro Tip: If you have multiple Java versions installed, use sudo alternatives --config java to switch between them without modifying environment variables manually.

Step 2: Download WildFly

Always download WildFly from the official source at wildfly.org/downloads, which lists all stable and preview releases alongside SHA1 checksums for integrity verification.

wget https://github.com/wildfly/wildfly/releases/download/39.0.1.Final/wildfly-39.0.1.Final.zip

Verify the checksum before proceeding (compare with the hash listed on the official downloads page):

sha1sum wildfly-39.0.1.Final.zip

Extract and move to /opt:

unzip wildfly-39.0.1.Final.zip
sudo mv wildfly-39.0.1.Final /opt/wildfly

The /opt directory is the Linux Filesystem Hierarchy Standard location for optional software packages. Placing WildFly here keeps your system organized and separates it from system-managed packages in /usr.

Step 3: Create a Dedicated WildFly System User

Running WildFly as root is a major security vulnerability. Always create a dedicated, no-login system user and group for the WildFly process. This limits the blast radius if the service is ever compromised.

sudo groupadd --system wildfly
sudo useradd -s /sbin/nologin --system -d /opt/wildfly -g wildfly wildfly
sudo chown -R wildfly:wildfly /opt/wildfly
ls -la /opt/ | grep wildfly

Step 4: Configure WildFly Environment

WildFly ships with pre-built systemd configuration scripts inside docs/contrib/scripts/systemd/. You must copy these to the correct system locations.

sudo mkdir -p /etc/wildfly
sudo mkdir -p /var/run/wildfly
sudo cp /opt/wildfly/docs/contrib/scripts/systemd/wildfly.conf /etc/wildfly/
sudo cp /opt/wildfly/docs/contrib/scripts/systemd/wildfly.service /etc/systemd/system/
sudo cp /opt/wildfly/docs/contrib/scripts/systemd/launch.sh /opt/wildfly/bin/
sudo chmod +x /opt/wildfly/bin/launch.sh
sudo chown -R wildfly:wildfly /var/run/wildfly

Review the default /etc/wildfly/wildfly.conf to confirm these default values:

WILDFLY_CONFIG=standalone.xml
WILDFLY_MODE=standalone
WILDFLY_BIND=0.0.0.0

These settings launch WildFly in standalone mode using standalone.xml as the configuration file, bound to all network interfaces. For a development environment this is acceptable. For production, restrict WILDFLY_BIND to a specific IP address.

Step 5: Enable WildFly as a Systemd Service

Registering WildFly as a systemd service ensures it starts automatically on boot and can be managed with standard Linux service commands.

sudo systemctl daemon-reload
sudo systemctl start wildfly
sudo systemctl enable wildfly
sudo systemctl status wildfly

Expected output should show Active: active (running). Confirm WildFly is listening on port 8080:

ss -tunelp | grep 8080

View real-time logs for troubleshooting:

sudo journalctl -u wildfly -f

Step 6: Create an Admin Management User

WildFly 39 ships with management authentication enabled by default. You cannot access the web console until you manually create an admin user. This is a deliberate security decision — there is no default username or password.

sudo /opt/wildfly/bin/add-user.sh

Follow these prompts carefully:

  • Type of user: Select a → Management User
  • Username: Enter your chosen admin username (e.g., wfadmin)
  • Password: Minimum 8 characters — must include uppercase, lowercase, numbers, and at least one special character
  • Realm: Press Enter to accept the default ManagementRealm
  • AS process communication? → Answer no

No service restart is required. WildFly’s management subsystem reads the properties file at runtime and picks up changes automatically.

Step 7: Configure Firewall Rules

Fedora uses firewalld as its default firewall manager. Without opening the required ports, you will not be able to access WildFly from another machine on your network.

sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --permanent --add-port=9990/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --list-ports

Expected output: 8080/tcp 9990/tcp

⚠️ Security Warning: In a production environment, restrict management port 9990 to trusted IP addresses only using --add-rich-rule with a source IP filter. Exposing the management console to the open internet is a serious security risk.

Step 8: Enable Remote Management Access

By default, WildFly binds its management interface only to 127.0.0.1, meaning you can only access the admin console from the same machine. To allow remote access, update the standalone configuration file.

sudo nano /opt/wildfly/standalone/configuration/standalone.xml

Find the <interfaces> block and update both addresses:

<interfaces>
    <interface name="management">
        <inet-address value="${jboss.bind.address.management:0.0.0.0}"/>
    </interface>
    <interface name="public">
        <inet-address value="${jboss.bind.address:0.0.0.0}"/>
    </interface>
</interfaces>

sudo systemctl restart wildfly

Step 9: Access WildFly — Welcome Page & Admin Console

Your WildFly server is now fully installed and running. Open a web browser on any machine in your network:

  • Welcome Page: http://your-server-ip:8080 — You should see the WildFly 39 Welcome Screen
  • Admin Console: http://your-server-ip:9990 — Enter the admin credentials created in Step 6

From the Management Dashboard you can deploy applications, monitor runtime threads, heap usage, datasource connections, configure subsystems such as logging, security, messaging, and clustering, manage JVM settings, and manage socket bindings.

Deploying Your First Application

With WildFly running, you can deploy a Java application using three methods:

Method 1 — Admin Console (Recommended for Beginners)

  1. Go to Deployments → Add → Upload Deployment
  2. Select your .war file
  3. Click Finish

Method 2 — WildFly CLI (Recommended for Scripts)

sudo /opt/wildfly/bin/jboss-cli.sh --connect
deploy /path/to/your/application.war

Method 3 — Hot Deployment (Drop Folder)

sudo cp your-app.war /opt/wildfly/standalone/deployments/

WildFly monitors this folder and automatically deploys any valid archive dropped there.

Troubleshooting Common Issues

Problem Root Cause Fix
Service fails to start Missing /var/run/wildfly directory sudo mkdir -p /var/run/wildfly && sudo chown wildfly:wildfly /var/run/wildfly
Cannot access port 8080 Firewall blocking traffic sudo firewall-cmd --permanent --add-port=8080/tcp && sudo firewall-cmd --reload
Admin console inaccessible remotely Interface bound to 127.0.0.1 Update standalone.xml interface binding to 0.0.0.0
Permission denied on startup Wrong file ownership sudo chown -R wildfly:wildfly /opt/wildfly
OutOfMemoryError in logs Default JVM heap too small Edit JAVA_OPTS in /opt/wildfly/bin/standalone.conf to increase -Xmx
Admin login fails No user created or wrong realm Re-run sudo /opt/wildfly/bin/add-user.sh

Always check the application server log first:

tail -f /opt/wildfly/standalone/log/server.log

Performance Tuning After Installation

After a clean installation, consider these performance enhancements for production deployments:

  • Increase JVM heap: Edit /opt/wildfly/bin/standalone.conf, change -Xms64m -Xmx512m to values appropriate for your server RAM (e.g., -Xms512m -Xmx2048m for 4 GB RAM)
  • Enable HTTPS: Generate or import an SSL/TLS certificate into WildFly’s keystore and configure the https-listener in standalone.xml
  • Set up a reverse proxy: Place NGINX or Apache HTTP Server in front of WildFly on port 80/443 for SSL termination and load balancing
  • Enable datasource connection pooling: Configure a JDBC datasource via the admin console for production database connections
  • Implement log rotation: Configure the periodic-rotating-file-handler in the logging subsystem to prevent log files from consuming disk space

Marshall Anthony is a professional Linux DevOps writer with a passion for technology and innovation. With over 8 years of experience in the industry, he has become a go-to expert for anyone looking to learn more about Linux.

Related Posts