This guide provides a full Ansible playbook to deploy Eclipse Jetty with a dedicated service user, Jetty home/base layout, and a managed systemd unit.
It covers Debian 10 to latest stable, Ubuntu LTS releases, and RHEL 9+ compatible systems.
- name: Install Eclipse Jetty
hosts: jetty
become: true
vars:
jetty_user: jetty
jetty_group: jetty
jetty_home: /opt/jetty
jetty_base: /opt/jetty-base
jetty_version: 12.1.6 # as of 2026-02-12; update before production rollout
jetty_archive_url: "https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-home/{{ jetty_version }}/jetty-home-{{ jetty_version }}.tar.gz"
jetty_archive_dest: "/tmp/jetty-home-{{ jetty_version }}.tar.gz"
jetty_install_dir: "{{ jetty_home }}/jetty-home-{{ jetty_version }}"
jetty_service_name: jetty
jetty_http_port: 8080
java_home_debian: /usr/lib/jvm/java-17-openjdk-amd64
java_home_redhat: /usr/lib/jvm/java-17-openjdk
jetty_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
- tar
state: present
update_cache: true
when: ansible_os_family == "Debian"
- name: Install runtime dependencies on RHEL family
dnf:
name:
- java-17-openjdk-devel
- curl
- tar
state: present
when: ansible_os_family == "RedHat"
- name: Create Jetty group
group:
name: "{{ jetty_group }}"
state: present
- name: Create Jetty user
user:
name: "{{ jetty_user }}"
group: "{{ jetty_group }}"
home: "{{ jetty_home }}"
shell: /usr/sbin/nologin
create_home: false
system: true
- name: Create Jetty directories
file:
path: "{{ item }}"
state: directory
owner: "{{ jetty_user }}"
group: "{{ jetty_group }}"
mode: "0755"
loop:
- "{{ jetty_home }}"
- "{{ jetty_base }}"
- name: Download Jetty archive
get_url:
url: "{{ jetty_archive_url }}"
dest: "{{ jetty_archive_dest }}"
mode: "0644"
- name: Extract Jetty archive
unarchive:
src: "{{ jetty_archive_dest }}"
dest: "{{ jetty_home }}"
remote_src: true
creates: "{{ jetty_install_dir }}/start.jar"
- name: Symlink current Jetty version
file:
src: "{{ jetty_install_dir }}"
dest: "{{ jetty_home }}/current"
state: link
- name: Initialize Jetty base modules
command: "{{ jetty_java_home }}/bin/java -jar {{ jetty_home }}/current/start.jar --add-to-start=server,http"
args:
chdir: "{{ jetty_base }}"
creates: "{{ jetty_base }}/start.d/http.ini"
become_user: "{{ jetty_user }}"
- name: Set Jetty HTTP port
lineinfile:
path: "{{ jetty_base }}/start.d/http.ini"
regexp: '^jetty\.http\.port='
line: "jetty.http.port={{ jetty_http_port }}"
- name: Ensure Jetty ownership
file:
path: "{{ item }}"
state: directory
owner: "{{ jetty_user }}"
group: "{{ jetty_group }}"
recurse: true
loop:
- "{{ jetty_home }}"
- "{{ jetty_base }}"
- name: Create Jetty systemd unit
copy:
dest: "/etc/systemd/system/{{ jetty_service_name }}.service"
mode: "0644"
content: |
[Unit]
Description=Eclipse Jetty
After=network.target
[Service]
Type=simple
User={{ jetty_user }}
Group={{ jetty_group }}
Environment=JAVA_HOME={{ jetty_java_home }}
Environment=JETTY_HOME={{ jetty_home }}/current
Environment=JETTY_BASE={{ jetty_base }}
WorkingDirectory={{ jetty_base }}
ExecStart=/usr/bin/java -jar {{ jetty_home }}/current/start.jar
Restart=on-failure
[Install]
WantedBy=multi-user.target
- name: Reload systemd
systemd:
daemon_reload: true
- name: Enable and start application service
service:
name: "{{ jetty_service_name }}"
state: started
enabled: true
jetty_version to the latest stable release before production rollout.Any questions?
Feel free to contact us. Find all contact information on our contact page.