0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Web3層システムをAWSで作ってみる #3(APサーバ編)

Last updated at Posted at 2021-05-02

リハビリ&社内勉強用のために作成します。第3弾。

#用意するもの
・PC
・インターネット
TeraTarm
WinSCP ※ファイル転送時

#用語
EC2(EC2インスタンス)
AWSにおけるIaasのサーバ。#2で作成したEC2を流用します。
Tomcat
APサーバ用のソフトウェア(MW)。
OpenJDK
Javaの実行環境諸々を詰め込んだパッケージ。JREとか色々あるけど違いはここ参照。

#ゴール
Webサーバと同じサーバ内にTomcatをインストールして、Apacheと連携できることを確認する。
スライド7.JPG

#手順
##1.OpenJDKインストール
Javaの実行環境であるOpenJDKをインストールします。ちなみにTomcatとの互換性があるのでTomcatを入れる際は注意。

[ec2-user@ip-10-0-1-236 opt]$ yum search java-
#javaのパッケージ検索。今回は1.8が新しそうだったので、それをインストールすることに。
[ec2-user@ip-10-0-1-236 opt]$ sudo yum -y install java-1.8.0-openjdk
#Complite!となればOK
[ec2-user@ip-10-0-1-236 opt]$ sudo yum -y install java-1.8.0-openjdk-devel
#Complite!となればOK
#開発用環境パッケージ、ついでにインストール
[ec2-user@ip-10-0-1-236 opt]$ java -version
openjdk version "1.8.0_282"
OpenJDK Runtime Environment (build 1.8.0_282-b08)
OpenJDK 64-Bit Server VM (build 25.282-b08, mixed mode)
#バージョン確認完了

##2.Tomcatインストール
Apacheはインストール時に自動でユーザ作成されたが、Tomcatは自分で作成する。

[ec2-user@ip-10-0-1-236 html]$ sudo useradd -s /sbin/nologin tomcat
#Tomcatを動かすための専用ユーザを作成。
#MWが利用する、通常利用しない(ログインできない)ユーザを作成する。

[ec2-user@ip-10-0-1-236 html]$ sudo cat /etc/passwd | grep tomcat
tomcat:x:1001:1001::/home/tomcat:/sbin/nologin
#ユーザができていることを確認。

Tomcatをインストール。Apache/Tomcatサイトの「Download」からインストールしたいTomcatのページを選んでCoreの「tar.gz」ファイルを右クリックし「リンクのアドレスをコピー」し、そのリンクからインストールする。Tomcat10は最近出たばかりなのでTomcat9にて。

[ec2-user@ip-10-0-1-236 /]$ sudo curl -O https://downloads.apache.org/tomcat/tomcat-9/v9.0.45/bin/apache-tomcat-9.0.45.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   264  100   264    0     0    484      0 --:--:-- --:--:-- --:--:--   484
#ファイル取得完了。

[ec2-user@ip-10-0-1-236 /]$ sudo tar -zxvf apache-tomcat-9.0.45.tar.gz
#ファイル展開(解凍)。
#tarコマンドで圧縮・展開する。

[ec2-user@ip-10-0-1-236 /]$ sudo mv apache-tomcat-9.0.45 /opt
#追加アプリケーションを置くためのディレクトリ「/opt」にファイルを移動。
#mv 移動元 移動先 でファイル移動。

[ec2-user@ip-10-0-1-236 /]$ ls -ltr /opt
drwxr-xr-x 2 root root   6 Aug 16  2018 rh
drwxr-xr-x 4 root root  33 Apr 24 09:38 aws
drwxr-xr-x 9 root root 220 May  2 14:55 apache-tomcat-9.0.45
#移動していることを確認。

[ec2-user@ip-10-0-1-236 /]$ sudo chown -R tomcat:tomcat /opt/apache-tomcat-9.0.45
#tomcatユーザで動かしてもらうので権限を変更して

[ec2-user@ip-10-0-1-236 /]$ ls -ltr /opt
total 0
drwxr-xr-x 2 root   root     6 Aug 16  2018 rh
drwxr-xr-x 4 root   root    33 Apr 24 09:38 aws
drwxr-xr-x 9 tomcat tomcat 220 May  2 14:55 apache-tomcat-9.0.45
#変更状態を確認。

##3.Tomcat起動設定(飛ばしてもOK)
続いてApache同様にsystemコマンドで落とし上げできるように設定する。Apacheと異なり手動で実行ファイルを配備しているので、このあたりの作業も自分でやる必要あり。やらなくても困らないので興味のある人だけ。

[ec2-user@ip-10-0-1-236 /]$ sudo touch /etc/systemd/system/tomcat.service

[ec2-user@ip-10-0-1-236 /]$ sudo vi /etc/systemd/system/tomcat.service
#内容は下記参照

