Apache
AWS
EC2
Tomcat
AmazonLinux2

AmazonLinux2でWebサーバ構築(Apache/Tomcat)

JavaアプリケーションのAP,Webサーバとして環境を構築します。
AmazonLinux2はCentOS7と似た感覚で操作が可能です。
また、インストールする各種ミドルウェアの設定は別稿で取り扱います。

環境情報(事前情報)

本稿ではルート権限が必要です。AMIデフォルトで作成済みの「ec2-user」ユーザならsudo出来ると思いますが、何らかの事情で使えない場合は適宜読み替えてください。

EC2インスタンスOS(AMI):Amazon Linux 2 AMI (HVM), SSD Volume Type 64 ビット (x86)
割当セキュリティグループ:インバウンド側TCP-22,80番ポート以外disable
Elastic IP及びインターネットゲートウェイを設定していない為、NATゲートウェイを用いてアウトバウンド側への通信は出来るように設定
HTTP通信を受け取る為、ELB(ALB)を設定※EC2にElastic IPを割り当てる等でも大丈夫です。

OS,カーネルバージョン確認
$ cat /etc/system-release
Amazon Linux 2

$ uname -a
Linux hogehuga.ap-northeast-1.compute.internal 4.14.59-68.43.amzn2.x86_64 #1 SMP Thu Aug 2 21:34:43 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

AWS CLI

AWS CLI は Amazon Linux AMI にプリインストールされています。

AWSCLIバージョン確認
$ aws --v
aws-cli/1.15.84 Python/2.7.14 Linux/4.14.59-68.43.amzn2.x86_64 botocore/1.10.83

参考:以下コマンドでAWS CLIのアップデートが可能です。

AWSCLIアップデート
# pip install -U awscli

Java

Javaをインストールします。
今回はインストールするJavaのバージョンを指定します。

Javaインストール
# yum install -y java-1.8.0-openjdk
# yum install -y java-1.8.0-openjdk-devel

Javaがインストールされているか、バージョンも合わせて確認します。

Java確認
$ java -version
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)

Apache

WebサービスとなるApacheをインストールします。

Apacheインストール
# yum install -y httpd

Apacheがインストールされているか、バージョンの確認もあわせて行います。

Apache確認
$ httpd -v
Server version: Apache/2.4.33 ()
Server built:   Jul 24 2018 19:30:38

起動及び動作確認を行います。

Apache起動
# systemctl start httpd.service
Apache起動確認
$ systemctl status httpd.service
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Wed 2018-08-15 17:02:38 JST; 15s ago
~(略)~

EC2インスタンス(もしくはELBを介して)にブラウザからアクセスし、Apacheのテストページが表示出来る事を確認します。
例)http://hogehuga.ap-northeast-1.elb.amazonaws.com
Apache.JPG

Apache停止
# systemctl stop httpd.service
Apache停止確認
$ systemctl status httpd.service
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: man:httpd.service(8)
~(略)~

EC2インスタンスが起動した際に自動でApacheサービスも起動するよう設定します。

Apache自動起動設定
# systemctl enable httpd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.

