AlmaLinuxで構築するWeb3層構造：APサーバ編

# はじめに
今回はWeb3層構造の中核ともいえるAPサーバとして、Apache Tomcatを導入します。
TomcatはJava ServletやJSPの実行環境として広く利用されており、Webアプリケーションのバックエンド処理を担います。

# １．前提環境
| ホスト名        | 役割     | IPアドレス        |
| ----------- | ------ | ------------- |
| `webserver` | Webサーバ | 192.168.56.10 |
| `apserver`  | APサーバ  | 192.168.56.20 |
| `dbserver`  | DBサーバ  | 192.168.56.30 |

- OS：AlmaLinux 9.x
- SELinux：無効化済み
- 実行ユーザー：root または sudo権限を持つユーザー

# ２．名前解決の設定
## 2.1 /etc/nsswitch.conf の編集
| パラメータ | 設定値 |
|---|------|
|passwd: | files |
|shadow: | files |
| group: | files |
| hosts: | files dns myhostname |
| services: | files |
| netgroup: | files |
| automount: | files |

→ /etc/hosts を優先して名前解決できるようにします。

## 2.2 /etc/hosts の追記
```bash
192.168.56.30  dbserver
192.168.56.10  webserver
192.168.56.20  apserver
```

# ３．ファイアウォールの設定
Tomcatが使用するポート(8080, 8009)を開放します。
```bash
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --zone=public --add-port=8009/tcp --permanent
firewall-cmd --reload
```

# ４．NTP（時刻同期）設定
/etc/chrony.conf に以下を追記し、時刻の正確性を確保します。
```bash
server ntp.nict.jp iburst
server ntp1.jst.mfeed.ad.jp iburst
server time.google.com iburst

allow 192.168.56.0/24
```

# Tomcat構築手順
## 5.1 必要なユーザとJava環境を準備
```bash
useradd tomcat
dnf -y install java-1.8.0-openjdk.x86_64
```

## 5.2 Tomcatのダウンロードと展開
```bash
wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.41/bin/apache-tomcat-10.1.41.tar.gz
tar -zxvf apache-tomcat-10.1.41.tar.gz
mv apache-tomcat-10.1.41 /opt
chown -R tomcat:tomcat /opt/apache-tomcat-10.1.41
ln -s /opt/apache-tomcat-10.1.41 /opt/tomcat
```

## 5.3 追加パッケージとMySQL JDBCドライバの導入
```bash
dnf -y install tomcat-webapps
dnf install -y java-headless

wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-j-8.4.0-1.el9.noarch.rpm
rpm -ivh mysql-connector-j-8.4.0-1.el9.noarch.rpm
cp -p /usr/share/java/mysql-connector-java.jar /opt/tomcat/lib/
chown -R tomcat:tomcat /opt/tomcat/lib/mysql-connector-java.jar
```

# ６．Tomcatの起動設定
## 6.1 systemd用サービスファイルの設定
/etc/systemd/system/tomcat.service を以下の内容で作成します：
```
[Unit]
Description=Apache Tomcat 10
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
```

## 6.2 サービスの起動・自動起動設定
```bash
chmod 755 /etc/systemd/system/tomcat.service
systemctl daemon-reexec
systemctl start tomcat
systemctl enable tomcat
```

# ７．動作確認
## 7.1 ブラウザでTomcatにアクセス
```
http://192.168.56.20:8080/
```
Tomcatのホーム画面が表示されれば成功です。
![tomcat_8080.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4090096/db502cd8-9261-4864-8563-43cbbf9b0f29.png)


## 7.2 セキュリティ強化のため8080ポートを閉じる
```bash
firewall-cmd --zone=public --remove-port=8080/tcp --permanent
firewall-cmd --reload
```

# ８．Webサーバとの連携設定
## 8.1 /opt/tomcat/conf/server.xml を編集
以下のように設定変更します（HTTPコネクタをコメントアウトし、AJPコネクタを有効化）：
```xml
～　一部省略　～
    <!--
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               maxParameterCount="1000"
               />
    -->

～　一部省略　～
    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector protocol="AJP/1.3"
               address="0.0.0.0"
               secretRequired="false"
               tomcatAuthentication="false" URIEncoding="UTF-8"
               port="8009"
               redirectPort="8443"
               />

～　一部省略　～
```
##8.2 Webサーバ側の設定
/etc/httpd/conf/httpd.confに以下を追記する。
```bash
ProxyPass /test/ ajp://<APサーバのIPアドレス>:8009/
ProxyPassReverse /test/ ajp://<APサーバのIPアドレス>:8009/
```

##8.3 ブラウザでWebサーバ経由の動作確認
```
http://192.168.56.10/test/
```
![webとの連携.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4090096/76bf9636-6366-4000-ac22-1dc885093b3a.png)

Tomcatのホーム画面が表示されれば成功です。

# まとめ
Tomcatの導入により、JSPページの表示が可能になりました。Webサーバとの連携も整ってきました。
次回は、MySQLを使ったDBサーバの構築と、サンプルデータベース「sakila」の導入を行います。

本記事は「AlmaLinuxで構築するWeb3層構造」シリーズの第3弾です。
前回までの内容はこちらからどうぞ：
- 第1回：仮想環境とAlmaLinux構築
- 第2回：Webサーバ（httpd）構築
- 第4回：DBサーバ（MySQL + sakila）構築
- 第5回：Web/AP/DB連携