Java
CentOS
Apache
Tomcat
新人プログラマ応援

Webサービス作成までの道のり(その2)

前回のあらすじ

Webサービス作成の経緯とサービス概要の大枠について話した。
詳しくは、こちら「Webサービス作成までの道のり(その1)」。

今回の内容

今回は、サーバの環境構築を行った作業を載せていく。
作業内容は以下のようになる。
・OSインストール
・JDKインストール
・tomcatとApache httpdのインストールと自動起動設定
・tomcatに簡単にデプロイ出来るようにWebアプリーションマネージャの設定
・tomcatとApache httpdの連携
 Apacheにアクセスすることで、tomcatに処理を引き渡すことが出来るようにする

なぜ、流行りのNginxではなく、Apacheにしたのか。それは、今回のサービス内容と機能面から考えた結果、Apacheが好ましいと考えたからだ。
Nginxは、Apacheの抱えるC10K問題を解決する為に生まれたようだが、今回のサービスは、同時に1万人ものアクセスが行われるようなサービスではない。
そして、イベント駆動型のNginxはメモリ消費が少なく処理は早いが、はじめから多くの機能がついていない。ApacheであればWebサーバとしての機能がはじめから豊富に備わっているので、作業工数を省けて経験の浅い私でも構築し易いと考えたからだ。

環境構築

OSインストール

VMwareにCentOS7.4インストール

上記リンクの手順で、CentOSをVMwareにインストールする。私は、普段からOSにはCentOSをメインで使っている。人気で言ったらUbuntuかもしれないが、そもそもLinuxはサーバ用途でしか使っていないので、GUIをメインで使うことがない。その為、Ubuntuに魅力を感じない。また、アップデート頻度の多いUbuntuには不安感を感じてしまう。
CentOSは、RHELクローンで安定感があり、エンタープライズ用として企業で使う頻度が高い為、今後の為にも慣れておきたいのはある。だが、一番は現場でRHELを使ってて一番使いやすいからというのが大きい。

JDKインストール

# yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel 

tomcatユーザ作成

セキュリティを考えてtomcat用の専用ユーザをログインシェルを作らずに作成

# useradd -s /sbin/nologin tomcat

tomcatのダウンロード

# cd /opt
# wget http://ftp.riken.jp/net/apache/tomcat/tomcat-9/v9.0.8/bin/apache-tomcat-9.0.8.tar.gz

yumでもインストールは出来るが、デフォルトでtomcat7がインストールされた。yumリポジトリを編集すれば最新版をインストールできるだろうが面倒なので、直接パッケージをダウンロードして展開する。

tomcatを展開

# tar -xvzf apache-tomcat-9.0.8.tar.gz 

シンボリックリンク作成

バージョン変更も考えてtomcatディレクトリをシンボリックリンクで管理

# ln -s /opt/apache-tomcat-9.0.8 /opt/tomcat

環境変数の設定

以下の内容を追加

# vi /etc/profile

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64
export JRE_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64/jre
export CATALINA_HOME=/opt/tomcat

反映

# source /etc/profile

反映確認

# /opt/tomcat/bin/version.sh

Using CATALINA_BASE:   /opt/tomcat
Using CATALINA_HOME:   /opt/tomcat
Using CATALINA_TMPDIR: /opt/tomcat/temp
Using JRE_HOME:        /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64/jre
Using CLASSPATH:       /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar
Server version: Apache Tomcat/9.0.8
Server built:   Apr 27 2018 19:32:00 UTC
Server number:  9.0.8.0
OS Name:        Linux
OS Version:     3.10.0-693.el7.x86_64
Architecture:   amd64
JVM Version:    1.8.0_171-b10
JVM Vendor:     Oracle Corporation

firewall設定

現在の設定を確認

# firewall-cmd --list-services --zone=public --permanent

ssh dhcpv6-client

tomcatをここに追加していく

サービス追加
新規ファイルを作成し、以下の内容を追加

# vi /etc/firewalld/services/tomcat.xml

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>Apache Tomcat 9</short>
  <description>Apache Tomcat 9</description>
  <port protocol="tcp" port="8080"/>
