#構築環境
Iaas:AWS EC2
OS:RHEL-7.6_HVM_GA-20190128-x86_64-0-Hourly2-GP2(コミュニティ AMI)
Tomcat:Tomcat8.5.61
Java:openjdk-8u41-b04
#構築方針について
Tomcatをインストールする方法はyumコマンドやソースからインストール等、複数の方法があります。
今回はバージョンの選択が容易なソースからのインストールを実施します。
#Tomcat管理用のユーザーを作成
Tomcat管理用に専用のユーザーを作成します。
###1.ユーザーを作成する
ユーザーをrootに切り替え、useraddコマンドでユーザーを追加します。
追加出来たらpasswdコマンドでユーザーのパスワードも指定します。
$ sudo su -
# useradd webuser
# passwd webuser
Changing password for user webuser.
New password:
BAD PASSWORD: The password contains the user name in some form
Retype new password:
passwd: all authentication tokens updated successfully.
###2.sudoの実行権限を付与する
作成したwebuserでroot権限実行(sudo)が出来るように設定します。
# visudo
以下を追記します
webuser ALL=(ALL) NOPASSWD: ALL
###3.以降はwebuserに切り替えて設定する
ユーザーをrootから元に戻し、webuserに切り替えます。
# exit
$ su - webuser
パスワード:
#tarファイルを入手
###1.インストールしたいバージョンのtarファイルのURLを確認する
下記リンクでバージョン別にtarファイルをダウンロード出来ます。
インストールしたいバージョンのtarファイルのリンクをブラウザの開発者ツール等を用いてURLを取得しておきます。
■Tomcatのtarファイルをダウンロード出来るサイト
https://archive.apache.org/dist/tomcat/
GUI環境のLinuxやWindows環境にインストールしたい場合はこのサイトから直接ダウンロードすればOKです。
今回はCUIのLinux環境から直接ダウンロードしたいのでtarファイルのURLを確認のみ行います。
■javaのtarファイルをダウンロード出来るサイト
https://jdk.java.net/java-se-ri/8-MR3
###2.Tomcatとjavaをダウンロード
tomcatを動作させるためにはjavaが必要になるため、tomcatとjavaのtarファイルをそれぞれ取得します。
$ curl -OL https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.61/bin/apache-tomcat-8.5.61.tar.gz
$ curl -OL https://download.java.net/openjdk/jdk8u41/ri/openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz
#javaをインストール
###1.tarファイルの解凍・配置
ダウンロードしたtarファイルを展開し、配置します。
$ mkdir ~/java && tar xvf /home/webuser/openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz -C ~/java --strip-components 1
$ sudo mv ~/java /usr/local/java
###2.PATHを通す
javaコマンドが使用出来るように 環境変数を設定します。
$ sudo vi /etc/profile
#以下を追記
export JAVA_HOME=/usr/local/java
export PATH=$PATH:$JAVA_HOME/bin
環境変数を設定したらsourceコマンドで設定を再読込みします。
source /etc/profile
#Tomcatをセットアップ
###1.tarファイルの解凍・配置する
圧縮されたtarファイルを解凍し、インストール先の階層に配置します。
$ tar xvf ~/apache-tomcat-8.5.61.tar.gz
$ sudo mv ~/apache-tomcat-8.5.61 /opt
###2.配置先ディレクトリの所有者を変更
# chown -R webuser:webuser /opt/apache-tomcat-8.5.61
#設定値の変更
###1.web.xmlを設定する
cookieのHttpOnly属性をtrueに設定し、Cookieの範囲をHTTPリクエストに制限します。
これにより、HTTPテキスト内のスクリプトからCookieにアクセスを不可にします。
$ sudo vi /opt/apache-tomcat-8.5.61/conf/web.xml
cookie-configを追加する。
<session-config>
<session-timeout>30</session-timeout>
<cookie-config>
<http-only>true</http-only>
</cookie-config>
</session-config>
###2.server.xmを設定する
Tomcatがリクエストを受け取る方式を設定します。
クライアントからリクエストを受け取る際、Tomcatが直接受け取るのではなく、Apache Http Server等のWebサーバを経由することが多いと思います。
その場合、httpまたはajpプロトコルを用いてwebサーバ-Tomcat間を連携します。
$ sudo vi /opt/apache-tomcat-8.5.61/conf/server.xml
<!-- httpプロトコルで受け取る場合、以下をコメントアウトする -->
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" maxThreads="100" minSpareThreads="5" acceptCount="50"/>
<!-- ajpプロトコルで受け取る場合、以下をコメントアウトする -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" maxThreads="100" minSpareThreads="5" acceptCount="50"/>
#warファイルをデプロイ
デフォルト設定の場合、Tomcat内のwebappsディレクトリ内にwarファイルを配置します。
Tomcatを起動すると自動的にwarファイルを展開してくれます。
以下ではsample.warを配置した場合
$ mv sample.war /opt/apache-tomcat-8.5.61/webapps/
#Systemdの設定
サーバ起動と同時に自動起動するようにSystemdで管理するように設定します。
###1.ユニット定義ファイルを作成する
Tomcat管理用にユニットファイルを作成します。
CATALINA_HOMEなど、環境変数の設定が必要な場合、Environmentを使用して設定します。
$ sudo vi /etc/systemd/system/tomcat.service
[Unit]
Description=Apache Tomcat 8
After=network.target
[Service]
User=webuser
Group=webuser
Type=oneshot
PIDFile=/opt/apache-tomcat-8.5.61/tomcat.pid
RemainAfterExit=yes
Environment=JAVA_HOME=/usr/local/java/
Environment=JRE_HOME=/usr/local/java/jre
Environment=CATALINA_HOME=/opt/apache-tomcat-8.5.61
Environment=CATALINA_BASE=/opt/apache-tomcat-8.5.61
Environment='CATALINA_OPTS=-server -Xms1024M -Xmx1024M -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=512M'
ExecStart=/opt/apache-tomcat-8.5.61/bin/startup.sh
ExecStop=/opt/apache-tomcat-8.5.61/bin/shutdown.sh
ExecReStart=/opt/apache-tomcat-8.5.61/bin/shutdown.sh;/opt/apache-tomcat-8.5.61/bin/startup.sh
[Install]
WantedBy=multi-user.target
2.サーバを起動時にTomcatが自動起動されるように設定する
$ sudo systemctl enable tomcat
3.Systemdで起動と停止する
systemctlコマンドで起動します。
$ sudo systemctl start tomcat
ステータスを確認し、active (running)となっていればOKです。
$ sudo systemctl status tomcat
● tomcat.service - Apache Tomcat 8
Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; vendor preset: disabled)
Active: active (exited) since 土 2021-02-13 09:51:50 UTC; 9min ago
Process: 3745 ExecStart=/opt/apache-tomcat-8.5.61/bin/startup.sh (code=exited, status=0/SUCCESS)
Main PID: 3745 (code=exited, status=0/SUCCESS)
CGroup: /system.slice/tomcat.service
└─3759 /usr/local/java/jre/bin/java -Djava.util.logging.config.file=/opt/apache-tomcat-8.5.61/conf/logging.properties -Djava.util.logging.manager=org...
2月 13 09:51:50 ip-172-31-37-163.ap-northeast-1.compute.internal systemd[1]: Starting Apache Tomcat 8...
2月 13 09:51:50 ip-172-31-37-163.ap-northeast-1.compute.internal systemd[1]: Started Apache Tomcat 8.
停止したいときはstopで停止します。
$ sudo systemctl stop tomcat
もし、ユニットファイルの内容を変更した場合、設定ファイルの再読込を実施してから操作します。
$ sudo systemctl daemon-reload
#終わりに
上記手順でアプリサーバにアクセス出来れば成功です。
#以下のエラーが発生した場合と対処法
###1.ajp設定で起動するとエラーが発生する
Caused by: java.lang.IllegalArgumentException: The AJP Connector is configured with secretRequired="true" but the secret attribute is either null or "". This combination is not valid.
上記エラーが発生する場合、server.xmlにsecretRequired="false"を追加すればエラーは解消される。
<Connector protocol="AJP/1.3"
address="::1"
secretRequired="false"
port="8009"
redirectPort="8443" />