Tomcat 9.0のインストール・設定・Webアプリケーションデプロイ (CentOS 8)

はじめに

OSSのJavaアプリケーションサーバであるTomcatは、エンタープライズ系システムのWebアプリケーションサーバでよく使われています。
今回は、基本的なインストール、設定、Webアプリケーションデプロイの手順について勉強してみました。

前提条件

以下の前提条件で検証しています。

  • ハードウェア: VirtualBox上の仮想マシン
  • OS: CentOS 8.2
  • 言語環境: OpenJDK 11 (OS同梱版)
  • ミドルウェア:
    • Tomcat: 9.0 (コミュニティ版)
  • 構築対象サーバはインターネットと疎通が取れること
  • 各手順はroot権限を持つユーザで実施

OSは、CentOSインストールDVDのISOファイルから「最小限のインストール」を選択しインストールを行いました。
バージョン情報は以下の通りです。

# cat /etc/redhat-release
CentOS Linux release 8.2.2004 (Core)

# uname -r
4.18.0-193.el8.x86_64

OpenJDKのインストール

OpenJDKはCentOSのリポジトリにパッケージが存在するため、dnfコマンドでインストールします。
なお、java-11-openjdkはJREしかインストールされないため、JDKをインストールするにはjava-11-openjdk-develを指定してください。
CentOSを最小インストールしている場合、後続の作業で使用するtarコマンドがインストールされていないので、併せてインストールします。

# dnf -y install java-11-openjdk-devel tar
(略)
完了しました!

OSユーザの作成

Tomcatのインストール前に、tomcatOSユーザを作成します。

# useradd -d /opt/tomcat -s /sbin/login -M tomcat

Tomcatのインストール

Tomcatをインストールするには、公式Webサイトから圧縮アーカイブファイルをダウンロードして展開します。
以下のサイトへアクセスし、「Mirrors」の箇所で国内の適当なミラーサイトを選択してください。

https://tomcat.apache.org/download-90.cgi

ミラーサイトを選択後、「Binary Distributions」→「Core:」→「tar.gz」のHTMLリンクをコピーし、下記手順のcurlコマンドの引数に指定します。
以下の手順を実施し、Tomcatのプログラム一式を/optの下に配置します。

# cd /opt
# curl -O https://ftp.riken.jp/net/apache/tomcat/tomcat-9/v9.0.37/bin/apache-tomcat-9.0.37.tar.gz
# tar zxvf apache-tomcat-9.0.37.tar.gz
# ln -s /opt/apache-tomcat-9.0.37 /opt/tomcat
# chown -R tomcat:tomcat /opt/tomcat/
# chown -h tomcat:tomcat /opt/tomcat
# rm -f /opt/apache-tomcat-9.0.37.tar.gz

systemdユニットファイルの作成

TomcatをOS上でサービス化するための設定を行います。

systemdユニットファイルが読み込む環境変数ファイルを作成します。
viなどのテキストエディタで、以下のファイルを作成します。

# vi /etc/sysconfig/tomcat

記載内容は、以下の通りです。
CATALINA_OPTSは、Tomcat起動時のJavaのオプションパラメータです。最低限、メモリ不足を起こさないよう以下設定を加えています。

  • -server: Serverモードで起動
  • -Xmx128m: ヒープメモリ領域の最大サイズ
  • -Xms128m: ヒープメモリ領域の最小サイズ
  • -XX:MaxMetaspaceSize=128m: メタスペース領域の最大サイズ

参考:
Tomcat構成の推奨事項
Javaのチューニングフラグまとめ(1.8.0_92時点)

JAVA_HOME="/usr/lib/jvm/jre"
CATALINA_HOME="/opt/tomcat"
CATALINA_BASE="/opt/tomcat"
CATALINA_OPTS="-server -Xmx128m -Xms128m -XX:MaxMetaspaceSize=128m"

Tomcatのsystemdユニットファイルを作成します。

# vi /usr/lib/systemd/system/tomcat.service

記載内容は、以下の通りです。

[Unit]
Description=Apache Tomcat application server.
After=network.target

[Service]
Type=forking

User=tomcat
Group=tomcat

EnvironmentFile=/etc/sysconfig/tomcat

ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh

[Install]
WantedBy=multi-user.target

