EC2上にシステム一式を構築
【補足】 yumコマンドを使って新しいソフトを入れる方法や systemctlコマンドとは何か? については付録を参照してください。 nginxの設定方法はこちらを参照
いままでに構築したものを連動させます。 すでにインストール済みのかたは先へすすんでください まだインストールしていない方は、以下の3つをインストールしてください。
各インストールでは単体の動作確認だけをしました。 連携には、もう少し追加の設定が必要です。 それを本節で行います。
連携のための変更点 nginx
リバースプロキシ(nginx が 80/tcp で受け 8080/tcp の www.py へ転送する)の設定を /etc/nginx/conf.d/ingress.conf ファイルに書きます(ingress.conf ファイルを作成します)
次のスクリプトが実行してくれます
cd 03_ec2/03-04_ec2-nginx-web.py-mysql/scripts
sh install.sh
このスクリプトは次の2つの処理をしています ( nginxの設定方法はこちらを参照 )
- リバースプロキシーの設定を投入
- nginx を再起動
連携のための変更点 mysql
- mysql サーバ自体の設定変更はありません
- 次の www.py 変更後、データの投入(データベースとテーブルの作成)を行います
連携のための変更点 www.py
/var/www/libexec/www.py ファイルで、次の二箇所を変更し、 www.pyを再起動してください
(1)
MYSQL_PASSWORD = '1qaz2wsx!X'
をEC2上にmysqlをインストールする節で再設定したパスワードに変更してください
(2)
MYSQL_HOST = 'mysql'
を
MYSQL_HOST = '127.0.0.1'
に変更してください。
変更後 systemctl で www.py を再起動してください
sudo systemctl restart www.py
データベースの作成
mysql クライアントを起動し、データベース test を作成してください
mysql -u root -h 127.0.0.1 -p
Enter Password:
... 省略 ...
mysql> create database test;
... 省略 ...
mysql> quit
テーブルの初期化
install.shを実行したディレクトリに db-init.sh があります。これを実行してください
ねんのため最初から書くと、 03_ec2/03-04_ec2-nginx-web.py-mysql/scripts/ ディレクトリで db-init.sh を実行です
cd 03_ec2/03-04_ec2-nginx-web.py-mysql/scripts/
sh db-init.sh
実行すると
(debug) connected ? = True
とデバッグ情報が表示されるとおもいますが無視してください
作成したテーブルの確認
作成したテーブルの内容を確認するには、 同じく 03_ec2/03-04_ec2-nginx-web.py-mysql/scripts/ ディレクトリで db-dump.sh を実行してください
cd 03_ec2/03-04_ec2-nginx-web.py-mysql/scripts/
sh db-dump.sh
実行すると
(debug) connected ? = True
(debug) SELECT * FROM shop_menu
id:1 name:beer price:200
id:2 name:water price:100
id:3 name:水 price:100
id:4 name:お茶 price:100
id:5 name:お菓子 price:100
id:6 name:アイス price:30
とデバッグ情報つきでテーブルが表示されるはずです
ローカルで www.py + mysql を動作確認
では、検索をかけてみましょう
curl -X POST -d key=water http://127.0.0.1:8080/shop.html
これは「ブラウザの検索窓で入力」と同じ動作を、 curl コマンドを使いコマンドラインから実行しています。 実行内容は次のとおりです
- 通信する先はアドレス 127.0.0.1 ポートが 8080/tcp
- HTTP プロトコルで POST メソッド
- POSTで送るデータは変数 key、その値が water
次のような表示が出るはずです
<p>(debug) [POST response] search key = water
<p>商品 <br>water の価格は 100 円です
<hr>ご来店おまちしております
ローカルで nginx + www.py + mysql を動作確認
curl -X POST -d key=water http://127.0.0.1:80/shop.html
も実行していましょう。 これは3つのプロセスが連携している状態の確認です。 次のように問い合わせています
curl -> nginx -> www.py -> mysql
上と同じ表示... water の価格は 100 円です ...
が出ましたか?
ブラウザからの動作確認
では、いよいよ手元のPC(つまりインターネット)からブラウザで動作確認してみましょう
2ステップ必要です
- セキュリティグループの設定を変更し、 世界中どこからでも HTTP を許可してください (HTTP つまり 80/tcp をソースIPアドレス = 0.0.0.0/0 から許可)。 AWS用語ではセキュリティグループの設定と呼びますが、 ようするにフィルタです
- ブラウザでの動作確認
セキュリティグループを設定したら、 EC2のパブリックIP(の 80/tcp)に対し、手元のPCのブラウザでアクセスしてみましょう
http://パブリックIP/
へアクセスすると
Welcome to our server exercise program !
と表示されたでしょうか? (注: この画面を返しているのは www.py です。 nginx -> www.py 部分はOKと確認できましたが、 この段階では mysql と連携できているかは不明)
最後に
http://パブリックIP/shop.html
にアクセスしてください。 前回の演習でつかった検索画面がでるはずです。 なにか検索してみてください、答えが返りましたか? (注: この画面は mysql にクエリをした結果を www.py が返し、それをさらに nginx が返しています。 これが動けば nginx + www.py + mysql の3つが連携できています)