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を割り当てる等でも大丈夫です。
$ 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 にプリインストールされています。
$ 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のアップデートが可能です。
# pip install -U awscli
Java
Javaをインストールします。
今回はインストールするJavaのバージョンを指定します。
# yum install -y java-1.8.0-openjdk
# yum install -y java-1.8.0-openjdk-devel
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をインストールします。
# yum install -y httpd
Apacheがインストールされているか、バージョンの確認もあわせて行います。
$ httpd -v
Server version: Apache/2.4.33 ()
Server built: Jul 24 2018 19:30:38
起動及び動作確認を行います。
# systemctl start httpd.service
$ 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
# systemctl stop httpd.service
$ 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サービスも起動するよう設定します。
# 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
であれば自動起動が有効です。
$ 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 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を実行するユーザを作成します。
# useradd -s /sbin/nologin tomcat
Tomcat本体をダウンロードします。
※最新のバージョンのURLを確認の上で適宜変更して実行してください。
$ 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ファイルを解凍して配置します。
$ 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バージョンを変更する際にも設定に影響が少なくなるようにシンボリックリンクを作成します。
# ln -s /opt/apache-tomcat-9.0.10 /opt/apache-tomcat
# chown -h tomcat:tomcat /opt/apache-tomcat
一度シンボリックリンクを作成した後、将来Tomcatバージョンを変更する場合等には以下コマンドでシンボリックリンクのリンク先を変更してください。
$ ln -nfs [変更後のディレクトリのパス] /opt/apache-tomcat
展開したTomcat本体内に生成されるログファイルを他ミドルウェアと同階層のディレクトリ(/var/log 配下)にて参照できるようにシンボリックリンクを生成
# ln -s /opt/apache-tomcat/logs /var/log/tomcat
# chown -h tomcat:tomcat /var/log/tomcat
TomcatをOSにサービスとして登録する為、ルート権限でUnitを作成します。
# 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サービスが起動するよう設定します。
# 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
であれば自動起動が有効です。
$ 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のバージョンを確認します。
$ /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
起動及び動作確認を行います。
# systemctl start httpd.service
# systemctl start tomcat.service
$ 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
その他
以降のミドルウェアはインストールしなくてもAP,Webサーバとしては動作します。
EPELリポジトリ追加
後述の「monit」及び「cabextract」をインストールする為にEPELリポジトリを追加します。
EPELのrpmパッケージをインストールします。
# yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
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リポジトリ追加後インストールします。
$ yum info monit
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
Error: No matching Packages to list
追加したEPELリポジトリからmonitをインストールします。
# yum install -y 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サービスの起動確認を行います。
# systemctl start monit.service
$ 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サービスが起動するよう設定します。
$ 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
であれば自動起動が有効です。
$ 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リポジトリ追加後インストールします。
$ yum info cabextract
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
Error: No matching Packages to list
追加したEPELリポジトリからcabextractをインストールします。
# yum install -y cabextract
インストールしたcabextractとバージョンを合わせて確認します。
$ cabextract -v
cabextract version 1.5
redis
redisをインストールします。
# amazon-linux-extras install redis4.0
~(略)~
Is this ok [y/d/N]: y
$ redis-cli -v
redis-cli 4.0.10
RedisのElastiCacheクラスターを作成している場合は作成している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
参考
-
AWSCLI
Amazon Linux 2017 で AWS Command Line Interface をインストールする -
tomcat
Apache Tomcat 9 を CentOS 7 にインストールする手順
CentOS7にTomcat9をインストールする
シンボリックリンクの作成、更新、削除、権限変更をしました。
Tomcat 9.0.1をAWSのEC2(RHEL 7.4)へインストールし、Systemdで起動を管理する設定
Systemd メモ書き
参考メモ/CentOS7にOracle Java SE (Java8) と Tomcat8 をインストールしてsystemdで管理 -
monit
monitを使ってサーバの運用を自動化してみた -
Redis
Amazon ElastiCacheでRedis 4.0がサポートされていたので試してみた
Amazon ElastiCacheにEC2から接続できない → 送信中の暗号化が原因だった
redis-cliではなくAWS CLIを使う場合:EC2からElastiCache Redisノードに接続する