Tomcat9.0.30(CentOS8 1905)

2019/12/23


標準パッケージにTomcatがない

CentOS7では標準パッケージにTomcat7が用意されていた。CentOS8ではパッケージにTomcatがない。
CentOS7では標準パッケージにするか、最新版Tomcatにするか悩んだが、ここでは選択の余地がない。
最新版Tomcat(Tomcat9.0.30)をhttp://tomcat.apache.org/からを入手し、いろいろ作業をすることとした。
作業手順は、前回同様
  1. httpdをインストール
    いろいろ設定し、httpdの動作を確認
  2. tomcatを使うために必要な道具をインストール
    java実行環境の動作を確認
  3. ユーザtomcatを作成
  4. tomcatをダウンロード
    tomcatの動作をテストページで確認
  5. コンテナを記述
    myappの動作を確認
  6. コンテナを記述
    myappの動作を確認
  7. OS起動時にTomcatの扱いを記述
になる。

Apache httpd インストール

Apache httpdをインストールする。
dnf install httpd -y

/etc/httpd/conf/httpd.confを修正する。
修正前修正後
ServerAdmin root@localhost連絡先に修正
ServerName ...ServerName www.takahashi.lab:80
AllowOverride ...
<Directory "/var/www/html">中
AllowOverride All
ScriptAlias ...CGIを使用しないのでコメントアウト
#    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
< Directory ...上記修正に合わせてコメントアウト
#<Directory "/var/www/cgi-bin">
#    AllowOverride None
#    Options None
#    Require all granted
#</Directory>
 
# 最終行に追記
# サーバーの応答ヘッダ
ServerTokens Prod
# キープアライブオン
KeepAlive On
各ユーザのディレクトリを有効にする。
/etc/httpd/conf.d/userdir.confを編集する。
#    UserDir disabled
    UserDir public_html

/var/www/html/以下を作り直す。
mv /var/www/html /var/www/htmlorg
mkdir -p /var/www/html
cd /var/www/html
echo -e '<!DOCTYPE html>' > index.html
echo "<html lang=\"ja\">" >> index.html
echo " <head>" >> index.html
echo "  <meta charset="utf-8">" >> index.html
echo "  <title>webserver top page</title>" >> index.html
echo " </head>" >> index.html
echo "<body>" >> index.html
echo "This is "http://webserver.takahashi.lab/index.html".<br>" >> index.html
echo "</body>" >> index.html
echo "</html>" >> index.html
cat index.html

Apache 動作確認(1)

テストページ(/var/www/html/index.html)を作成し、Apacheを起動する。
firewall-cmd --list-all ;#httpがないことを確認
firewall-cmd --add-service=http --permanent
firewall-cmd --reload
systemctl start httpd
systemctl enable httpd
DNS(またはhosts)にwebserverを登録する。
webブラウザでhttp://webserver.takahashi.lab/にアクセスし、Apacheの動作を確認する。
top page

Apache Tomcat9.0.30 インストール

