Installing Jetty on Linux server
last modified July 6, 2020
Throughout this tutorial we have been using Jetty on a local computer. In this chapter we show how to install Jetty on a remote server. This gives us a more realistic experience in managing a Jetty server.
We use a debian-based Linux system.
$ sudo apt-get update $ sudo apt-get upgrade
First, we update the server.
$ sudo apt-get install openjdk-7-jre-headless
Next, we install Java if it is not already present on the system.
We use the OpenJDK implementation. The
a minimal Java runtime—the components for executing Java GUI
programs are not needed on servers and are not included in this package.
$ cd /tmp $ sudo wget http://download.eclipse.org/jetty/stable-9/dist/jetty-distribution -9.2.3.v20140905.tar.gz $ sudo tar xzvf jetty-distribution-9.2.3.v20140905.tar.gz
We download and unpack a Jetty distribution inside the
$ sudo mv jetty-distribution-9.2.3.v20140905 /opt/jetty $ sudo rm jetty-distribution-9.2.3.v20140905.tar.gz
Jetty is moved to /opt/jetty directory. The archive is removed.
$ sudo rm -rf /opt/jetty/demo-base/
The demo applications that come with Jetty distribution are removed.
$ sudo vi /etc/environment $ cat /etc/environment PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games: /usr/local/games" JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386 JETTY_HOME=/opt/jetty JETTY_BASE=/opt/jetty/mybase
/etc/environment file is used for system-wide environment variable settings.
environment variables there.
$ source /etc/environment $ echo $JAVA_HOME /usr/lib/jvm/java-7-openjdk-i386 $ echo $JETTY_HOME /opt/jetty $ echo $JETTY_BASE /opt/jetty/mybase
source command evaluates the file and sets the variables. We can
now start referring to the new variables.
$ sudo useradd --user-group --shell /bin/false --home-dir /opt/jetty/temp jetty
A new jetty user and group are added to the system. Jetty will run under this user
on the system. Setting the user's shell to
/bin/false has the affect of not
allowing someone to log in under this username.
$ cd /opt $ sudo mkdir -p web/mybase/ $ sudo mkdir jetty/temp/
New directories are created. The
/opt/web/mybase will hold the Jetty base,
/opt/jetty/temp will be used for temporary files of Jetty.
According to the Jetty documentation, it is a best practice to create a separate
temporary directory from the standart system
Cleanup scripts may interfere with the Jetty's temporary files.
$ sudo chown -R jetty:jetty /opt/web $ sudo chown -R jetty:jetty /opt/jetty
We change the user and group ownership for files and directories relevant for Jetty.
-R option operates recursively on files and directories, which means that the
ownership is changed for all directories and files under parent directories.
$ sudo usermod -a -G jetty user_name
We add our user name to the jetty group in order to be able to have permissions to operate Jetty.
$ sudo cp /opt/jetty/bin/jetty.sh /etc/init.d/jetty
Next, we enable Jetty as a system service. The services
are kept in the
$ sudo touch /etc/default/jetty $ sudo vi /etc/default/jetty $ cat /etc/default/jetty JETTY_HOME=/opt/jetty JETTY_BASE=/opt/web/mybase TMPDIR=/opt/jetty/temp
The script loads the contents of the
Inside the file, we set three environment variables.
$ sudo service jetty start
Jetty is started as a system service.
jano7@core7:~$ service jetty status Checking arguments to Jetty: START_INI = /opt/web/mybase/start.ini JETTY_HOME = /opt/jetty JETTY_BASE = /opt/web/mybase ...
status parameter, we can check a service's
$ scp dist/first.war email@example.com:/opt/web/mybase/webapps
From the development computer, we deploy a simple web application by copying a project WAR file to the webapps directory of the Jetty base.
$ curl http://example.com:8080/first/ <html> <body> <p> Today's date: Sep 14, 2014 12:26:34 PM </p> </body> </html>
We connect to the web application and receive HTML output.
$ sudo iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
Here we use a packet filter to forward all incoming packets to port
The default port on which Jetty listens is
8080; it is configured in the
$ curl http://example.com/first/ <html> <body> <p> Today's date: Sep 14, 2014 12:26:34 PM </p> </body> </html>
Now we can refer to the webpage without the port number.
In this chapter, we have installed Jetty on a remote Linux server, enabled it as a system service, and deployed a simple web application.