【CentOS】【Java】VPSにApacheとTomcatを導入するには

こんにちは、くまごろーです。
今回は、VPS上にwebサーバー(Apache)とアプリケーションサーバー(Tomcat)を導入するまでの流れをまとめました。本当は連携させるところまでやりたかったけど、かなり長くなりそうなのでやめました。ちなみに、VPSに各種サーバーを導入する前にやる初期設定は、過去の記事でまとめてます。
 
【CentOS】VPSにTomcatを導入したいので、Linuxの初期設定をやってみた。 - くまごろーのプログラミングメモ

 私はApache導入まではすんなりいったんだけど、tomcatのテストページを「http://IPアドレス:8080」で表示させるのにすごい苦戦しました。結局、firewallの設定ができてなかったのが問題だったんですが・・・
わかる人にはすごい簡単なことなんだろうなあ・・・その内「こんなことで苦戦してたのか、なつかしいなあ」なんて思えるようになりたいな(-"-)
 
 
1 Java8をインストールする(OpenJDK)
 これがなければJavaアプリが動かない。CentOS上で開発する予定がないのなら、ランタイムのみのインストールで十分。
 
(1)ランタイムをインストールする場合
 以下のコマンドを入力。

$ sudo yum install java-1.8.0-openjdk

 
(2)開発環境をインストールする場合

$ sudo yum install java-1.8.0-openjdk-devel

正常にインストールが完了していれば、

$ java -version

と打つと

openjdk version "1.8.0_262"
OpenJDK Runtime Environment (build 1.8.0_262-b10)
OpenJDK 64-Bit Server VM (build 25.262-b10, mixed mode)

のように表示されます。


2 Apacheをインストールする
 Apacheとは、Linuxで使われているWebサーバーとして最も高いシェアを持っているソフトウェアです。今回はバージョン「2.4.6」をインストールします。
 
(1)インストール方法

$ sudo yum install httpd

 
(2)Apacheを起動する

$ sudo systemctl start httpd.service

※ システムを再起動したときにApacheも自動的に起動するようにするには、以下のコマンド。

$ sudo systemctl enable httpd.service

※ Apacheの状態を確認するには以下のコマンド。

$ sudo systemctl status http.service

 
(3)ファイアウォールを設定する
 デフォルトのファイアウォール設定では、Webサーバーへのアクセスが弾かれるようになっています。80番ポートへのアクセスを許可します。

$ sudo firewall-cmd --permanent --add-service=http

「success」と表示されたら、以下のコマンドでリロードします。

$ sudo firewalld-cmd --reload

※ ファイアウォールの状態を確かめるには

$ systemctl status firewalld

※ どのサービスが許可されてるのか確かめるには

$ sudo firewall-cmd --list-all


この時点で、ブラウザに「http://VPSIPアドレス/」を入力すると、Apacheのテストページが表示されるようになっているはず。


 
3 Tomcatをインストールする
 
(1)任意のフォルダにTomcatをインストールします。(今回は"/opt"にします。)現時点の最新版「9.0.37」をインストールします。最新版を確認するには以下のページ
http://tomcat.apache.org/download-90.cgi

$ cd /opt
$ sudo wget http://ftp.riken.jp/net/apache/tomcat/
          tomcat-9/v9.0.37/bin/apache-tomcat-9.0.37.tar.gz

 
(2)ダウンロードした「apache-tomcat9.0.37.tar.gz」はgzip形式で圧縮されてるので、次のコマンドで解凍します。

$ tar -xzvf ~/apache-tomcat-9.0.37.tar.gz

 
(3)次に、Tomcatを動作させるための専用ユーザーを追加します。

$ sudo useradd -s /sbin/nologin tomcat

※ このユーザーはtomcat専用で、このユーザーで実際にログインして何かやるということはありません。

先ほど解凍した「tomcat9.0.37」の所有者をtomcatに変更します。

$ chown -R tomcat:tomcat /opt/apache-tomcat-9.0.37

 
(4)Tomcatのユニットファイルを作成します。このファイル、Linuxの「Systemd」というサービスを管理する機能を利用して、プログラムを自動起動させたりするのに必要だそうで・・・
「/etc/systemc/system/tomcat.service」ファイルを、以下の内容で作成します。

[Unit]
Description=Apache Tomcat 9
After=network.target

[Service]
User=tomcat
Group=tomcat
Type=oneshot
PIDFile=/opt/apache-tomcat-9.0.37/tomcat.pid
RemainAfterExit=yes

ExecStart=/opt/apache-tomcat-9.0.37/bin/startup.sh
ExecStop=/opt/apache-tomcat-9.0.37/bin/shutdown.sh
ExecReStart=/opt/apache-tomcat-9.0.37/bin/shutdown.sh;/opt/apache-tomcat-9.0.37/bin/startup.sh

[Install]
WantedBy=multi-user.target

次に、このファイルの権限を変更します。

$ chmod 755 /etc/systemd/system/tomcat.service

ここまできたら、以下のコマンドを打って

$ systemctl enable tomcat

tomcatを有効にします。
 
(5)ファイアウォールの設定
 Apacheと同様、tomcatファイアウォールの設定をやります。Apacheファイアウォールの許可リストに追加するには簡単だったけど、tomcatを追加するには、いくつか手続きがいるようです。さっきのユニットファイル作成もそうだったけど、Apacheyumでインストールしたからかな?正直よくわかってません。(-_-)
ユーザーがfirewallに適用するサービスを追加するには、xmlファイルを「/etc/firewalld/services」内に設置しなければなりません。というわけで、「/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>

そして、tomcatの通信を許可させるために、以下のコマンドを入力します。

$ sudo firewalld-cmd --add-service=tomcat --zone=public --permanent
$ sudo firewall-cmd --reload

※ Apacheの時にも紹介しましたが、以下のコマンドで許可されてるサービスを確認できます。

$ sudo firewall-cmd --list-services --zone=public --permanent

ここに「tomcat」の表示があればOKです。
 
 
ここまでやったら、「http://VPSIPアドレス:8080」でtomcatのテストページが表示されるはずです・・・