Edited at

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

More than 1 year has passed since last update.


前回のあらすじ

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あたりの作業をまとめて、掲載する予定。