AWSでWEB3層構造の構築にチャレンジしてみました。
前回の記事の続きです。
作りたい環境は以下の図の通りです。
1. WEBサーバの構築
1-(1). Nginx のインストール
ローカルホストからWEBサーバへSSH接続し、WEBサーバを構築していきます。
まずはNginxをインストールしますが、一般的に使われる yum コマンドではなく、amazon-linux-extras コマンドを使用してインストールしていきます
$ 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のテストページが表示されることを確認しました。
1-(2). Squid のインストール
APサーバとDBサーバに必要なパッケージをインストールするために、yumコマンドやwgetコマンドを使用したいのですが、APサーバとDBサーバはプライベートサブネット下にあるため、インターネットに接続できていません。
そこで、以下の手順でWEBサーバにSquidというソフトウェアをインストールし、WEBサーバにプロキシさせます。
※プロキシさせるとは、クライアントであるAPサーバとDBサーバの代わりに、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の起動設定を行います。
$ 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コマンドを使える状態にします。
まずは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番を追加
これで、APサーバとDBサーバでyumコマンド及びwgetコマンドを使用できるようになりました。
2. APサーバの構築
ローカルホストからAPサーバへSSH接続し、APサーバを構築していきます。
Tomcatをインストールする前に、Tomcatの動作の前提となる環境を作ります。
TomcatはJavaで作られているため実行環境であるOpenJDK (Java SE Development Kit) が必要です。
OpenJDKはTomcatとの互換性があるので、以下のURLでインストールするTomcatとOpenJDKの互換性を考慮します。
まずはインストール可能な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を追加します。
$ sudo useradd -s /sbin/nologin tomcat
$ cat /etc/passwd | grep tomcat
tomcat:x:1001:1001::/home/tomcat:/sbin/nologin
ユーザができていることを確認
下記のURLからインストールしたいTomcatのページを選んでCoreの「tar.gz」ファイルを右クリックでアドレスをコピーし、インストールします。
$ 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を新たに作成して、つぎのように記述して保存します。
$ 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番ポートに流すプロキシの設定を記載していきます。
$ sudo vi /etc/nginx/conf.d/server.conf
新しくserver.confというファイルを作成し、以下の中身を記述します。
server{
location / {
proxy_pass http://APサーバのプライベートIPアドレス:8080/;
}
}
続いてNginxの設定ファイル/etc/nginx/nginx.confを編集していきます。
$ 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のテストページが表示できるようになれば連携完了です。
※表示されなかった場合は、WEBサーバの8080番ポートを開けていない事が考えられます。
Squidの時と同様に、8080番ポートをWEBサーバのセキュリティグループに追加してください。
ここまでで、WEBサーバ、APサーバの構築と連携は終わりです。
続いてDBサーバを構築し、APサーバと連携していきます。
参考