さくらVPSにJava実行環境を構築する


はじめてのVPSとはじめてのJava環境構築。TomcatをインストールしてJava8が実行できる環境にします。

#ここまでの環境

- さくらVPS
- SentOS7
- Apache/2.4.6

「ネコでもわかる！さくらのVPS講座」を読みながらたどたどしく構築した環境を使っていきます。
https://knowledge.sakura.ad.jp/8218/

#Java Runtime Environment（Java実行環境、JRE）のインストール
OpenJDK (Open Java Development Kit)の8を利用。CentOS の標準の yum リポジトリ内に java-1.8.0-openjdk という名前であります。

```
# yum install java-1.8.0-openjdk
```
 以下のコマンドを実行し、バージョンが複数ある場合は 8 に切り替え。

```
# alternatives --config java 
```

#Tomcatのインストール 
Tomcatの配布ページからtar.gz形式のファイル【apache-tomcat-8.5.34.tar.gz】をダウンロードする 

- https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.34/bin/
 




ダウンロードしたファイルをFTPで転送(適当に/var/www/html/testとかWebサーバ構築のときにFTPアクセスを設定したディレクトリアップ)し、下記コマンドでCentOS上で展開。


```
# tar xvfz apache-tomcat-8.5.34.tar.gz 
```

展開したフォルダを /usr/local ディレクトリ へ移動させる

```
# mv apache-tomcat-8.5.34 /usr/local 
```
【tomcat】という名称でアクセスできるようにシンボリックリンクを設定する

```
# cd /usr/local 
# ln -s apache-tomcat-8.5.34 tomcat
```

#MySQL Connector/J の配備
データベース毎の差を吸収してくれるもの。
ダウンロードした中に入っている mysql-connector-java-x.x.x-bin.jar を /usr/local/tomcat/lib に移動
https://dev.mysql.com/downloads/connector/j/5.1.html

```
# mv mysql-connector-java-x.x.x-bin.jar /usr/local/tomcat/lib 
```

# Tomcat Web アプリケーションマネージャの設定

以下はTomcatのGUIを使いたい場合に必要な設定。
GUIなくてもwarファイルを/usr/local/tomcat/webappsに移動させれば配置できる。


– /usr/local/tomcat/conf/tomcat-users.xml に以下の 設定を追加する 


```tomcat-users.xml
<role rolename="admin-gui"/>
<role rolename="manager-gui"/>
<user username="【ユーザー名】" password="【パスワード】" roles="admin-gui,manager-gui"/> 

```


ホストマシン側からTomcatの管理画面へのアクセスを許可する
下記2ファイルに以下の設定を追記する

-　/usr/local/tomcat/webapps/manager/METAINF/context.xml
-　/usr/local/tomcat/webapps/host-manager/METAINF/context.xml 


GUIはデフォルトだとローカル以外からアクセスできないように制限されているので外部からアクセスしたい場合は下記のようにするか、またはコメントアウトする。※セキュリティ注意

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

### tomcat用8080 ポートの開放

```
即時反映
# firewall-cmd --zone=public --add-port=8080/tcp
恒久的な設定の反映
# firewall-cmd --zone=public --add-port=8080/tcp --permanent
リロード
# firewall-cmd --reload
設定を確認
# firewall-cmd --list-all
```

### Tomcatの終了、起動
何か変更したら再起動しないと反映されない

```
# /usr/local/tomcat/bin/startup.sh 
# /usr/local/tomcat/bin/shutdown.sh 
```
下記のURLでGUIにアクセスできるようになっていれば成功。

```
http://【VPSのIPアドレス】:8080/
```


#Tomcatをサービスとして登録する 
サーバーの起動と一緒にTomcatが起動するように設定する。
ユーザを作成する

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


tomcat ディレクトリのオーナーを tomcat に 変更する 

```
# chown -R tomcat /usr/local/apache-tomcat-8.x.x 
```
###起動スクリプトファイルの作成
```
# vi /etc/init.d/tomcat
```


```/etc/init.d/tomcat
#!/bin/bash
#
# Startup script for the Tomcat Servlet Container
#
# chkconfig: 2345 80 10
# 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

```
起動スクリプトファイルに実行権限を付与する

```
# chmod a+x /etc/init.d/tomcat 
``` 
chkconfigコマンドでサービスの自動開始を有効 にする 

```
# chkconfig tomcat on 
```