前回の記事
https://qiita.com/shinichi_yoshioka/items/e358f57a3ecb7735c091
前々回(初回)の記事
https://qiita.com/shinichi_yoshioka/items/7226b9ebaad06c569c80
構成図
前回の続きをやっていく。
VSCodeすら使ったことなかったが、VSCodeの拡張機能にdrawioというものがあって、
カッコ良いアイコンなどが使えるのを教えてもらった。
さっそく使ってみたが、色のセンスはお察しだ。
初回記事ではDBの切り替えをしたいと書いたが、まずは正常な状態を作りたい。
WEBサーバにはリバースプロキシの設定(To:APサーバ)をし、APサーバでJSPを使って、
DBを参照できることを正常な状態とすることにした。
◆リバースプロキシの設定
対象:WEBサーバ
/etc/nginx/conf.d 配下にserver.confというファイルを作る。
cd /etc/nginx/conf.d
vi server.conf
server.confの中身は、APサーバのプライベートアドレス:ポート番号(8080)を指定した。
#server.conf
server{
location / {
proxy_pass http://172.16.3.246:8080/;
}
}
nginxのサービスを再起動(systemctl restart nginx)して、ブラウザにWEBサーバのパブリックアドレスを入力し、
APサーバのtomcatのページが表示されることを確認した。
[自宅PC]-[Internet]-[WEBサーバ]-[APサーバ] ←ここまでのイメージ
◆JDBC for MySQLのインストール
対象:APサーバ
APサーバにJDBCドライバーをインストールしようと思ったのだが、AmazonLinux用がなかった^^;;;
ということで、前回作ったAPサーバはぶっ壊して、再度RedHatで作りなおして、Tomcatのインストールまでは済んだとこ。
これがクラウドの良いところである。(オンプレでOS選定ミスってたら、首飛んでた)
EIPを使っていたので、記事の不整合もない!
OSやJavaのバージョン、Tomcatの状態はこんな感じ。
MySQLコミュニティサーバからJDBCドライバーのRPM(RHEL用)をダウンロードしインストールしようとしたが、
依存関係でopenjdk-headlessが必要と言われた。
yumでopenjdk-headlessをインストール後に、mysql-connector-javaをRPMコマンドでインストールした。
wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.23-1.el8.noarch.rpm
yum install java-1.8.0-openjdk-headless -y
rpm -ivh mysql-connector-java-8.0.23-1.el8.noarch.rpm
rpm -qa | grep mysql
◆サンプルデータベースの用意
対象:DBサーバ
参照するためのDBを用意するため、以下からworld databaseをインポートすることにした。
https://dev.mysql.com/doc/index-other.html
まずはDBサーバにssh接続し、wgetコマンドにてダウンロードした。
gz形式だったため、gunzipコマンドにて解凍した。
wget https://downloads.mysql.com/docs/world.sql.gz
gunzip world.sql.gz
次にMySQLにログインし、SOURCEコマンドにて、world.sqlをインポートした。
mysql> SOURCE /root/world.sql
データベースに"world"がインポートされた。
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| TEST |
| auth |
| mysql |
| performance_schema |
| sys |
| world |
+--------------------+
データベースをworldに切り替え、テーブルが存在することを確認した。
mysql> use world;
mysql> show tables;
+-----------------+
| Tables_in_world |
+-----------------+
| city |
| country |
| countrylanguage |
+-----------------+
3 rows in set (0.00 sec)
MySQLはデフォルトで、外部からのアクセスを許可されていないため、
以下の権限追加をした。
権限追加後は、FLUSHにて権限を再読み込みした。
※*(すべてのデータベース).*(すべてのテーブル)を認識できるようにユーザ名@接続元IPアドレス(APサーバ)へ権限を与える
mysql> GRANT all ON *.* TO root@'172.16.3.246' IDENTIFIED BY 'MySQLのパスワード';
mysql> FLUSH PRIVILEGES; ←権限関係の再読み込み
◆JDBCドライバの配置とサンプルJSPの作成
対象:APサーバ
JDBCドライバーは/lib配下に配置しないとダメらしく、初期配置から移動させた。
mv /usr/share/java/mysql-connector-java.jar /opt/tomcat/lib/
JSPについては初心者でggりまくった結果、JSPも配置が重要らしく、
/opt/tomcat/webapps配下にjspディレクトリを作成し、パーミッションを750にし、所有者はtomcatに変更した。
cd /opt/tomcat/webapps
mkdir jsp
chown tomcat:tomcat jsp
chmod 750 jsp
/opt/tomcat/webapps/jsp配下には、test.jspを作成したが、
JSPの知識がなさすぎて、以下URLを参考にさせていただいた。
https://michael-e29.hatenadiary.org/entry/20111107/1320630444
jdbc:mysql://172.16.3.6:3306/world
↑DBサーバのアドレス:ポート番号/データベース名
※worldはデータベース名。
※ID,Name,CountryCode,District,Populationはデータベースのカラム名
###test.jspの中身###
<%@ page contentType="text/html; charset=utf-8" import="java.sql.*" %>
<html>
<head>
<title>DB参照テスト</title>
</head>
<body>
<h1>DB参照テスト</h1>
<tr>
<td>ID</td> <td>Name</td> <td>CountryCode</td> <td>District</td> <td>Population</td>
</tr>
<%
Class.forName("com.mysql.jdbc.Driver");
Connection conn=DriverManager.getConnection("jdbc:mysql://172.16.3.6:3306/world?" +
"user=root&password=MySQL@001&useUnicode=true&characterEncoding=utf-8");
Statement st=conn.createStatement();
ResultSet res = st.executeQuery("select * from city;");
while(res.next()){
out.println("<tr>");
out.println("<td>" + res.getString("ID") + "</td>");
out.println("<td>" + res.getString("Name") + "</td>");
out.println("<td>" + res.getString("CountryCode") + "</td>");
out.println("<td>" + res.getString("District") + "</td>");
out.println("<td>" + res.getString("Population") + "</td>");
out.println("</tr>");
}
st.close();
conn.close();
%>
</table>
</body>
</html>
APサーバとDBサーバの連携の準備ができたので、APサーバのTomcatサービスを再起動。
あとDBサーバのmysqldサービスを再起動し、ブラウザにJSPのパスを入力する。
ちなみにJSPファイルを置いたパスは /opt/tomcat/webapps/jsp/test.jsp だが、
ブラウザでは/webapps/配下を入力する。
http://WEBサーバのパブリックアドレス/jsp/test.jsp
ぐちゃぐちゃだけど、一応DB参照できたので
一応WEB3層構成はできた・・・。
めちゃ時間かかったけど、つまづきながらハマりながら色々覚えれたので良かったです。
次回はNATゲートウェイの作成と、AnsibleでJSP内の文字列を置換することで
参照するDBを切り替えようと思います。
つづく