自動起動設定が反映されているか確認します。
Loaded(/usr/lib/systemd/system/httpd.service;の後がenabledであれば自動起動が有効です。

Apache自動起動設定確認
$ systemctl status httpd.service
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: man:httpd.service(8)
~(略)~

Tomcat

APサービスとなるTomcatをインストールします。

(2018/11/07現在)amzn2-coreのyumリポジトリでのTomcatバージョンが古いので、
Apache Tomcat 9 のダウンロードページからApache Tomcat 9 本体をダウンロードして使用します。
※Extras Libraryパッケージ群を利用する場合でもtomcat8.5となる

参考:yumリポジトリTomcatバージョン確認
$ yum info tomcat
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
13 packages excluded due to repository priority protections
Available Packages
Name        : tomcat
Arch        : noarch
Version     : 7.0.76
Release     : 3.amzn2
Size        : 90 k
Repo        : amzn2-core/2/x86_64
Summary     : Apache Servlet/JSP Engine, RI for Servlet 3.0/JSP 2.2 API
URL         : http://tomcat.apache.org/
License     : ASL 2.0
Description : Tomcat is the servlet container that is used in the official
            : Reference Implementation for the Java Servlet and JavaServer Pages
            : technologies. The Java Servlet and JavaServer Pages specifications
            : are developed by Sun under the Java Community Process.
            :
            : Tomcat is developed in an open and participatory environment and
            : released under the Apache Software License version 2.0. Tomcat is
            : intended to be a collaboration of the best-of-breed developers
            : from around the world.

$ amazon-linux-extras list | grep "tomcat"
 23  tomcat8.5                available    [ =8.5.31  =8.5.32 ]

Tomcatを実行するユーザを作成します。

Tomcatユーザの作成
# useradd -s /sbin/nologin tomcat

Tomcat本体をダウンロードします。
※最新のバージョンのURLを確認の上で適宜変更して実行してください。

Tomcatダウンロード
$ cd ~
$ wget http://ftp.meisei-u.ac.jp/mirror/apache/dist/tomcat/tomcat-9/v9.0.10/bin/apache-tomcat-9.0.10.tar.gz

ダウンロードしたtarファイルを解凍して配置します。

Tomcatを解凍して配置
$ tar -xzvf ~/apache-tomcat-9.0.10.tar.gz
# mv ~/apache-tomcat-9.0.10 /opt
# chown -R tomcat:tomcat /opt/apache-tomcat-9.0.10

yumを用いたインストールを行っていない為、将来手動でTomcatバージョンを変更する際にも設定に影響が少なくなるようにシンボリックリンクを作成します。

Tomcatのシンボリックリンク作成
# ln -s /opt/apache-tomcat-9.0.10 /opt/apache-tomcat
# chown -h tomcat:tomcat /opt/apache-tomcat

一度シンボリックリンクを作成した後、将来Tomcatバージョンを変更する場合等には以下コマンドでシンボリックリンクのリンク先を変更してください。

apache-tomcatシンボリックリンクのリンク先変更
$ ln -nfs [変更後のディレクトリのパス] /opt/apache-tomcat

展開したTomcat本体内に生成されるログファイルを他ミドルウェアと同階層のディレクトリ(/var/log 配下)にて参照できるようにシンボリックリンクを生成

Tomcatログシンボリックリンク作成
# ln -s /opt/apache-tomcat/logs /var/log/tomcat
# chown -h tomcat:tomcat /var/log/tomcat

TomcatをOSにサービスとして登録する為、ルート権限でUnitを作成します。

/usr/lib/systemd/system/tomcat.service(新規作成)
# Systemd unit file for default tomcat
#
# To create clones of this service:
# DO NOTHING, use tomcat@.service instead.

[Unit]
Description=Apache Tomcat Web Application Container
After=syslog.target network.target

[Service]
Type=oneshot
PIDFile=/opt/apache-tomcat/tomcat.pid
RemainAfterExit=yes
#EnvironmentFile=/etc/tomcat/tomcat.conf
#Environment="NAME="
#EnvironmentFile=-/etc/sysconfig/tomcat
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
SuccessExitStatus=143
User=tomcat
Group=tomcat

[Install]
WantedBy=multi-user.target

EC2インスタンスが起動した際に自動でTomcatサービスが起動するよう設定します。

Tomcat自動起動設定
# systemctl enable tomcat.service
Created symlink from /Created symlink from /etc/systemd/system/multi-user.target.wants/tomcat.service to /usr/lib/systemd/system/tomcat.service.

自動起動設定が反映されているか確認します。
Loaded(/usr/lib/systemd/system/tomcat.service;の後がenabledであれば自動起動が有効です。

Tomcat自動起動設定確認
$ systemctl status tomcat.service
● tomcat.service - Apache Tomcat Web Application Container
   Loaded: loaded (/usr/lib/systemd/system/tomcat.service; enabled; vendor preset: disabled)
   Active: inactive (dead)
~(略)~

ダウンロードしたTomcatのバージョンを確認します。

Tomcatバージョン確認
$ /opt/apache-tomcat/bin/version.sh
Using CATALINA_BASE:   /opt/apache-tomcat
Using CATALINA_HOME:   /opt/apache-tomcat
Using CATALINA_TMPDIR: /opt/apache-tomcat/temp
Using JRE_HOME:        /
Using CLASSPATH:       /opt/apache-tomcat/bin/bootstrap.jar:/opt/apache-tomcat/bin/tomcat-juli.jar
Server version: Apache Tomcat/9.0.10
Server built:   Jun 20 2018 17:32:21 UTC
Server number:  9.0.10.0
OS Name:        Linux
OS Version:     4.14.62-70.117.amzn2.x86_64
Architecture:   amd64
JVM Version:    1.8.0_181-b13
JVM Vendor:     Oracle Corporation

起動及び動作確認を行います。

Tomcat起動(先にApacheを起動)
# systemctl start httpd.service
# systemctl start tomcat.service
Tomcat起動確認
$ systemctl status tomcat.service
● tomcat.service - Apache Tomcat Web Application Container
   Loaded: loaded (/usr/lib/systemd/system/tomcat.service; enabled; vendor preset: disabled)
   Active: active (exited) since Thu 2018-08-16 18:14:51 JST; 6min ago
  Process: 22449 ExecStart=/opt/apache-tomcat/bin/startup.sh (code=exited, status=0/SUCCESS)
 Main PID: 22449 (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/tomcat.service
           mq22464 /usr/bin/java -Djava.util.logging.config.file=/opt/apache-...
~(略)~

EC2インスタンス(もしくはELBを介して)にブラウザからアクセスし、Tomcatのページが表示出来る事を確認します。
この時のみで良いのでセキュリティグループのインバウンド側8080番ポートを許可してください。
例)http://hogehuga.ap-northeast-1.elb.amazonaws.com:8080
Tomcat.JPG

その他

以降のミドルウェアはインストールしなくてもAP,Webサーバとしては動作します。

EPELリポジトリ追加

後述の「monit」及び「cabextract」をインストールする為にEPELリポジトリを追加します。
EPELのrpmパッケージをインストールします。

EPELrpmパッケージをインストール
# yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

EPELリポジトリが有効化できているか確認します。

EPELリポジトリ有効化確認
# yum repolist all
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
160 packages excluded due to repository priority protections
repo id                              repo name               status
!amzn2-core/2/x86_64                 Amazon Linux 2 core rep enabled:      9,216
amzn2-core-debuginfo/2/x86_64        Amazon Linux 2 core rep disabled
amzn2-core-source/2                  Amazon Linux 2 core rep disabled
epel/x86_64                          Extra Packages for Ente enabled: 12,508+147
epel-debuginfo/x86_64                Extra Packages for Ente disabled
epel-source/x86_64                   Extra Packages for Ente disabled
epel-testing/x86_64                  Extra Packages for Ente disabled
epel-testing-debuginfo/x86_64        Extra Packages for Ente disabled
epel-testing-source/x86_64           Extra Packages for Ente disabled
repolist: 22,252

monit

amzn2-coreのyumリストに存在しない為、EPELリポジトリ追加後インストールします。

EPELリポジトリ追加前yumリポジトリmonit確認
$ yum info monit
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
Error: No matching Packages to list

追加したEPELリポジトリからmonitをインストールします。

monitインストール
# yum install -y monit

インストールしたmonitとバージョンを合わせて確認します。

monitバージョン確認
$ monit -V
This is Monit version 5.25.1
Built with ssl, with ipv6, with compression, with pam and with large files
Copyright (C) 2001-2017 Tildeslash Ltd. All Rights Reserved.

monitサービスの起動確認を行います。

monit起動
# systemctl start monit.service
monit起動確認
$ systemctl status monit.service
● monit.service - Pro-active monitoring utility for unix systems
   Loaded: loaded (/usr/lib/systemd/system/monit.service; disabled; vendor preset: disabled)
   Active: active (running) since Fri 2018-08-31 12:30:45 JST; 4s ago
~(略)~

EC2インスタンスが起動した際に自動でmonitサービスが起動するよう設定します。

monit自動起動設定
$ sudo systemctl enable monit.service
Created symlink from /etc/systemd/system/multi-user.target.wants/monit.service to /usr/lib/systemd/system/monit.service.

設定反映されているか確認します。
Loaded(/usr/lib/systemd/system/monit.service;の後がenabledであれば自動起動が有効です。

monit自動起動設定確認
$ systemctl status monit.service
● monit.service - Pro-active monitoring utility for unix systems
   Loaded: loaded (/usr/lib/systemd/system/monit.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2018-08-31 12:30:45 JST; 3min 21s ago
~(略)~

cabextract

amzn2-coreのyumリストに存在しない為、EPELリポジトリ追加後インストールします。

EPELリポジトリ追加前yumリポジトリcabextract確認
$ yum info cabextract
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
Error: No matching Packages to list

追加したEPELリポジトリからcabextractをインストールします。

cabextractインストール
# yum install -y cabextract

インストールしたcabextractとバージョンを合わせて確認します。

cabextractバージョン確認
$ cabextract -v
cabextract version 1.5

redis

redisをインストールします。

redisインストール
# amazon-linux-extras install redis4.0
~(略)~
Is this ok [y/d/N]: y
redisバージョン確認
$ redis-cli -v
redis-cli 4.0.10

RedisのElastiCacheクラスターを作成している場合は作成しているRedisへの接続が可能です。
※ただし、クラスタ作成時に「送信中の暗号化」を「はい」にしていると接続はできますが、コマンドはエラーになります。

redisへ接続し、情報確認
$ redis-cli -h [ElastiCacheエンドポイント] -p [ElastiCacheポート番号]
$ redis-cli -h hogehuga.apne1.cache.amazonaws.com -p 6379

> info
# Server
redis_version:4.0.10
redis_git_sha1:0
redis_git_dirty:0
redis_build_id:0
redis_mode:standalone
os:Amazon ElastiCache
arch_bits:64
~(略)~

(ElastiCacheで送信中の暗号化を行っている場合はエラーになります。)
> info
Error: Connection reset by peer

参考