Installing Jetty on Linux server
last modified January 27, 2024
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 openjdk-7-jre-headless
is
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 /tmp
directory.
$ 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
The /etc/environment
file is used for system-wide environment variable settings.
We set JAVA_HOME
, JETTY_HOME
, and JETTY_BASE
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
The 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,
the /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 /tmp
.
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.
The -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 init.d
directory.
$ 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 /etc/default/jetty
file.
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 ...
With the status
parameter, we can check a service's
status.
$ scp dist/first.war user_name@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 80
to port 8080
.
The default port on which Jetty listens is 8080
; it is configured in the
start.ini
file.
$ 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.
Author
List all Java tutorials.