JavaのWebアプリケーションサーバーの構築手順

#JDKのインストール

## [Oracleのダウンロードページ](http://www.oracle.com/technetwork/jp/java/javase/downloads/index.html)からLinux版JDKをダウンロードする.  
 * 「Accept License Agreement」をチェックしてダウンロード.
 * 執筆時点の最新版はjdk-8u45-linux-x64.rpm
 * 64bit Linux 用の「Linux x64」は tar.gz 版と RPM 版がありますが、今回は RPM 版.
　　
## scpコマンドまたはFTPツール等でサーバーにjdkをアップロード.
## JDKのインストール  

 *  rpm コマンドだけでインストールは完了する.   
  
   ```
      # rpm -ivh jdk-8u45-linux-x64.rpm
      準備しています...              ################################# [100%]
      更新中 / インストール中...
        1:jdk1.8.0_45-2000:1.8.0_45-fcs    ################################# [100%]
       Unpacking JAR files...
	    rt.jar...
	    jsse.jar...
	    charsets.jar...
	    tools.jar...
	    localedata.jar...
	    jfxrt.jar...
	    plugin.jar...
	    javaws.jar...
	    deploy.jar...

```


## JDKのインストール先の確認  

```
$ ls -l /usr/java/
合計 4
lrwxrwxrwx 1 root root   16  6月  7 09:42 default -> /usr/java/latest
drwxr-xr-x 9 root root 4096  6月  7 09:42 jdk1.8.0_45
lrwxrwxrwx 1 root root   21  6月  7 09:42 latest -> /usr/java/jdk1.8.0_45
```

  * 実態は /usr/java/jdk1.8.0_45 配下にインストールされている.  
  * ２つのリンク default と latest が作成されている.


## 環境変数の設定

  ~/.bash_profile へ追記

```
  export JAVA_HOME=/usr/java/default
```
  
 * 次回、最新のJDKをインストールしたとき、パス設定を変更不要とするためにJAVA_HOME を 　　/usr/java/default とする.

## 変更した ~/.bash_profile を有効化

 ```
 $ source ~/.bash_profile
 ```

# Tomcatのインストール

## [Tomcatの公式ホームページ](http://tomcat.apache.org/index.html)からパッケージをダウンロードする.  
Coreの中の[tar.gz]をダウンロードすれば良い。 8.0.23ならapache-tomcat-8.0.23.tar.gzというファイルになる.

## ダウンロードしたtar.gzを/usr/localに展開する

    ```
    # tar xvzf apache-tomcat-8.0.23.tar.gz
    # mv apache-tomcat-8.0.23 /usr/local
    ```

## Tomcat管理ユーザーを作成する  
  *  Tomcatをroot権限で扱っていると、セキュリティホールがあった時に
     サーバのroot権限が取られる可能性がある.
  * そこで実行専用のユーザとして、tomcatというアカウントを作成する.
  * このtomcatユーザは、-s オプションでログインシェルに/sbin/nologinを指定して通常利用はできないようにしておく.  

 ```
 # useradd -s /sbin/nologin tomcat
 ```

## 展開後、ディレクトリのオーナーをtomcatユーザーにする.
```
# cd /usr/local
#  chown -R tomcat:tomcat apache-tomcat-8.0.23
```

## tomcatという名前でシンボリックリンクを作成しておく
```
# ln -s apache-tomcat-8.0.23 tomcat
```
## /usr/local/tomcat/logs/内のファイルオーナーをtomcatユーザーにする
```
chown tomcat:tomcat /usr/local/tomcat/logs/*
```

## 環境変数の設定

  ~/.bash_profile へ追記

 ```
  export CATALINA_HOME=/usr/local/tomcat
 ```  

## 変更した ~/.bash_profile を有効化
  ```
  $ source ~/.bash_profile
  ```
## Tomcatの起動確認

 * 実行権限の確認
 
 ```
 # ls -l /usr/local/tomcat/bin/
 -rw-r--r-- 1 tomcat tomcat  28386  5月 19 15:00 bootstrap.jar
-rw-r--r-- 1 tomcat tomcat   1647  5月 19 15:03 catalina-tasks.xml
-rw-r--r-- 1 tomcat tomcat  13825  5月 19 15:00 catalina.bat
 ```

 * 実行権限の付与

 ```
 # chmod +x /usr/local/tomcat/bin/*
 ```

 * 再確認

 ```
 # ls -l /usr/local/tomcat/bin/
 rwxr-xr-x 1 tomcat tomcat  28386  5月 19 15:00 bootstrap.jar
-rwxr-xr-x 1 tomcat tomcat   1647  5月 19 15:03 catalina-tasks.xml
-rwxr-xr-x 1 tomcat tomcat  13825  5月 19 15:00 catalina.bat
 ```

 *  起動

 ```
 # /usr/local/tomcat/bin/startup.sh
 Using CATALINA_BASE:   /usr/local/tomcat
 Using CATALINA_HOME:   /usr/local/tomcat
 Using CATALINA_TMPDIR: /usr/local/tomcat/temp
 Using JRE_HOME:        /usr/java/default
 Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
 Tomcat started.
 ```
 