新規にsystemdユニットファイルを作成したので、一度ユニットファイルのリロードを行います。

# systemctl daemon-reload

不要Webアプリケーションの削除

Tomcatのインストール直後は、webappsディレクトリ配下にデフォルトでいくつかのWebアプリケーションが用意されています。いずれも、自作のWebアプリケーションを動かすためには不要なものなので削除します。

# ls -l /opt/tomcat/webapps/
合計 4
drwxr-x---.  3 tomcat tomcat  283  9月  8 09:48 ROOT
drwxr-x---. 16 tomcat tomcat 4096  9月  8 09:48 docs
drwxr-x---.  6 tomcat tomcat   83  9月  8 09:48 examples
drwxr-x---.  5 tomcat tomcat   87  9月  8 09:48 host-manager
drwxr-x---.  5 tomcat tomcat  103  9月  8 09:48 manager

# rm -rf /opt/tomcat/webapps/*

ファイアウォール許可設定

firewalldが有効な場合、Tomcatが使用するポートの通信許可設定を行います。
接続をHTTPで行う場合はTCP/8008を、AJPで行う場合はTCP/8009を許可します。

# firewall-cmd --zone=public --add-port=8080/tcp --permanent
# firewall-cmd --zone=public --add-port=8009/tcp --permanent
# firewall-cmd --reload

サービス起動

サービスの自動起動有効化、サービス起動を行います。

# systemctl enable tomcat.service
# systemctl start tomcat.service

起動確認

サービス状態

サービスが起動していることを確認します。Active:の箇所がactive (running)となっていればサービスは起動しています。

# systemctl status tomcat.service
● tomcat.service - Apache Tomcat application server.
   Loaded: loaded (/usr/lib/systemd/system/tomcat.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2020-09-08 22:33:15 JST; 23min ago
(略)

プロセス状態

psコマンドでTomcatのプロセスを探す場合は注意が必要です。Tomcat自体もJavaの実行プログラムなので、プロセス名としてはjavaとなります。
org.apache.catalina.startup.Bootstrapが実行クラス名となるので、同名で文字列を抽出すると、プロセスを探し出せます。

# ps -ef | grep 'org.apache.catalina.startup.Bootstrap' | grep -v grep
tomcat     11427       1  4 22:34 ?        00:01:10 /usr/lib/jvm/jre/bin/java -Djava.util.logging.config.file=/opt/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -server -Xmx128m -Xms128m -XX:MaxMetaspaceSize=128m -Dignore.endorsed.dirs= -classpath /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/opt/tomcat -Dcatalina.home=/opt/tomcat -Djava.io.tmpdir=/opt/tomcat/temp org.apache.catalina.startup.Bootstrap start

Webアプリケーションのデプロイ

Javaで作成したWebアプリケーションは、warファイル形式で配布されることが多いです。
warファイル形式のWebアプリケーションをTomcatにデプロイしてみます。

サンプルアプリケーションとして、公式サイトで公開されている以下ファイルをデプロイします。
https://tomcat.apache.org/tomcat-9.0-doc/appdev/sample/sample.war

warファイルをwebappsディレクトリに配置します。

# curl -O https://tomcat.apache.org/tomcat-9.0-doc/appdev/sample/sample.war
# mv sample.war /opt/tomcat/webapps/
# chown tomcat:tomcat /opt/tomcat/webapps/sample.war

デフォルトではwarファイルの自動展開と自動デプロイが有効になっているため、数秒経過するとWebアプリケーションが起動状態となります。

以下のコマンドで、デプロイが完了したことをログファイルから確認できます。

# grep 'deploy' /opt/tomcat/logs/catalina.out
08-Sep-2020 23:04:59.974 情報 [Catalina-utility-1] org.apache.catalina.startup.HostConfig.deployWAR Webアプリケーションアーカイブ [/opt/apache-tomcat-9.0.37/webapps/sample.war] を配備します
08-Sep-2020 23:05:00.584 情報 [Catalina-utility-1] org.apache.catalina.startup.HostConfig.deployWAR Web アプリケーションアーカイブ [/opt/apache-tomcat-9.0.37/webapps/sample.war] の配備は [609] ms で完了しました。

Webブラウザから、http://<IPアドレス>:8080/sample/にアクセスすると、今回デプロイしたサンプルアプリケーションが表示されます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です