前回のあらすじ
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インストール
上記リンクの手順で、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
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
無事、表示されれば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
ポートを8080にしなくてもApache httpdから引き渡され、tomcatを起動できることを確認
今回の作業では、tomcatのWebアプリケーションマネージャの外部アクセスがハマリポイントだった。設定ファイルの格納先が、ググッて出てきたものの多くがハズレで、経験豊富な上司に相談して、やっと解決できた。
これで、一旦、サーバサイドの環境構築は完了。データベースに関しては、テーブル設計も絡んでくるのでjava開発時にまとめて行うこととする。
次回は、html、Bootstrapあたりの作業をまとめて、掲載する予定。