ZetCode

在 Linux 服务器上安装 Jetty

最后修改于 2024 年 1 月 27 日

在本教程中,我们一直在本地计算机上使用 Jetty。在本章中,我们将展示如何在远程服务器上安装 Jetty。这将为我们提供更真实的 Jetty 服务器管理体验。

我们使用基于 Debian 的 Linux 系统。

$ sudo apt-get update
$ sudo apt-get upgrade

首先,我们更新服务器。

$ sudo apt-get install openjdk-7-jre-headless

接下来,我们安装 Java,如果系统上尚未安装的话。我们使用 OpenJDK 实现。openjdk-7-jre-headless 是一个最小化的 Java 运行时——服务器上不需要执行 Java GUI 程序的组件,因此未包含在此包中。

$ 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

我们在 /tmp 目录中下载并解压 Jetty 发行版。

$ sudo mv jetty-distribution-9.2.3.v20140905 /opt/jetty
$ sudo rm jetty-distribution-9.2.3.v20140905.tar.gz

Jetty 被移动到 /opt/jetty 目录。然后移除压缩包。

$ sudo rm -rf /opt/jetty/demo-base/

Jetty 发行版自带的演示应用程序被移除。

$ 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 文件用于系统范围的环境变量设置。我们在其中设置 JAVA_HOMEJETTY_HOMEJETTY_BASE 环境变量。

$ 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 命令会评估该文件并设置变量。现在我们可以开始引用新的变量了。

$ sudo useradd --user-group --shell /bin/false --home-dir /opt/jetty/temp jetty

向系统中添加一个新的 jetty 用户和组。Jetty 将在该系统用户下运行。将用户的 shell 设置为 /bin/false 的作用是阻止任何人使用该用户名登录。

$ cd /opt
$ sudo mkdir -p web/mybase/
$ sudo mkdir jetty/temp/

创建了新的目录。/opt/web/mybase 将用于存放 Jetty 的 base 目录,/opt/jetty/temp 将用于存放 Jetty 的临时文件。根据 Jetty 的文档,将临时目录与标准的系统 /tmp 分开创建是一种最佳实践。清理脚本可能会干扰 Jetty 的临时文件。

$ sudo chown -R jetty:jetty /opt/web
$ sudo chown -R jetty:jetty /opt/jetty

我们更改 Jetty 相关文件和目录的用户和组所有权。-R 选项会递归地对文件和目录进行操作,这意味着所有权会更改为父目录下的所有目录和文件。

$ sudo usermod -a -G jetty user_name

我们将我们的用户名添加到 jetty 组,以便能够有权限操作 Jetty。

$ sudo cp /opt/jetty/bin/jetty.sh /etc/init.d/jetty

接下来,我们将 Jetty 启用为系统服务。服务保存在 init.d 目录中。

$ 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

脚本会加载 /etc/default/jetty 文件的内容。在该文件中,我们设置了三个环境变量。

$ sudo service jetty start

Jetty 作为系统服务启动。

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 参数,我们可以检查服务的状态。

$ scp dist/first.war user_name@example.com:/opt/web/mybase/webapps

从开发计算机,我们通过将项目 WAR 文件复制到 Jetty base 的 webapps 目录来部署一个简单的 Web 应用程序。

$ curl http://example.com:8080/first/
<html> 
<body>
<p>
   Today's date: Sep 14, 2014 12:26:34 PM
</p>
</body> 
</html>

我们连接到 Web 应用程序并收到 HTML 输出。

$ sudo iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

在这里,我们使用一个包过滤器将所有进入端口 80 的数据包转发到端口 8080。Jetty 默认监听的端口是 8080;它在 start.ini 文件中配置。

$ curl http://example.com/first/
<html> 
<body>
<p>
   Today's date: Sep 14, 2014 12:26:34 PM
</p>
</body> 
</html>

现在我们可以不带端口号地引用网页了。

在本章中,我们成功地在远程 Linux 服务器上安装了 Jetty,将其启用为系统服务,并部署了一个简单的 Web 应用程序。

作者

我叫 Jan Bodnar,是一位充满热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。至今,我已撰写了超过 1400 篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出所有Java教程