Tomcat 9.0のインストール・設定・Webアプリケーションデプロイ (CentOS 8)
Contents
はじめに
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のインストール前に、tomcat
OSユーザを作成します。
# 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/
にアクセスすると、今回デプロイしたサンプルアプリケーションが表示されます。