0
1

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 1 year has passed since last update.

AWSでWEB3層構造の構築③(WEBサーバ、APサーバの構築と連携)

Last updated at Posted at 2023-01-25

AWSでWEB3層構造の構築にチャレンジしてみました。

前回の記事の続きです。

作りたい環境は以下の図の通りです。

スクリーンショット 2023-01-24 20.25.33.png

1. WEBサーバの構築

1-(1). Nginx のインストール

ローカルホストからWEBサーバへSSH接続し、WEBサーバを構築していきます。

まずはNginxをインストールしますが、一般的に使われる yum コマンドではなく、amazon-linux-extras コマンドを使用してインストールしていきます

WEBサーバ
$ amazon-linux-extras list | grep nginx
 38  nginx1                   available    [ =stable ]
インストール可能なパッケージを取得しました。
nginx1という名前で登録されているのでこれをインストールします。

$ sudo amazon-linux-extras install nginx1
Is this ok [y/d/N]: と表示されたら、y を入力するとインストール完了です。

$ sudo nginx -v
nginx version: nginx/1.22.1
バージョンを確認しました。

$ sudo systemctl enable nginx
WEBサーバへログインした際の、Nginx自動起動を有効化します。

$ sudo systemctl start nginx
Nginx起動

$ sudo systemctl status nginx
● nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
   Active: active (running) since 火 2023-01-24 14:53:45 UTC; 8s ago
(以下略)

ステータス確認を確認したところ、active(running)となっているので、Nginxは起動しています。
WEBブラウザで 「http://WEBサーバのパブリックアドレス」 を入力し、Nginxのテストページが表示されることを確認しました。

スクリーンショット 2023-01-24 23.59.01.png

1-(2). Squid のインストール

APサーバとDBサーバに必要なパッケージをインストールするために、yumコマンドやwgetコマンドを使用したいのですが、APサーバとDBサーバはプライベートサブネット下にあるため、インターネットに接続できていません。

そこで、以下の手順でWEBサーバにSquidというソフトウェアをインストールし、WEBサーバにプロキシさせます。
※プロキシさせるとは、クライアントであるAPサーバとDBサーバの代わりに、WEBサーバを使ってインターネットにアクセスさせるという意味です。

WEBサーバ
$ sudo yum -y install squid

$ squid -v
Squid Cache: Version 3.5.20
バージョンを確認しました。

$ sudo vi /etc/squid/squid.conf
squidの設定ファイルの一番下に以下の設定値を追加します。

http_access allow all

“http_access allow all”と設定することで、全ての通信を許可することができます。
※本来であればセキュリティ上通信する相手のみ許可しますが、ここら辺の理解が足りないので次回はセキュリティを意識して構築したい。

続いてSquidの起動設定を行います。

WEBサーバ
$ sudo systemctl enable squid
$ sudo systemctl restart squid
Squidの自動起動設定を行い、リスタートします。

$ sudo lsof -i:3128
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
squid   4128 squid   11u  IPv6  88842      0t0  TCP *:squid (LISTEN)
Squidがデフォルトのポート3128を使用していることを確認しました。

続いてクライアント側のAPサーバ、DBサーバにログインし、セットアップを行います。

APサーバ、DBサーバそれぞれの設定ファイル(/etc/yum.conf)にプロキシの設定を記入し、yumコマンドとwgetコマンドを使える状態にします。

APサーバ、DBサーバ
まずはyumコマンドの設定から
$ sudo vi /etc/yum.conf

以下を追記

proxy=http://<WEBサーバのプライベートIPアドレス>:3128

続いてwgetコマンドの設定

$ sudo vi /etc/wgetrc

http_proxy=http://<WEBサーバのプライベートIPアドレス>:3128
https_proxy=http://<WEBサーバのプライベートIPアドレス>:3128

設定ファイル内のWEBサーバのアドレスは、パブリックIPアドレスではなく、プライベートIPアドレスを指定してください。同じVPC内でEC2がそれぞれやり取りする際には、プライベートIPアドレスを使うためです。

続いて、AWSインスタンスの操作に移ります。
以下のとおり、WEBサーバに設定しているセキュリティグループに、Squidのデフォルトポートである3128番を追加します。

①左側のタブからセキュリティグループを選択
②WEBサーバに設定しているセキュリティグループを選択
③インバウンドのルールを編集
④Squidのデフォルトポートである3128番を追加

スクリーンショット 2023-01-25 11.02.01.png

これで、APサーバとDBサーバでyumコマンド及びwgetコマンドを使用できるようになりました。

2. APサーバの構築

ローカルホストからAPサーバへSSH接続し、APサーバを構築していきます。

Tomcatをインストールする前に、Tomcatの動作の前提となる環境を作ります。
TomcatはJavaで作られているため実行環境であるOpenJDK (Java SE Development Kit) が必要です。

