CentOS8.2にJava11とTomcat9をセットアップする手順

| [../](https://qiita.com/taconana/items/e45f19e83c825a9ba75e) |
|---|

VPSサーバー（CentOS8.2）にJava11とTomcat9をインストールした。その手順をメモしておく。

## java-11-openjdkのインストール

yumでインストールし、バージョンを確認しておく。`11.0.9`であった。

```bash

$ yum install java-11-openjdk
$ yum install java-11-openjdk-devel
$ yum install java-11-openjdk-headless
$ java -version
openjdk version "11.0.9" 2020-10-20 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.9+11-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.9+11-LTS, mixed mode, sharing)

$ ls /usr/lib/jvm/
java-11-openjdk-11.0.9.11-0.el8_2.x86_64
```

## JAVA_HOMEとJRE_HOMEの設定

環境変数JAVA_HOMEとJRE_HOMEに設定しておく。PATHにも追加しておくこと。/etc/profileの末尾に記述しておくと、各ユーザーに共通に適用される。変数はexportしておく。export するとenvで環境変数の一覧として確認できる。JRE_HOMEはJAVA_HOMEで代用してよい。

ちなみに、su - (ハイフンありでswitch user）したときには、各ユーザーのホームにある.bashrc（/home/xxx/.bashrc）が呼ばれ、そこから/etc/bashrcが呼ばれ、そこからさらに/etc/profileが呼ばれる。

```bash

$ vi /etc/profile
(末尾に追加)
export JAVA_HOME=/usr/lib/jvm/java
export JRE_HOME=$JAVA_HOME
export PATH=$JAVA_HOME/bin:$PATH
$ source /etc/profile
$ env
```
## Tomcat9のインストール

Tomcat9をインストールして利用する。Tomcat用のユーザーも`tomcat9`で登録しておく。

https://downloads.apache.org/tomcat/tomcat-9/ にアクセスして、最新バージョンを確認しておいた。現時点では	`v9.0.40` であった。ダウンロードしてインストールする。インストール先は、`/opt/tomcat9` とする。ネット情報では、/usr/localや/usr/libexecなどにインストールする方もあるようだが、私は、/opt が短いし、他のものと混在しにくいので気に入っている。

```bash

$ su -
$ useradd -s /sbin/nologin tomcat9		# tomcat9ユーザーを作成

$ cd Downloads
$ wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.40//bin/apache-tomcat-9.0.40.tar.gz
$ tar zxvf apache-tomcat-9.0.40.tar.gz
$ mv apache-tomcat-9.0.40 /opt/tomcat9
$ chown -R tomcat9:tomcat9 /opt/tomcat9

$ ln -s /opt/tomcat9/ /usr/local/tomcat9	# リンクしておく
```

## CATALINA_HOMEの設定

/etc/profileの末尾にCATALINA_HOMEを追記する。前述のJAVA_HOME,JRE_HOMEに続けて、CATALINA_HOME,CATALINA_BASEを記述する。exportしておくこと。

```bash

$ vi /etc/profile
(末尾に追加)
export JAVA_HOME=/usr/lib/jvm/java
export JRE_HOME=$JAVA_HOME
export CATALINA_HOME=/opt/tomcat9
export CATALINA_BASE=$CATALINA_HOME
export PATH=$CATALINA_HOME/bin:$JAVA_HOME/bin:$PATH
$ source /etc/profile
```
そして、version.sh を実行して、JRE_HOME,CATALINA_HOMEが適切に設定されているかを確認しておく。JRE_HOMEとCATALINA_HOMEがexportされていないと、別の場所が参照されてしまうので、注意のこと。

```bash

$ /opt/tomcat9/bin/version.sh
Using CATALINA_BASE:   /opt/tomcat9
Using CATALINA_HOME:   /opt/tomcat9
Using CATALINA_TMPDIR: /opt/tomcat9/temp
Using JRE_HOME:        /usr/lib/jvm/java
Using CLASSPATH:       /opt/tomcat9/bin/bootstrap.jar:/opt/tomcat9/bin/tomcat-juli.jar
Using CATALINA_OPTS:
NOTE: Picked up JDK_JAVA_OPTIONS:  --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
Server version: Apache Tomcat/9.0.40
Server built:   Nov 12 2020 15:35:02 UTC
Server number:  9.0.40.0
OS Name:        Linux
OS Version:     4.18.0-193.28.1.el8_2.x86_64
Architecture:   amd64
JVM Version:    11.0.9+11-LTS
JVM Vendor:     Red Hat, Inc.
```
JVM VersionがJava11に切り替わっていないない場合がある。例えばJava1.8だったりする。その場合は、alternatives を実行してJVM を切り替えておく。それからversion.shを再実行すること。
```bash
# alternatives --config java
```

## tomcat9.serviceの登録と起動

tomcat9.serviceを新規に作成する。

```bash

$ vi /etc/systemd/system/tomcat9.service
[Unit]
Description=Apache Tomcat 9
After=network.target

[Service]
Type=forking
User=tomcat9
Group=tomcat9

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

[Install]
WantedBy=multi-user.target
```
tomcat9.serviceを起動する。また、OSの起動時に自動で開始されるように設定しておく。

```bash
$ systemctl enable tomcat9
$ systemctl start tomcat9
$ systemctl status tomcat9
● tomcat9.service - Apache Tomcat 9
   Loaded: loaded (/etc/systemd/system/tomcat9.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2020-11-28 15:41:05 JST; 7s ago
  Process: 98210 ExecStart=/opt/tomcat9/bin/startup.sh (code=exited, status=0/SUCCESS)
 Main PID: 98224 (java)
    Tasks: 35 (limit: 24989)
   Memory: 127.9M
```

## ブラウザからの確認

GNOMEデスクトップ上でブラウザからURLを指定してアクセスしてみる。ポートは8080である。http://localhost:8080/ または http://127.0.0.1:8080/ でアクセスして猫ロゴが出ればOKだ。GNOMEにはFireFoxがプリインストールされている。

## Firewallの設定と外部からの接続確認

外部のブラウザからIPアドレスやドメイン名を指定してアクセスできるようにするには、以下のようにFirewallの設定をする。tomcatのサービスは未登録（/etc/servicesにtomcatはない）なので、8080/tcpのポートを直接追加する。

```bash

$ firewall-cmd --zone=public --add-port=8080/tcp --permanent
$ firewall-cmd --reload
$ firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources: 
  services: dhcpv6-client http mysql ssh vnc-server
  ports: 8080/tcp
  protocols: 
```
これにより、http://157.xxx.xxx.xxx:8080/ や http://xxx.com:8080/ でアクセスできる。猫ロゴが出ればOKだ。この時点では、`:8080`のポートはまだ省略はできない。

## Tomcat Webマネージャを利用するには

ブラウザからTomcat Webマネージャを利用できるように設定しておきたい。アカウントadminを以下のように登録し、Tomcatサービスを再起動する。

```bash

$ vi ${CATALINA_HOME}/conf/tomcat-users.xml
<role rolename="admin-gui"/>
<role rolename="manager-gui"/>
<user username="admin" password="***" roles="admin-gui,manager-gui"/>

$ systemctl restart tomcat9
```

GNOMEデスクトップからFireFoxなどのブラウザで以下のURLにアクセスして、admin/*** アカウントでログインできることを確認しておく。

- http://localhost:8080/manager/status
- http://localhost:8080/manager/html
- http://localhost:8080/host-manager

しかし、この時点では外部のブラウザからIPアドレスやドメインを指定してアクセスすることはできない。特定のPCからアクセスできるようにするには、以下のようにmanagerとhost-managerのそれぞれのcontext.xmlを編集して、自身のPCのIPアドレス(以下では、xxx.xxx.xxx.\d+としている)を追加する必要がある。自身のPCのIPアドレスは、https://www.cman.jp/network/support/go_access.cgi に問い合わせると即答してくれる。

```bash
$ cd ${CATALINA_HOME}/webapps/manager/META-INF/
$ cp -p context.xml context.xml.original
$ vi context.xml
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
         ↓
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|xxx.xxx.xxx.\d+" />
$ cd ${CATALINA_HOME}/webapps/host-manager/META-INF/
$ cp -p context.xml context.xml.original
$ vi context.xml
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
         ↓
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|xxx.xxx.xxx.\d+" />
```

以上

| [../](https://qiita.com/taconana/items/e45f19e83c825a9ba75e) |
|---|