Tomcatを使うにあたり、java実行環境(JRE)が必要となる。
CentOS8.0.1905には3つのjava開発環境・実行環境が用意されている。
「Oracle Java SE サポート・ロードマップ」によると、最新版はJavaSE(Java SE 13)であるが、LTSではない。サポートは2020/3まで、拡張サポートは設定されていない。
次期Java(Java14)がLTSになると思われるが、まだJava14の声は聞こえてこない。
LTSはJava8(EOF:2025/3),Java11(2026/9)になる。 今回は、java-11-openjdkで様子を見る。
dnf install -y java-11-openjdk java-11-openjdk-devel java-11-openjdk-headless java-11-openjdk-javadoc java-11-openjdk-jmods
java -version
javac -version
Tomcat9.0.30をダウンロードする。
#CentOS8はパッケージにTomcatがないので、本家(https://tomcat.apache.org/)からダウンロードする。
mkdir -p ~/Downloads;cd ~/Downloads wget http://ftp.riken.jp/net/apache/tomcat/tomcat-9/v9.0.30/bin/apache-tomcat-9.0.30.tar.gz wget http://ftp.riken.jp/net/apache/tomcat/tomcat-9/v9.0.30/bin/apache-tomcat-9.0.30-fulldocs.tar.gz #wget http://ftp.riken.jp/net/apache/tomcat/tomcat-9/v9.0.30/bin/apache-tomcat-9.0.30-deployer.tar.gz #wget http://ftp.riken.jp/net/apache/tomcat/tomcat-9/v9.0.30/src/apache-tomcat-9.0.30-src.tar.gz #wget https://jdbc.postgresql.org/download/postgresql-42.2.9.jar tar xvzf apache-tomcat-9.0.30.tar.gz mv apache-tomcat-9.0.30 /usr/tomcat mkdir -p /usr/tomcat/webapps/ROOT/WEB-INF/classes useradd -M -d /usr/tomcat tomcat chown -R tomcat:tomcat /usr/tomcat/ #Tomcatが動的に生成するファイルのパーミッションを750にする。 echo '#!/bin/sh' > /usr/tomcat/bin/setenv.sh echo "UMASK=0022" >> /usr/tomcat/bin/setenv.sh chmod 750 /usr/tomcat/bin/setenv.sh ;chown tomcat:tomcat /usr/tomcat/bin/setenv.sh /usr/tomcat/bin/startup.sh;#systemctlなしでtomcatを起動/停止できることを確認,あわせてlogをつくる /usr/tomcat/bin/shutdown.sh;# chown -R tomcat:tomcat /usr/tomcat/;#logの所有者をtomcatに変更
systemctl用にtomcat.serviceをつくる。
起動セッションにtomcatを追加するためにこれが必要になる。
#cat /usr/lib/systemd/system/tomcat.service
#tomcat.service
# 新規作成
 [Unit]
Description=Apache Tomcat
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/tomcat/bin/startup.sh
ExecStop=/usr/tomcat/bin/shutdown.sh
RemainAfterExit=yes
User=tomcat
Group=tomcat

[Install]
WantedBy=multi-user.target
systemctlで動作を確認する。自動起動するようにenableをにつける。
getenforce;# SELinuxの状態を確認 Enforcingなら startup.shは拒否される
setenforce 0;# SELinuxの状態をPermissiveに変更
systemctl start tomcat;systemctl status tomcat;
systemctl enable tomcat;#起動セッションにtomcatを追加
systemctl stop tomcat;systemctl status tomcat;
systemctl start tomcat;

Tomcat9.0.30 動作確認(1)

ポート8080はfirewall-cmdで許可していないので、アクセスはlocalhostに限定される。
webブラウザでhttp://localhost:8080/にアクセスし、Tomcatの動作を確認する。
tomcat

Tomcat9.0.30 動作確認(2)

tomcat top pageが開いたので、JSPを1つつくる。
cat /usr/tomcat/webapps/ROOT/hello.jsp
<%@ page contentType="text/html; charset=UTF-8" %>
<html>
<head>
<title>Hello JSP</title>
</head>
<%
  String msg = "Hello, JSP !!!" ;
%>
<body>
  <h1><%= msg %></h1>
</body>
</html>
webブラウザでhttp://localhost:8080/hello.jspにアクセスし、動作を確認する。
daytime

Tomcat9.0.30 動作確認(3)

ポート8080を使わず、webserverの一部としてtomcatを動かす。
tomcat top pag(index.jsp)とhello.jspは別々なURIにする。
#proxy_ajp.confをつくる
vi /etc/httpd/conf.d/proxy_ajp.conf
systemctl restart tomcat httpd
cat /etc/httpd/conf.d/proxy_ajp.conf
<Location /tomcat/>
  ProxyPass ajp://localhost:8009/
</Location>

<Location /hello/>
  ProxyPass ajp://localhost:8009/hello.jsp
</Location>
webブラウザで http://localhost/以下にアクセスし、それぞれの動作を確認する。
http://webserver.takahashi.lab/
localhost

http://webserver.takahashi.lab/tomcat/
tomcat8

http://webserver.takahashi.lab/hello/
daytime