
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
sudoaccess - 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
systemdservice 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
Enterto accept the defaultManagementRealm - 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
--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)
- Go to Deployments → Add → Upload Deployment
- Select your
.warfile - 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 -Xmx512mto values appropriate for your server RAM (e.g.,-Xms512m -Xmx2048mfor 4 GB RAM) - Enable HTTPS: Generate or import an SSL/TLS certificate into WildFly’s keystore and configure the
https-listenerinstandalone.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-handlerin the logging subsystem to prevent log files from consuming disk space