[ec2-user@ip-10-0-1-236 /]$ sudo ls -ltr /etc/systemd/system/tomcat.service
-rw-r--r-- 1 root root 406 May  2 15:12 /etc/systemd/system/tomcat.service

[ec2-user@ip-10-0-1-236 /]$ sudo chmod 755 /etc/systemd/system/tomcat.service
#他のユーザへも実行権限を付与。

[ec2-user@ip-10-0-1-236 /]$ sudo ls -ltr /etc/systemd/system/tomcat.service
-rwxr-xr-x 1 root root 406 May  2 15:12 /etc/systemd/system/tomcat.service

[ec2-user@ip-10-0-1-236 /]$ sudo systemctl enable tomcat
Created symlink from /etc/systemd/system/multi-user.target.wants/tomcat.service to /etc/systemd/system/tomcat.service.
#systemctlでの自動起動を有効化

service設定は他サイトも試したのですがうまくいかず、試行錯誤して以下になりました。
(root設定は良くないと分かりつつ、権限エラーを超えられなかった・・・)

tomcat.service
[ec2-user@ip-10-0-1-236 opt]$ sudo cat /etc/systemd/system/tomcat.service
[Unit]
Description=Apache Tomcat 9
After=network.target

[Service]
Type=oneshot
ExecStart=/opt/apache-tomcat-9.0.45/bin/startup.sh
ExecStop=/opt/apache-tomcat-9.0.45/bin/shutdown.sh
RemainAfterExit=yes
User=root
Group=root

[Install]
WantedBy=multi-user.target

設定は終わったのでTomcatの起動確認

[ec2-user@ip-10-0-1-236 opt]$ sudo systemctl stop tomcat
[ec2-user@ip-10-0-1-236 opt]$ sudo systemctl status tomcat
● tomcat.service - Apache Tomcat 9
   Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; vendor preset: disabled)
   Active: inactive (dead) since Sun 2021-05-02 16:29:47 UTC; 18min ago
  Process: 5294 ExecStop=/opt/apache-tomcat-9.0.45/bin/shutdown.sh (code=exited, status=0/SUCCESS)
  Process: 5258 ExecStart=/opt/apache-tomcat-9.0.45/bin/startup.sh (code=exited, status=0/SUCCESS)
 Main PID: 5258 (code=exited, status=0/SUCCESS)

