Apache,Tomcat,MySQL Web3層システム構築（Ubuntu 18.04.3）

## 環境
・Ubuntu 18.04.3 Desktop版
・Apache 2.4.29（Ubuntu）
・openjdk version 1.8.0_151
・Apache Tomcat 8.5.81
・mysql Ver 8.0.30 for Linux on x86_64 (MySQL Community Server - GPL)
・mysql-connector-java-8.0.30.jar
## Ubuntu 18.04.3構築時の初期設定
以下の私の記事を参考していただけると幸いです。
https://qiita.com/maplejava/items/a11f2d14350231c9b2ef
## JDBCドライバの配置
以下のサイトを参考に、JDBCドライバをインストールし、デプロイしたいWebアプリケーション内のWEB-INF/libフォルダ内に配置します。
https://qiita.com/Yuriko-Y/items/d4c5cb29780ce0347375
## Webサーバ構築
### Apacheのインストール
```java:インストール
> sudo apt install apache2
```
・/etc/apache2/conf-available/fqdn.conf
```java:fqdn.conf
//↓追記
ServerName localhost
```
```java:
> chown 644 fqdn.conf
> a2enconf fqdn
> systemctl restart apache2
```
セキュリティ強化のため、バージョンを隠す設定を入れます。
・/etc/apache2/apache2.conf
```java:apache2.conf
//↓最終行に追記
ServerSignature  Off
```
### サービスの自動起動設定
```java:
> systemctl enable apache2
//ついでに設定反映のためのサービス再起動
> systemctl restart apache2
```
### ファイアウォールの穴あけ
```java:FWの許可設定
> ufw allow 80
> ufw enable
> y
//確認
> ufw status
```
## APサーバ構築
### JDKのインストール
```java:インストール
> sudo apt install openjdk-8-jdk
```
### システム環境変数の追加
```java:
> export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
> echo $JAVA_HOME
> vi ~/.profile
```
```java:~/.profile
//↓追記
JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/"
export JAVA_HOME
```
※/etc/profileだと全ユーザに設定が適用される。
~/.profileなど~から始まるやつはそれを実行したユーザにのみ適用される。
### Tomcatのインストール
```java:インストール
> sudo apt install tomcat8 tomcat8-admin
> vi /etc/tomcat8/tomcat-users.xml
```
Manager Appにアクセスするときのユーザを設定する。
```java:tomcat-users.xml
//↓追記
<user username="admin" password="password" roles="manager-gui,admin-gui"/>
```
※username（ユーザ名）、password（パスワード）は任意の値を入力する。
### サービスの自動起動設定
```java:
> systemctl enable tomcat8
//ついでに設定反映のためのサービス再起動
> systemctl restart tomcat8
```
※以下のような警告が出るが、気にしなくてもよい。
```java:
tomcat8.service is not a native service, redirecting to systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable tomcat8
```
### ファイアウォールの穴あけ
```java:FWの許可設定
> ufw allow 8080
> ufw enable
> y
//確認
> ufw status
```
### WARファイルのインポート

APサーバと同じサブネットに所属するPC等から[http:/[APサーバのIPアドレス]/:8080]([APサーバのIPアドレス])にアクセス。
→Manager Appをクリック。
→ユーザ、PWを聞かれるのでtomcat-users.xmlで指定した「username」「password」を入力する。
    →「Tomcat Webアプリケーションマネージャ」画面の「WARファイルの配備」からデプロイしたいWARファイルをTomcatにインポートする。
※もしくはAPサーバの「/var/lib/tomcat8/webapps」直下にwarファイルを置いてもOKです。
→PCで[http://[APサーバのIPアドレス]:8080/[WARファイル名]/[サーブレットのコンテキストパス]](http://[APサーバのIPアドレス]:8080/[WARファイル名]/[サーブレットのコンテキストパス])でアクセスできたら上手くいっています。
## DBサーバ構築
### MySQLのインストール
```java:インストール
> wget https://dev.mysql.com/get/mysql-apt-config_0.8.23-1_all.deb
> dpkg -i mysql-apt-config_0.8.23-1_all.deb
```
その後、GUIのようなものが立ち上がるので、
MySQL Server & Cluster (Currently selected: mysql-8.0)
→mysql-8.0
→OK
の順に選択する。

```java:インストール
> apt-get upgrade
> apt-get update
> sudo apt install mysql-server
```
その後またGUIが立ち上がってrootのパスワードを聞かれるので、任意のパスワードを入力してOKを選択する。
### サービスの自動起動設定
```java:
> systemctl enable mysql
```
### ファイアウォールの穴あけ
```java:FWの許可設定
> ufw allow 3306
> ufw enable
> y
//確認
> ufw status
```
### データベースの構築
以下のコマンドで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アドレス]';
```
```java:
//MYSQLサービス再起動
> systemctl restart mysql
```
※データベース名.テーブルはアスタリスク「\*」も使える。例えば「\*.\*」ですべてのDB、すべてのテーブルへのアクセスを許可する。
また「データベース名.\*」でそのデータベースのすべてのテーブルへのアクセスを許可する。
## Apache Tomcatの連携
・設定後のイメージ
クライアント端末→Webサーバ（80番ポート）→APサーバ（8009番ポート）
※元々APサーバ（Tomcat）では8080番ポートを受け付けている。
### ファイアウォールの穴あけ
APサーバで以下のコマンドを実行する。
```java:
//ナンバー付きでFWの設定を表示
> ufw status numbered	
//8080ポート開放設定を削除（8080が2番目の設定である場合）
> ufw delete 2
//8009を新規に開放
> ufw allow 8009
> reboot
//確認
> ufw status
```
### Webサーバ
```java:
> sudo a2enmod proxy
> sudo a2enmod proxy_ajp
> vi /etc/apache2/apache2.conf
```
※192.168.1.11はTomcatサーバのIPアドレス。
```java:apache2.conf
//↓追記
ProxyPass / ajp://192.168.1.11:8009/
ProxyPassReverse / ajp://192.168.1.11:8009/
```
```java:サービス再起動
> systemctl restart apache2
```
### APサーバ
・/etc/tomcat8/server.xml
```java:
> vi /etc/tomcat8/server.xml
```
8080の記述をコメントアウトして以下を追記する。
```java:server.xml
//↓追記
   <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の後に指定したキーワード」は今回「/」なので省略して大丈夫です。