</service>

設定を反映

# firewall-cmd --add-service=tomcat --zone=public --permanent
# firewall-cmd --reload

確認

# firewall-cmd --list-services --zone=public --permanent
ssh dhcpv6-client tomcat

SELinux無効化

SELINUXをdisabledに変更

# vi /etc/selinux/config

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

再起動

# reboot

再起動後に設定確認

# getenforce
  Disabled

tomcat起動

# /opt/tomcat/bin/startup.sh
Using CATALINA_BASE:   /opt/tomcat
Using CATALINA_HOME:   /opt/tomcat
Using CATALINA_TMPDIR: /opt/tomcat/temp
Using JRE_HOME:        /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64/jre
Using CLASSPATH:       /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar
Tomcat started.

ブラウザでも起動を確認
http://localhost:8080
https://gyazo.com/56aab39d87ab6e6c5b058efd195376e0

tomcat自動起動設定

新規ファイルでtomcatのサービスファイルを作成

# vi /etc/systemd/system/tomcat.service

[Unit]
Description=Apache Tomcat 9
After=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

反映

# systemctl daemon-reload

自動起動有効

# systemctl enable tomcat

user,groupはtomcatに変更

# chown -R tomcat:tomcat /opt/tomcat

自動起動の確認

# reboot

再起動後にステータスを確認。activeになっていること。

# systemctl status tomcat 
● tomcat.service - Apache Tomcat 9
   Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; vendor preset: disabled)
   Active: active (exited)

念の為、pcブラウザで表示確認
http://[IPアドレス]:8080

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

webアプリの配備や管理をGUIで行えるようにする。
以下の記述をファイルに追加。※XXXXは自身の設定したい管理者名とパス

# vi /opt/tomcat/conf/tomcat-users.xml

<role rolename="manager-gui"/>
<user username="XXXX" password="XXXX" roles="manager-gui"/>

外部端末からもアクセスを可能にする。
現状では、localhostからしかアクセスできない為、allowの設定を修正

# vi /opt/tomcat/webapps/manager/META-INF/context.xml

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

再起動し、設定反映

# systemctl restart tomcat

外部からアクセス
http://IPアドレス:8080/manager/html
https://gyazo.com/fd312f8dc485aa6a6e44b7270cc5b0a7

無事、表示されればOK

Apache httpdのインストールと設定

インストール

# yum install httpd

確認

# httpd -version
Server version: Apache/2.4.6 (CentOS)
Server built:   Apr 20 2018 18:10:38

firewall設定

# firewall-cmd  --add-service=http  --permanent
# firewall-cmd --reload

Apache自動起動設定

# systemctl enable httpd

設定確認
enabledになっていることを確認

# systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: inactive (dead)

サービス起動確認
reboot後、ステータスを確認

# systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running)

AJPプロトコルでapacheとtomcatの連携

AJPプロトコルの設定があることを確認

# view /opt/tomcat/conf/server.xml

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

モジュールの有効設定
以下の2つのモジュールを確認。コメントされていれば、コメントをとる。

# vi /etc/httpd/conf.modules.d/00-proxy.conf

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

これだけでは、有効にしただけなので、続けてApache httpdのリクエストをすべてtomcatに引き渡す為の設定を追加。

ProxyPass / ajp://localhost:8009/

Apache httpdの再起動を行い、起動を確認

# systemctl restart httpd

https://gyazo.com/2fe182fbafc4bd9b07cbbe83609221ed

ポートを8080にしなくてもApache httpdから引き渡され、tomcatを起動できることを確認

今回の作業では、tomcatのWebアプリケーションマネージャの外部アクセスがハマリポイントだった。設定ファイルの格納先が、ググッて出てきたものの多くがハズレで、経験豊富な上司に相談して、やっと解決できた。
これで、一旦、サーバサイドの環境構築は完了。データベースに関しては、テーブル設計も絡んでくるのでjava開発時にまとめて行うこととする。
次回は、html、Bootstrapあたりの作業をまとめて、掲載する予定。