* 停止

 ```
  # /usr/local/tomcat/bin/shutdown.sh
  Using CATALINA_BASE:   /usr/local/tomcat
  Using CATALINA_HOME:   /usr/local/tomcat
  Using CATALINA_TMPDIR: /usr/local/tomcat/temp
  Using JRE_HOME:        /usr/java/default
  Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
  ```

# 自動起動スクリプト作成
## init.dにスクリプトを新規登録.

```
# vim /etc/rc.d/init.d/tomcat
```

  ```
  #!/bin/bash
  #
  # Startup script for the Tomcat Servlet Container
  #
  # chkconfig: 2345 35 65
  # description: Tomcat is the servlet container that is used in the official \
  #              Reference Implementation for the Java Servlet and JavaServer \
  #              Pages technologies

  TOMCAT_USER=tomcat
  CATALINA_HOME=/usr/local/tomcat

  . /etc/rc.d/init.d/functions
  prog=tomcat

  start() {
      echo -n $"Starting $prog: "
      daemon --user $TOMCAT_USER $CATALINA_HOME/bin/startup.sh > /dev/null
      RETVAL=$?
      if [ $RETVAL -eq 0 ]; then
          echo_success
      else
          echo_failure
      fi
      echo
      [ $RETVAL = 0 ] && touch /var/lock/subsys/$prog
      return $RETVAL
  }
  stop() {
      echo -n $"Stopping $prog: "
      daemon --user $TOMCAT_USER $CATALINA_HOME/bin/shutdown.sh > /dev/null
      RETVAL=$?
      if [ $RETVAL -eq 0 ]; then
          echo_success
      else
          echo_failure
      fi
      echo
      [ $RETVAL = 0 ] && rm -f /var/lock/subsys/$prog
      return $RETVAL
  }

  # See how we were called.
  case "$1" in
    start)
      start
      ;;
    stop)
      stop
      ;;
    restart)
      stop
      start
      ;;
    status)
      INSTANCES=`ps --columns 512 -aef|grep java|grep tomcat|grep org.apache.catalina.startup.Bootstrap|wc -l`
      if [ $INSTANCES -eq 0 ]; then
          echo $prog is stopped
          RETVAL=3
      else
          if [ $INSTANCES -eq 1 ]; then
              echo $prog is running 1 instance...
          else
              echo $prog is running $INSTANCES instances...
          fi
          RETVAL=0
      fi
      ;;
    *)
      echo $"Usage: $prog {start|stop|restart|status|help}"
      exit 1
  esac

  exit $RETVAL
  ```  

## 確認

```
# ls -l /etc/rc.d/init.d/tomcat
-rw-r--r-- 1 root root 1603  6月  7 12:05 /etc/rc.d/init.d/tomcat
```

## 実行権限を付与

```
# chmod +x /etc/rc.d/init.d/tomcat
```

## 再確認  

```
# ls -l /etc/rc.d/init.d/tomcat
-rwxr-xr-x 1 root root 1603  6月  7 12:05 /etc/rc.d/init.d/tomcat
```

## 起動スクリプトからの起動確認

```
# /etc/rc.d/init.d/tomcat start
tomcat を起動中:                                           [  OK  ]
```

## 停止

```
# /etc/rc.d/init.d/tomcat stop
tomcat を停止中:                                           [  OK  ]
```

#自動起動登録

## chkconfig確認

```
# chkconfig --list tomcat
サービス tomcat は chkconfig をサポートしますが実行レベルで参照されていません (run 'chkconfig --add tomcat')
```

## chkconfig にTomcatを追加

```
# chkconfig --add tomcat
```

## もう一度確認

```
chkconfig --list tomcat
tomcat         	0:off	1:off	2:on	3:on	4:on	5:on	6:off
```

## Tomcat自動起動セット

```
# chkconfig tomcat on
```

# Apache/Tomcatの連携設定
## Apacheの設定ファイル追加

 * http:/ホスト名/hello/で始まるURLを使ってアクセスがあった場合にTomcat側のファイルを呼び出すようにする.そこでセクションコンテナとして「Location」を使う。
 *  Tomcat側へアクセスを飛ばす設定をこの中に記述する。Tomcat側へはAJP/1.3プロトコルで8009番ポートを使って接続を行う
 * 下記のように/etc/httpd/conf/extra/httpd-proxy.confに追記

  ```
  mkdir /etc/httpd/conf/extra
  ```

  ```
  vim /etc/httpd/conf/extra/httpd-proxy.conf
  ```

  ```
 	<Location /hello/>
    	ProxyPass ajp://localhost:8009/hello/
	</Location>
```

## /etc/httpd/conf/httpd.confファイルに「Include」を使って上で作成した「httpd-proxy.conf」を呼び出すようにする

/etc/httpd/conf/httpd.confファイルに下記を追加

```
 	Include conf/extra/httpd-proxy.conf
```

## httpdのリロード

```
/etc/rc.d/init.d/httpd reload
```

## http:://ホスト名/hello/でブラウザからアクセス