LoginSignup
10
11

More than 3 years have passed since last update.

CentOS 7にTomcat9/JDK8の開発環境を構築する

Last updated at Posted at 2018-10-27

はじめに

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」を新規に作成します。

/etc/systemd/system/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/

image.png

TomcatのManager画面にログインできるように設定する

tomcat-users.xmlの設定

$ sudo -u tomcat -s
$ vi /opt/apache-tomcat/conf/tomcat-users.xml

tomcat-users.xmlに「tomcat」ユーザを追加します。

/opt/apache-tomcat/conf/tomcat-users.xml
<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からもアクセスできるように設定を変更します。

/usr/local/tomcat9/webapps/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>
/opt/apache-tomcat/webapps/host-manager/META-INF/context.xml
 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>

これで以下のようにリモートからもアクセスできるようになります。

image.png

image.png

参考

10
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
11