OpenJDKはTomcatとの互換性があるので、以下のURLでインストールするTomcatとOpenJDKの互換性を考慮します。

APサーバ
まずはインストール可能なjavaを検索します。

$ sudo yum info java-*-openjdk

$ sudo yum -y install java-1.8.0-openjdk.x86_64 
Complete!

$ java -version
openjdk version "1.8.0_342"
OpenJDK Runtime Environment (build 1.8.0_342-b07)
OpenJDK 64-Bit Server VM (build 25.342-b07, mixed mode)

Tomcatを動かすための専用ユーザとしてtomcatを追加します。

APサーバ
$ sudo useradd -s /sbin/nologin tomcat

$ cat /etc/passwd | grep tomcat
tomcat:x:1001:1001::/home/tomcat:/sbin/nologin
ユーザができていることを確認

下記のURLからインストールしたいTomcatのページを選んでCoreの「tar.gz」ファイルを右クリックでアドレスをコピーし、インストールします。

APサーバ
$ sudo wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.71/bin/apache-tomcat-9.0.71.tar.gz

$ sudo tar -zxvf apache-tomcat-9.0.71.tar.gz
ファイルを解凍します

$ sudo mv apache-tomcat-9.0.71 /opt
#追加アプリケーションを置くためのディレクトリ「/opt」にファイルを移動。
 
$ sudo chown -R tomcat:tomcat /opt/apache-tomcat-9.0.71
ユーザーtomcatがTomcatを起動できるように、所有者を変更

$ sudo ln -s /opt/apache-tomcat-9.0.71 /opt/tomcat

※シンボリックリンクを付けておくことにより、Tomcatのバージョンアップの際に関連ファイルを修正することなくシンボリックリンクの修正だけで済みます。

続いてTomcatをsystemctlコマンドで起動・停止できるよう登録します。
ユニットファイル/etc/systemd/system/tomcat.serviceを新たに作成して、つぎのように記述して保存します。

APサーバ
$ sudo vi /etc/systemd/system/tomcat.service

※以下記載
[Unit]
Description=Apache Tomcat 9
After=syslog.target network.target

[Service]
User=tomcat
Group=tomcat
Type=oneshot
PIDFile=/opt/tomcat/tomcat.pid
RemainAfterExit=yes

ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh

[Install]
WantedBy=multi-user.target


$ sudo chmod 755 /etc/systemd/system/tomcat.service
作成したサービス起動ファイルファイルの権限を 755 に変更し実行権限を付与します。

$ sudo systemctl enable tomcat
Created symlink from /etc/systemd/system/multi-user.target.wants/tomcat.service to /etc/systemd/system/tomcat.service.

$ sudo systemctl list-unit-files -t service | grep tomcat
tomcat.service                               enabled

以上でシステムのセットアップが終わったので、Tomcatを起動してみます。

$ sudo systemctl start tomcat
$ sudo systemctl status tomcat
● tomcat.service - Apache Tomcat 9
   Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; vendor preset: disabled)
   Active: active (exited) since 木 2023-01-19 11:29:59 UTC; 9s ago
(以下略)

ステータスがActiveになっているので起動成功です。

3. WEBサーバ(Nginx)とAPサーバ(Tomcat)の連携

Nginxの設定ファイル/etc/nginx/を作成し、WEBサーバとAPサーバを連携させます。具体的には、WEBブラウザから80番ポートにきたアクセスを、8080番ポートに流すプロキシの設定を記載していきます。

WEBサーバ
$ sudo vi /etc/nginx/conf.d/server.conf
新しくserver.confというファイルを作成し、以下の中身を記述します。

server{
   location / {
        proxy_pass    http://APサーバのプライベートIPアドレス:8080/;
    }
}

続いてNginxの設定ファイル/etc/nginx/nginx.confを編集していきます。

WEBサーバ
$ sudo vi /etc/nginx/nginx.conf

     ~~~前略~~~
    server {
        listen       80;
        listen       [::]:80;
        server_name  _;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

    # 下の3行を追記
        location / {
        proxy_pass http://WEBサーバのパブリックIPアドレス:8080/;
        }

        error_page 404 /404.html;
        location = /404.html {
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }
   ~~~後略~~~

設定が完了したらnginxを再起動します。

$ sudo systemctl restart nginx

http://WEBサーバのパブリックIPアドレス 」に接続して、Tomcatのテストページが表示できるようになれば連携完了です。

スクリーンショット 2023-01-25 12.50.55.png

※表示されなかった場合は、WEBサーバの8080番ポートを開けていない事が考えられます。
Squidの時と同様に、8080番ポートをWEBサーバのセキュリティグループに追加してください。

スクリーンショット 2023-01-16 16.28.04.png

ここまでで、WEBサーバ、APサーバの構築と連携は終わりです。
続いてDBサーバを構築し、APサーバと連携していきます。

参考

0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?