本家様 https://www.eclipse.org/jetty/
Java Servletコンテナ
Tomcatでもいいのだが、小さくて分かり易いのでこちらを利用している.
RockyLinux8では jetty-9.4.30 をdnfからインストール可能ですが、ここでは最新版のJetty11をインストールしてみます
Java †
Jetty11は本家様のページを見ると「Java 11+」の対応が必要な様子
RockyLinux8を最小構成で構築するとjava-8が既定でインストールされてる. これにjava-11を追加してみる
[root@jetty ~]# cat /etc/redhat-release
Rocky Linux release 8.7 (Green Obsidian)
[root@jetty ~]# getenforce
Enforcing
[root@jetty ~]# rpm -qa | grep "^java-"
java-1.8.0-openjdk-headless-1.8.0.352.b08-2.el8_7.x86_64
[root@jetty ~]# dnf install java-11
[root@jetty ~]# alternatives --config java <-- javaの先をjava-11に付け替える
(確認)
[root@jetty ~]# java -version
openjdk version "11.0.18" 2023-01-17 LTS
OpenJDK Runtime Environment (Red_Hat-11.0.18.0.10-2.el8_7) (build 11.0.18+10-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-11.0.18.0.10-2.el8_7) (build 11.0.18+10-LTS, mixed mode, sharing)
[root@jetty ~]#
jetty 導入 †
https://www.eclipse.org/jetty/download.php
から
「Release」欄の11.0.xにある「.tgz」リンクをコピーします
[root@jetty ~]# mkdir /opt/jetty
[root@jetty ~]# cd /opt/jetty/
[root@jetty jetty]# curl -O https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-home/11.0.13/jetty-home-11.0.13.tar.gz
[root@jetty jetty]# ls -lh
total 14M
-rw-r--r--. 1 root root 14M Feb 13 02:14 jetty-home-11.0.13.tar.gz
[root@jetty jetty]# tar xf jetty-home-11.0.13.tar.gz <-- /opt/jetty/jetty-home-11.0.13 が用意される
簡単な実行テストを行います. アプリ本体の場所を示す環境変数「JETTY_HOME」とjettyの動作設定フォルダを示す
環境変数「JETTY_BASE」を定義して、jettyのコマンドを使って「JETTY_BASE」の中にひな形を作るみたい.
... っが「JETTY_BASE」がうまく機能しない...なのでコマンド行内で「jetty.base=」て代用してます 単にその場所で実行してもいいのだけど
[root@jetty jetty]# export JETTY_HOME=/opt/jetty/jetty-home-11.0.13
[root@jetty jetty]# mkdir jetty-test
[root@jetty jetty]# java -jar $JETTY_HOME/start.jar jetty.base=/opt/jetty/jetty-test --add-module=http
[root@jetty jetty]# java -jar $JETTY_HOME/start.jar jetty.base=/opt/jetty/jetty-test --add-module=webapp
[root@jetty jetty]# java -jar $JETTY_HOME/start.jar jetty.base=/opt/jetty/jetty-test --add-module=demo-simple
テスト環境が用意できたので実際に動かしてみます
[root@jetty ~]# firewall-cmd --add-port=8080/tcp --zone=public --permanent
[root@jetty ~]# firewall-cmd --reload
[root@jetty ~]# java -jar /opt/jetty/jetty-home-11.0.13/start.jar jetty.base=/opt/jetty/jetty-test
:
その後「http://jetty:8080/」にアクセスすると下記が表示され、

「/demo-simple」リンクをクリックすると下記になる.

終了は「java -jar ...」のフォアグランドをCtrl-Cで停止させる.
自動起動に向けて jettyの稼働ユーザを作成 †
jettyをrootではなく別のユーザで動かします
まずはアカウント作成
[root@jetty ~]# useradd -r -s /bin/false -d /opt/jetty -M jetty
[root@jetty ~]# id jetty
uid=993(jetty) gid=990(jetty) groups=990(jetty)
[root@jetty ~]#
そして/opt/jettyの所有権をjettyに渡す
[root@jetty ~]# cd /opt/
[root@jetty opt]# chown -R jetty. ./jetty/
自動起動に向けて †
jettyのbinには「jetty.service」と「jetty.sh」が入っていた
[root@jetty ~]# ls -l /opt/jetty/jetty-home-11.0.13/bin/
total 20
-r--r--r--. 1 jetty jetty 340 Dec 8 05:59 jetty.service
-r-xr-xr-x. 1 jetty jetty 16049 Dec 8 05:59 jetty.sh
[root@jetty ~]#
これをそのまま使って自動起動をさせてみることに. 「jetty.sh」の中身を読むと想定している「Configuration files」の場所としては「/etc/default/jetty」「$HOME/.jettyrc」「/etc/jetty.conf」を想定している様子.
ここでは「/etc/default/jetty」を「Configuration files」設定ファイルとして扱います.
設定の項目も「jetty.sh」に記載されてます
[root@jetty ~]# cp /opt/jetty/jetty-home-11.0.13/bin/jetty.service /etc/systemd/system
[root@jetty ~]# cp /opt/jetty/jetty-home-11.0.13/bin/jetty.sh /etc/init.d/jetty
[root@jetty ~]# vi /etc/systemd/system/jetty.service
[Unit]
Description=Jetty Web Application Server
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/run/jetty/jetty.pid
ExecStart=/etc/init.d/jetty start
ExecStop=/etc/init.d/jetty stop
ExecReload=/etc/init.d/jetty restart
User=jetty
Group=jetty
[Install]
WantedBy=multi-user.target
[root@jetty ~]# echo "d /run/jetty 755 jetty jetty" > /etc/tmpfiles.d/jetty.conf
[root@jetty ~]# /usr/bin/systemd-tmpfiles --create /etc/tmpfiles.d/jetty.conf
(設定ファイル)
[root@jetty ~]# vi /etc/default/jetty
JETTY_HOME=/opt/jetty/jetty-home-11.0.13
JETTY_USER=jetty
JETTY_ARGS=jetty.http.port=8080
JETTY_RUN=/run/jetty/
JETTY_SHELL=/bin/bash
JETTY_BASE=/opt/jetty/jetty-test
[root@jetty ~]#
っで起動
[root@jetty ~]# systemctl daemon-reload
[root@jetty ~]# systemctl enable jetty --now