Apache,Tomcat,MySQL Web3層システム構築（Windows Server 2016）

## 環境
・Windows Server 2016 Standard
・Apache 2.4.54（Win64）
・jdk1.8.0_331
・Apache Tomcat 8.5.81
・MySQL 8.0.29 for Win64 on x86_64
・mysql-connector-java-8.0.30.jar
## Windows Server 2016構築時の初期設定
以下の私の記事を参考していただけると幸いです。
https://qiita.com/maplejava/items/a1b1b306edc243ecd3d8
## JDBCドライバの配置
以下のサイトを参考に、JDBCドライバをインストールし、デプロイしたいWebアプリケーション内のWEB-INF/libフォルダ内に配置します。
https://qiita.com/Yuriko-Y/items/d4c5cb29780ce0347375
## Webサーバ構築
### Visual C++ 再頒布可能パッケージのインストール
https://docs.microsoft.com/ja-JP/cpp/windows/latest-supported-vc-redist?view=msvc-170#visual-studio-2015-2017-2019-and-2022
→VC_redist.x64.exe
→exeを起動後、画面に従ってインストール。
### Apacheのインストール
https://www.apachelounge.com/download/
→httpd-2.4.54-win64-VS16.zip 
→ダウンロード後、任意のフォルダに解凍する。
### サービスの自動起動設定
「サービス」からApacheのサービスを右クリックして「プロパティ」をクリック。
→「スタートアップの種類」を「自動」にして「OK」
## APサーバ構築
### JDKのインストール
https://www.oracle.com/java/technologies/downloads/archive/
→jdk-8u331-windows-x64.exe
→exeを起動後、画面に従ってインストール。
### システム環境変数の追加
Windowsボタンを右クリック→システム→環境変数
→システム環境変数に以下の変数を追加。
変数名：JAVA_HOME
値：JDKのインストール先フォルダ
　例：C:\Program Files\Java\jdk1.8.0_331
### Tomcatのインストール
https://tomcat.apache.org/download-80.cgi
→32-bit/64-bit Windows Service Installer (pgp, sha512)
→exeを起動後、画面に従ってインストール。
※インストール時「Configuration Options」の「Tomcat Administrator Login」で「User Name」「Password」「Roles」を設定する。
### サービスの自動起動設定
「サービス」からTomcatのサービスを右クリックして「プロパティ」をクリック。
→「スタートアップの種類」を「自動」にして「OK」
### システム環境変数の追加
追加方法はWebサーバの時と同じです。
変数名1：CATALINA_HOME
値1：Tomcatのインストール先フォルダ
　例：C:\Program Files\Apache Software Foundation\Tomcat 8.5
変数名2：CATALINA_BASE
値2：Tomcatのインストール先フォルダ
　例：C:\Program Files\Apache Software Foundation\Tomcat 8.5
### WARファイルのインポート
APサーバで[http://127.0.0.1:8080](http://127.0.0.1:8080)にアクセス。
→Manager Appをクリック。
→ユーザ、PWを聞かれるのでインストール時に指定した「User Name」「Password」を入力する。
    →「Tomcat Webアプリケーションマネージャ」画面の「WARファイルの配備」からデプロイしたいWARファイルをTomcatにインポートする。
→APサーバで[http://127.0.0.1:8080/[WARファイル名]/[サーブレットのコンテキストパス]](http://127.0.0.1:8080/[WARファイル名]/[サーブレットのコンテキストパス])でアクセスできたら上手くいっています。
## DBサーバ構築
### MySQLのインストール
インストールには、以下の記事が分かりやすかったので参考にさせて頂きました。
https://qiita.com/karakuri-t910/items/301a4585c54f4cab34a2
### サービスの自動起動設定
「サービス」からMySQLのサービスを右クリックして「プロパティ」をクリック。
→「スタートアップの種類」を「自動」にして「OK」
### システム環境変数Pathに値を追加
Webサーバ、APサーバの時のように変数自体を追加するのではなく、元々あるPathという変数に値を追加します。
Windowsボタンを右クリック→システム→環境変数
→システム環境変数の変数名が「Path」である行をクリックし、「編集」→「新規」でMySQLのインストール先フォルダを追加。
例：C:\Program Files\MySQL\MySQL Server 8.0\bin
### データベースの構築
コマンドプロンプトで以下のコマンドを実行し、rootとしてmysqlにログインする。
```java:
> mysql -u root -p
```
以下の記事のコマンドを参考に、データベースを構築します。
https://qiita.com/ksugawara61/items/9db198041dec159ed0fe
### 外部接続用DBユーザの作成と接続許可
```java:外部接続用DBユーザの作成
mysql> CREATE USER ユーザ名@'[APサーバのIPアドレス]' IDENTIFIED BY '接続時のパスワード'
```
```java:接続許可
mysql> GRANT ALL PRIVILEGES ON データベース名.テーブル TO ユーザ@'[APサーバのIPアドレス]'
```
※データベース名.テーブルはアスタリスク「\*」も使える。例えば「\*.\*」ですべてのDB、すべてのテーブルへのアクセスを許可する。
また「データベース名.\*」でそのデータベースのすべてのテーブルへのアクセスを許可する。
## Apache Tomcatの連携
・設定後のイメージ
クライアント端末→Webサーバ（80番ポート）→APサーバ（8009番ポート）
※元々APサーバ（Tomcat）では8080番ポートを受け付けている。
### ファイアウォールの穴あけ
WebサーバとAPサーバで以下の手順を行う。
「セキュリティが強化されたWindows Defender ファイアウォール」
→「受信の規則」
→「新しい規則」
→「新規の受信の規則ウィザード」で以下の通り設定。
・規則の種類：ポート
・適用先：TCP
・特定のローカルポート
　　Webサーバ:80
　　APサーバ：8009
・接続を許可する
・ドメイン、プライべート、パブリックにチェック
### Webサーバ
・httpd.conf
※192.168.1.11はTomcatサーバのIPアドレス。
```java:
//↓追記
ServerName localhost:80
ProxyPass / ajp://192.168.1.11:8009/
ProxyPassReverse / ajp://192.168.1.11:8009/
//↓コメントアウトを解除する。
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
```
### APサーバ
・server.xml
8080の記述をコメントアウトして以下の記述をする。
```java:
   <Connector protocol="AJP/1.3"
               port="8009"
               redirectPort="8443"
               address="0.0.0.0"
               secretRequired="false" />
```
これで設定は完了です。
[http://192.168.1.10/[ProxyPassの後に指定したキーワード]/[warファイル名]/[サーブレットのコンテキストパス]](http://192.168.1.10/[ProxyPassの後に指定したキーワード]/[warファイル名]/[サーブレットのコンテキストパス])でアクセスできたらタイトルの通り目標達成です！
※192.168.1.10はWebサーバのIPアドレス。ポート番号は指定しない。
※「ProxyPassの後に指定したキーワード」は今回「/」なので省略して大丈夫です。