May 02 16:29:36 ip-10-0-1-236.us-west-2.compute.internal systemd[1]: Starting Apache Tomcat 9...
May 02 16:29:36 ip-10-0-1-236.us-west-2.compute.internal startup.sh[5258]: Tomcat started.
May 02 16:29:36 ip-10-0-1-236.us-west-2.compute.internal systemd[1]: Started Apache Tomcat 9.
May 02 16:29:47 ip-10-0-1-236.us-west-2.compute.internal systemd[1]: Stopping Apache Tomcat 9...
May 02 16:29:47 ip-10-0-1-236.us-west-2.compute.internal systemd[1]: Stopped Apache Tomcat 9.
[ec2-user@ip-10-0-1-236 opt]$
[ec2-user@ip-10-0-1-236 opt]$ sudo systemctl start tomcat
[ec2-user@ip-10-0-1-236 opt]$ sudo systemctl status tomcat
● tomcat.service - Apache Tomcat 9
   Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; vendor preset: disabled)
   Active: active (exited) since Sun 2021-05-02 16:47:57 UTC; 1s ago
  Process: 5294 ExecStop=/opt/apache-tomcat-9.0.45/bin/shutdown.sh (code=exited, status=0/SUCCESS)
  Process: 5506 ExecStart=/opt/apache-tomcat-9.0.45/bin/startup.sh (code=exited, status=0/SUCCESS)
 Main PID: 5506 (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/tomcat.service
           mq5520 /usr/bin/java -Djava.util.logging.config.file=/opt/apache-tomcat-9.0.45/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.hand...

May 02 16:47:57 ip-10-0-1-236.us-west-2.compute.internal systemd[1]: Starting Apache Tomcat 9...
May 02 16:47:57 ip-10-0-1-236.us-west-2.compute.internal startup.sh[5506]: Tomcat started.
May 02 16:47:57 ip-10-0-1-236.us-west-2.compute.internal systemd[1]: Started Apache Tomcat 9.

##4.Tomcatへのアクセス確認
実はTomcatはWebサーバ用のMWとしての機能(というかApache)も内包しています。
ということでアクセスしてみましょう。

[ec2-user@ip-10-0-1-236 opt]$ sudo netstat -anp | grep java
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      5418/java
tcp6       0      0 :::8080                 :::*                    LISTEN      5418/java
#Tomcatのポートは8080。

[ec2-user@ip-10-0-1-236 opt]$ curl http://localhost:8080
#curlコマンドで8080ポートを打つとTomcatのトップページが表示されるはず

「https://+グローバルIP:8080」でトップページが表示される。
無題3.png

##5.ApacheとTomcatの連携
次にApacheとTomcatを連携します。今までApacheは80番、Tomcatは8080番でWebブラウザからのアクセス(HTTP)を受けていました。ここではWebブラウザからのアクセスと同様に、ApacheからTomcatのポートへ接続させるよう設定します。
まず、以下のファイルを見てみます。

[ec2-user@ip-10-0-1-236 opt]$ sudo less /opt/apache-tomcat-9.0.45/conf/server.xml
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
   ~略~
    <Connector protocol="AJP/1.3"
               address="::1"
               port="8009"
               redirectPort="8443" />
    -->
#lessコマンドでメッセージやテキストファイルを1画面ずつ表示できます。/で検索も可能です。

上記を見ると、HTTPは8080ポートで受けていることが分かります。一方でTomcatと連携するためのにはAJPプロトコルというプロトコルが必要です。見てみると8009ポートであることが分かります。8009ポートの設定がコメントアウト(<!-- -->で挟まれてる)されていればコメントアウトを削除しましょう。

上記の設定を踏まえて、まずはApacheが8009ポートに接続するように設定しましょう。

[ec2-user@ip-10-0-1-236 opt]$ sudo cat /etc/httpd/conf/httpd.conf | grep Include
Include conf.modules.d/*.conf
IncludeOptional conf.d/*.conf

Apacheのモジュール(部品)はconf.modules.d/にあるようなので、中身を見てみます。

[ec2-user@ip-10-0-1-236 opt]$ sudo ls /etc/httpd/conf.modules.d
00-base.conf  00-lua.conf  00-optional.conf  00-systemd.conf  10-h2.conf        README
00-dav.conf   00-mpm.conf  00-proxy.conf     01-cgi.conf      10-proxy_h2.conf
[ec2-user@ip-10-0-1-236 opt]$ sudo cat /etc/httpd/conf.modules.d/00-proxy.conf
# This file configures all the proxy modules:
LoadModule proxy_module modules/mod_proxy.so
LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_express_module modules/mod_proxy_express.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
LoadModule proxy_fdpass_module modules/mod_proxy_fdpass.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_hcheck_module modules/mod_proxy_hcheck.so
LoadModule proxy_scgi_module modules/mod_proxy_scgi.so
LoadModule proxy_uwsgi_module modules/mod_proxy_uwsgi.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so

今回ApacheはTomcatのプロキシとして動くので、プロキシのモジュールを見てみます。AJPに利用するmod_proxy_ajpとmod_proxy(mod_proxy_ajpの親玉)がモジュールに含まれていればOKです。

次に、mod_proxy_ajpモジュールが8009ポートに行くように設定を入れておきます。

sudo vi /etc/httpd/conf.d/proxy-ajp.conf
proxy-ajp.conf
<Location /docs/>
  ProxyPass ajp://127.0.0.1:8009/docs/
</Location>
<Location /itskill_bbs/>
  ProxyPass ajp://127.0.0.1:8009/itskill_bbs/
</Location>

ここで、127.0.0.1は自分自身を指す特別なIPアドレス(ローカル・ループバック・アドレス)です。今回はApacheと同じサーバにTomcatがいるので、自分自身のIPの8009ポートを指定しています。<Location ・・・>にはhtmlに表示するPATHを、127.0.0.1:8009・・・には読みこみたいwarファイル名(warが自動展開されてディレクトリ名になるので、そのディレクトリ名)を入力します。docsはデフォルトで存在するので以下のURLでTomcatのページが出ればOK、80番ポートでアクセスしていることを確認できます。
http://[グローバルIP]/docs

##6.warのデプロイ
最後にアプリケーションファイル(warファイル)を配備(デプロイ)します。
ファイル転送は慣れているWinSCPを利用しました。ec2-userでも権限のある/tmpに配備しmvするのがお勧めです。
image.png

[ec2-user@ip-10-0-1-236 tmp]$ sudo mv /tmp/itskill_bbs.war /opt/apache-tomcat-9.0.45/webapps

#備忘
・Tomcatのトップページが全然開かないと思ったらSG設定で8080ポート閉じてたせいだった・・・curlでローカル内で叩いたら上手くいくのに気づきました。

#参考
Linux(CentOS)にApacheとTomcatをインストールしてJavaアプリをデプロイするまで
Linuxにおける色々なユーザー管理コマンド
[Linux]ファイルの圧縮、解凍方法
Apache についてのまとめ
127.0.0.1とlocalhostと0.0.0.0の違い

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?