はじめに
CentOS 7にTomcat9/JDK8の開発環境を構築するメモです。
TomcatのWebコンソールにログインできるまでの構築手順になっています。
Tomcat9のインストール
Tomcatは2018年10月時点で最新の9.0.12を使用します。
JDKインストール
最初にOpenJDK 8をインストールします。
# yum -y install java-1.8.0-openjdk-devel
# java -version
openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)
JAVA_HOMEを設定し、PATHにJavaのパスを追加しています。
# echo "export JAVA_HOME=$(readlink -e $(which java)|sed 's:/bin/java::')" > /etc/profile.d/java.sh
# echo "PATH=\$PATH:\$JAVA_HOME/bin" >> /etc/profile.d/java.sh
# source /etc/profile
Tomcatユーザの作成
Tomcat用のユーザを作成します。
# useradd -s /sbin/nologin tomcat
Tomcat9をダウンロードし、展開する。
Tomcat9をダウンロードし、「/opt」以下に展開します。
# curl -O http://ftp.yz.yamagata-u.ac.jp/pub/network/apache/tomcat/tomc
at-9/v9.0.12/bin/apache-tomcat-9.0.12.tar.gz
# tar xvzf apache-tomcat-9.0.12.tar.gz -C /opt
# ln -s /opt/apache-tomcat-9.0.12 /opt/apache-tomcat
# chown -R tomcat:tomcat /opt/apache-tomcat-9.0.12
CATALINA_HOMEを設定します。
# echo "export CATALINA_HOME=/opt/apache-tomcat" > /etc/profile.d/tomcat.sh
# source /etc/profile
Tomcatの自動起動設定
自動起動用に「tomcat.service」を新規に作成します。
[Unit]
Description=Apache Tomcat 9
After=syslog.target network.target
[Service]
User=tomcat
Group=tomcat
Type=oneshot
PIDFile=/opt/apache-tomcat/tomcat.pid
RemainAfterExit=yes
ExecStart=/opt/apache-tomcat/bin/startup.sh
ExecStop=/opt/apache-tomcat/bin/shutdown.sh
ExecReStart=/opt/apache-tomcat/bin/shutdown.sh;/opt/apache-tomcat/bin/startup.sh
[Install]
WantedBy=multi-user.target
先ほど作成した設定ファイルに実行権限を付与します。
→[2019/8/5追記]なぜこのようなことを書いてしまったのでなぞですが実行権限は不要です。権限が644になっていればOK。以下は実行不要です。
# chmod 755 /etc/systemd/system/tomcat.service
tomcatサービスを有効化し、サービスを起動します。
# systemctl enable tomcat.service
Created symlink from /etc/systemd/system/multi-user.target.wants/tomcat.service to /etc/systemd/system/tomcat.service.
# systemctl start tomcat.service
# systemctl status tomcat.service
● tomcat.service - Apache Tomcat 9
Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; vendor preset: disabled)
Active: active (exited) since Sat 2018-10-27 01:34:01 CEST; 1s ago
Process: 13706 ExecStart=/opt/apache-tomcat/bin/startup.sh (code=exited, status=0/SUCCESS)
Main PID: 13706 (code=exited, status=0/SUCCESS)
CGroup: /system.slice/tomcat.service
└─13721 /usr/bin/java -Djava.util.logging.config.file=/opt/apache-tomcat/conf/log...
Oct 27 01:34:01 tomcatserver1 systemd[1]: Starting Apache Tomcat 9...
Oct 27 01:34:01 tomcatserver1 systemd[1]: Started Apache Tomcat 9.
ファイアウォールの設定
Tomcatが使用する8080ポートを空けます。
# firewall-cmd --add-port=8080/tcp --permanent
# firewall-cmd --reload
# firewall-cmd --list-ports --zone=public
8080/tcp
TomcatのWeb画面にアクセスする
以下のURLにアクセスするとTomcatのトップ画面が表示されます。
http://[IPアドレス]:8080/
TomcatのManager画面にログインできるように設定する
tomcat-users.xmlの設定
$ sudo -u tomcat -s
$ vi /opt/apache-tomcat/conf/tomcat-users.xml
tomcat-users.xmlに「tomcat」ユーザを追加します。
<tomcat-users>
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="p@ssw0rd" roles="manager-gui,admin-gui"/>
</tomcat-users>
Tomcatを再起動します。
# systemctl restart tomcat
これでローカルからはログインできるようになるのですが、リモートからはアクセスできません。
検索してみると以下の情報が見つかりました。
Tomcat 9ではデフォルトで、Webアプリケーションマネージャ(manager-gui)のアクセスにローカルからのみ許可の制限が入っているので、接続したいIPを追加しておく必要があります。
引用:Linux版のTomcat 9でWebアプリケーションマネージャを設定する
「192.168.0.0/16」のIPからもアクセスできるように設定を変更します。
<Context antiResourceLocking="false" privileged="true" >
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|192\.168\.\d+\.\d+" />
<Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>
vi /opt/apache-tomcat/webapps/host-manager/META-INF/context.xml
<Context antiResourceLocking="false" privileged="true" >
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|192\.168\.\d+\.\d+" />
<Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>
これで以下のようにリモートからもアクセスできるようになります。