EC2(AmazonLinux2)にJava、Apache、Tomcat9をインストール

#概要
忘れないように、AmazonLinux2に、Java、Apache（WEBサーバ）、Tomcat（サーブレットコンテナ）をインストールしたことをメモしておく。

+ Webサーバ上で動くJavaプログラムがサーブレット
+ サーブレットを動かすソフトがサーブレットコンテナで、今回はそれがTomcat
+ リクエストに応じてレスポンスを返すWEBサーバのソフトがApache
+ TomcatはApacheがなくとも動くには動く。簡易的なWEBサーバソフトとしても機能する。

https://wa3.i-3-i.info/word12843.html

#Javaのインストール
java-1.8.0-openjdk-develをインストール。develの有無の違いは[こちら](https://qiita.com/msakamoto_sf/items/92d421bf724efa740350)を参考にさせていただいた。実行環境だけならjava-1.8.0-openjdkで良いが、-develが付く方はjavacなどの開発用コマンドが使える。基本的には-develをインストール。

```:インストール
$yum install -y java-1.8.0-openjdk-devel
```

```:バージョン確認
$ java -version
openjdk version "1.8.0_252"
OpenJDK Runtime Environment (build 1.8.0_252-b09)
OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)
```

# Apacheのインストール
[こちら](https://qiita.com/hiren/items/2a4f1b55c99ebfb3fd08#apache)を参考にさせていただいた。

```:バージョン確認
$ httpd -v
Server version: Apache/2.4.43 ()
Server built:   May  8 2020 17:02:41
```
```:EC2起動時にApacheも起動する設定
$ systemctl enable httpd.service
$ systemctl status httpd.service
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since 水 2020-09-02 14:17:37 UTC; 16h ago
     Docs: man:httpd.service(8)
~略~
```

`enabled`の文字があれば自動起動設定完了。

↓のようなEC2のエンドポイントにアクセスするとApacheのテストページが表示される。
http://ec2********.ap-northeast-1.compute.amazonaws.com

#Tomcatのインストール
Apacheのインストールでもお世話になったリンク先を参考にしたがうまく動かなかった。[こちら](https://medium.com/@ean.vafaei/how-to-install-tomcat-on-aws-ec2-instance-c10738a653f2)を参考にしたら動いた。なぜでしょう。。。
なお、EC2のセキュリティグループのインバウンドルールにおける8080ポートを許可しておく。Tomcatのテストページへのアクセスに必要。
![セキュリティグループ：サーバー用.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/250449/9eb41941-260c-2ec2-4029-f927f6a7c5d5.png)

ダウンロード元URLは[公式サイト](https://tomcat.apache.org/download-90.cgi)のtar.gzのリンク先アドレス。

```:tomcatをホーディレクトリにダウンロード
$ cd ~
$ wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.37/bin/apache-tomcat-9.0.37.tar.gz
```

```:解凍
$ tar -xvzf apache-tomcat-9.0.37.tar.gz
```

```:解凍したディレクトリは、参考サイトに従い/opt/tomcat-9に移動&rename。
$ sudo mv ~/apache-tomcat-9.0.37 /opt/tomcat-9
```

tomcatグループとユーザーを作り、`tomcat-9`ディレクトリのユーザー・グループに設定する。`-s/bin/false`オプションはtomcatユーザーが通常のユーザーとしてログインするのを防ぐ設定らしい。

```:ユーザー、グループ設定
$sudo groupadd tomcat
$sudo useradd -r tomcat -s /bin/false -g tomcat tomcat
$sudo chgrp -R tomcat /opt/tomcat-9
$sudo chown -R tomcat /opt/tomcat-9
```

```:tomcatのサービス起動の設定ファイル（ユニットファイル）を作成
$sudo vim /etc/systemd/system/tomcat.service
```

下記を貼り付け。参照サイトと自分の環境を比較して、JAVA_HOMEのパスがちょっと違った。CATALINA_HOMEやBASEはTomcatがインストールされたディレクトリみたい。
ユニットファイルには↓を見ると色々と意味があるようだが、細かいところは追々勉強。
https://tex2e.github.io/blog/linux/create-my-systemd-service

```:ユニットファイル
[Unit]
Description=Apache Tomcat
After=network.target
[Service]
Type=forking
Environment=CATALINA_PID=/opt/tomcat-9/temp/tomcat9.pid
Environment=JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
Environment=CATALINA_HOME=/opt/tomcat-9
Environment=CATALINA_BASE=/opt/tomcat-9
Environment="CATALINA_OPTS=-Xms512m -Xmx1G"
Environment="JAVA_OPTS=-Dfile.encoding=UTF-8 -Djava.awt.headless=true"
ExecStart=/opt/tomcat-9/bin/startup.sh
ExecStop=/opt/tomcat-9/bin/shutdown.sh
User=tomcat
Group=tomcat
[Install]
WantedBy=multi-user.target
```

```:自動起動スタート
$sudo systemctl daemon-reload
$sudo systemctl start tomcat
$sudo systemctl enable tomcat
```

```:状態確認
$ systemctl status tomcat.service
● tomcat.service - Apache Tomcat
   Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; vendor preset: disabled)
   Active: active (running) since 水 2020-09-02 14:17:37 UTC; 18h ago
~省略〜
```
EC2のエンドポイントに:8080をつけると、Tomcatのページが表示される。
http://ec2********.ap-northeast-1.compute.amazonaws.com:8080

サービスは手動で開始・終了ができる。

```
$sudo service tomcat start
$sudo service tomcat stop
```

[Apacheのインストールでお世話になったサイト](https://qiita.com/hiren/items/2a4f1b55c99ebfb3fd08#apache)と上記手順を比べると、ユニットファイルの中身やシンボリックリンクの作成手順が無いなど微妙に違ったが、動きました。シンボリックリンクを作成する手順の方が、tomcatのバージョンを変えるケースなどにも対応できる。

#参考
ありがとうございました。
https://qiita.com/hiren/items/2a4f1b55c99ebfb3fd08#apache
https://medium.com/@ean.vafaei/how-to-install-tomcat-on-aws-ec2-instance-c10738a653f2