インフラって難しそう…と避け続けためちゃよわプログラマが、克服のために頑張ってサーバを構築してみた。WebAPサーバ編

# はじめに
サーバとかネットワークとか、ちんぷんかんぷんなまま…いつかやらなきゃ*n、とは思いつつ。
仕事中はインフラの担当者にお願いすることが多く、触る機会をずっと避けていました。

**「でもそれじゃぁいかん＞＜！」**
ということで、~~黒い画面アレルギーの~~初心者が調べながら環境構築した備忘録です。
設定漏れや間違いなどをもし見つけた方は、ぜひご教示ください…。

Apache連携なしで、簡易的なWebAPサーバを構築してみました。

# 構築イメージ
![img.JPG](https://qiita-image-store.s3.amazonaws.com/0/298536/0ed8ef64-7537-b376-41b6-0687745ff161.jpeg)


この記事では、WebAPサーバの構築を書き留めます。
![img_web.jpg](https://qiita-image-store.s3.amazonaws.com/0/298536/71ecd2a6-dfd4-b5ea-e03b-13bd9c35880c.jpeg)




# 環境
AWSのEC2で構築しました。
OS：Red Hat Enterprise Linux 7

今回はセキュリティゾーンに8080を設定しています。
必要な場合は、適宜設定を行います。

これから準備するもの…
・Tomcat
・JDK
・JDBCドライバ

**※バージョンは2019年1月時点のものです。適切なものを使います。**


# 環境構築

## その前に
環境構築ではパスを知る必要があります。
私は以下のコマンドでインストールしたパスを探しながら構築を進めました。
（本文の中では、詳細パスは記載せず [インストールしたパス] で統一します。）

```
$ find / -name "調べたいファイル名" -ls

調べたいファイル名はワイルドカード（*）を使用することで、あいまい検索ができる。
例）find / -name "tomcat*" -ls
```

また、root権限が必要なコマンドもありましたが、その際はsudoで実行しました。
（今回は記載は省きます。）


## JDK

### インストール

```
$ yum -y install java-1.8.0-openjdk-devel
```

### 確認

```
$ java -version

openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)
```

```
$ javac -version

javac 1.8.0_191
```

## Tomcat
・インストール用のURLを見つける
[Tomcat公式サイト](http://tomcat.apache.org/)

### インストール

```

$ wget http://ftp.jaist.ac.jp/pub/apache/tomcat/tomcat-8/v8.5.37/bin/apache-tomcat-8.5.37.tar.gz
```
※ wget not foundの場合はwgetコマンドをインストールする

```
$ yum -y install wget
```

### tar.gzの展開と配置

```
$ tar -xzvf インストールしたパス/apache-tomcat-8.5.37.tar.gz
$ mkdir /opt/apache-tomcat-8.5.37
$ mv インストールしたパス/apache-tomcat-8.5.37 /opt/apache-tomcat-8.5.37
```

### 設定ファイル作成
tomcat.serviceを新規作成し、開く

```
$ vi /etc/systemd/system/tomcat.service
```

以下を記載する

```
[Unit]
Description=Apache Tomcat 8
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
ExecReStart=/opt/tomcat/bin/shutdown.sh;/opt/tomcat/bin/startup.sh

[Install]
WantedBy=multi-user.target
```

### 権限を付与する
```
$ chmod 755 /etc/systemd/system/tomcat.service
```

### Tomcatを起動する
```
$ systemctl start tomcat
```

### おまけ：自動起動の設定
```
$ systemctl enable tomcat
```

## おまけ：Tomcat管理画面

### tomcat-users.xmlを修正
```
$ vi インストールしたパス/tomcat-users.xml
```

tomcat-users.xmlを開いたら権限を追記する

```
<role rolename="admin"/>
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<role rolename="manager"/>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user name="xxxxxxxx" password="yyyyyyyy" roles="admin,manager,admin-gui,admin-script,manager-gui,manager-script,manager-jmx,manager-status" />
```

### context.xmlを修正
```
$ vi インストールしたパス/manager/META-INF/context.xml
```

以下をコメントアウトする

```
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />

↓

<!--
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
-->
```

### Tomcat再起動
```
$ systemctl restart tomcat
```

### アクセスして確認
[http://パブリックIP:8080/manager/html](http://パブリックIP:8080/manager/html)

Tomcatの猫の画面が表示されればOK
※ BASIC認証には、tomcat-users.xmlで設定したユーザとパスワードを入力する

アクセスできなければファイアウォールの設定をする

## ファイアウォール

### ポート8080を追加する
```
$ firewall-cmd --add-port=8080/tcp --zone=public --permanent
```

※ firewalld not foundの場合はfirewalldコマンドをインストールする

```
$ yum -y install firewalld
```

### 再起動する

```
$ systemctl restart firewalld
```

### 自動起動の設定

```
$ systemctl enable firewalld
```


### 確認する
```
$ firewall-cmd --list-all

ports: 8080/tcp ← 追加されていればOK
```


## JDBCドライバ

今回は、JavaアプリケーションからDBサーバ内のPostgreSQLに接続するため、JDBCドライバをインストールする。

### インストール
```
$ yum install -y postgresql-jdbc
```

### コピー

インストールしたTomcatのlibフォルダ配下にコピーする

```
$ cp /インストールしたパス/postgresql-jdbc.jar /インストールしたパス/apach-tomcat-8.5.37/lib
```


# おわり
これで簡易的なWebAPサーバを構築することができました。
次はDBサーバの構築をまとめます。