This guide provides a full Ansible playbook to deploy WildFly with a dedicated service user, runtime dependencies, extracted binaries, and a managed systemd unit.
It covers Debian 10 to latest stable, Ubuntu LTS releases, and RHEL 9+ compatible systems.
- name: Install WildFly
hosts: wildfly
become: true
vars:
wildfly_user: wildfly
wildfly_group: wildfly
wildfly_root: /opt/wildfly
wildfly_version: 39.0.0.Final # as of 2026-02-12; update before production rollout
wildfly_archive_url: "https://github.com/wildfly/wildfly/releases/download/{{ wildfly_version }}/wildfly-{{ wildfly_version }}.zip"
wildfly_archive_dest: "/tmp/wildfly-{{ wildfly_version }}.zip"
wildfly_install_dir: "/opt/wildfly-{{ wildfly_version }}"
wildfly_service_name: wildfly
wildfly_http_port: 8080
java_home_debian: /usr/lib/jvm/java-17-openjdk-amd64
java_home_redhat: /usr/lib/jvm/java-17-openjdk
wildfly_java_home: "{{ java_home_debian if ansible_os_family == 'Debian' else java_home_redhat }}"
tasks:
- name: Install runtime dependencies on Debian/Ubuntu
apt:
name:
- openjdk-17-jdk
- curl
- unzip
state: present
update_cache: true
when: ansible_os_family == "Debian"
- name: Install runtime dependencies on RHEL family
dnf:
name:
- java-17-openjdk-devel
- curl
- unzip
state: present
when: ansible_os_family == "RedHat"
- name: Create WildFly group
group:
name: "{{ wildfly_group }}"
state: present
- name: Create WildFly user
user:
name: "{{ wildfly_user }}"
group: "{{ wildfly_group }}"
home: "{{ wildfly_root }}"
shell: /usr/sbin/nologin
create_home: false
system: true
- name: Create WildFly root directory
file:
path: "{{ wildfly_root }}"
state: directory
owner: "{{ wildfly_user }}"
group: "{{ wildfly_group }}"
mode: "0755"
- name: Download WildFly archive
get_url:
url: "{{ wildfly_archive_url }}"
dest: "{{ wildfly_archive_dest }}"
mode: "0644"
- name: Extract WildFly archive
unarchive:
src: "{{ wildfly_archive_dest }}"
dest: /opt
remote_src: true
creates: "{{ wildfly_install_dir }}/bin/standalone.sh"
- name: Symlink current WildFly version
file:
src: "{{ wildfly_install_dir }}"
dest: "{{ wildfly_root }}/current"
state: link
- name: Ensure WildFly ownership
file:
path: "{{ item }}"
state: directory
owner: "{{ wildfly_user }}"
group: "{{ wildfly_group }}"
recurse: true
loop:
- "{{ wildfly_install_dir }}"
- "{{ wildfly_root }}"
- name: Create WildFly systemd unit
copy:
dest: "/etc/systemd/system/{{ wildfly_service_name }}.service"
mode: "0644"
content: |
[Unit]
Description=WildFly Application Server
After=network.target
[Service]
Type=simple
User={{ wildfly_user }}
Group={{ wildfly_group }}
Environment=JAVA_HOME={{ wildfly_java_home }}
Environment=WILDFLY_HOME={{ wildfly_root }}/current
WorkingDirectory={{ wildfly_root }}/current
ExecStart={{ wildfly_root }}/current/bin/standalone.sh -b 0.0.0.0 -Djboss.http.port={{ wildfly_http_port }}
ExecStop={{ wildfly_root }}/current/bin/jboss-cli.sh --connect command=:shutdown
Restart=on-failure
[Install]
WantedBy=multi-user.target
- name: Reload systemd
systemd:
daemon_reload: true
- name: Enable and start application service
service:
name: "{{ wildfly_service_name }}"
state: started
enabled: true
wildfly_version to the latest stable release before production rollout.Any questions?
Feel free to contact us. Find all contact information on our contact page.