LoginSignup
5
2

More than 3 years have passed since last update.

VPSにWebApplicationServer(Java)を構築する

Last updated at Posted at 2020-07-25

Serverのお勉強のためにWebServerを構築し、JavaApplicationを実行するところまでやってみた。

目次

  1. 動作環境
  2. やること
  3. 構築手順
  4. 参考サイト

1. 動作環境

  • Cent OS7

2. やること

調べたところ、以下をすれば、とりあえず動かすことはできるみたい。

  • Javaの実行環境構築
  • サーブレットコンテナの準備
  • WebServerの構築
  • Javaアプリケーションの配置

3. 構築手順

Javaの実行環境構築

サーバー上でJava実行を実行するために、JDKをインストールする。
以下のサイトが分かりやすかった。
■参考: CentOS 7 に Tomcat 9 を入れてみた

サーバーで以下のコマンドを実行してインストール(JDK8)。

# yum install java-1.8.0-openjdk-devel.x86_64

(他のJDKを検索したい場合は、以下コマンドを実行。)

# yum search openjdk

インストールされていることを以下コマンドで確認。

# java -version

以下のような出力が出ればOK。

openjdk version "1.8.0_252"
OpenJDK Runtime Environment (build 1.8.0_252-b09)
OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)

サーブレットコンテナの準備

Javaサーブレット(サーバー上で動作するJavaプログラム)を動かすために、サーブレットコンテナであるtomcatをインストールする。tomcatってよく聞くけど、よくわからないまま使ってました・・・
まず、Tomcat を動かすためのユーザーを追加(ユーザー名:tomcat)。

# useradd -s /sbin/nologin tomcat

※ /sbin/nologin はログインできないユーザーを意味するらしい。ここで作ったユーザー「tomcat」は、サービス起動用のスクリプト?(systemd)で使うだけなので、ログインできる必要がないっぽい。

■参考:ログインできないユーザでコマンドを実行する方法+おまけ

次に、Tomcatのインストールのため、ファイルをサーバーにダウンロード。

# curl -O https://ftp.jaist.ac.jp/pub/apache/tomcat/tomcat-9/v9.0.37/bin/apache-tomcat-9.0.37.tar.gz

※ 「https://ftp.jaist.ac.jp/pub/apache/tomcat/tomcat-9/v9.0.37/bin/apache-tomcat-9.0.37.tar.gz」の部分は変わる可能性あり。以下で確認。
tomcatのダウンロードサイト

ダウンロードしたファイルを以下コマンドで解凍。

# tar -xzvf apache-tomcat-9.0.37.tar.gz

以下コマンドで/usr/local/tomcat に移動。

# mv apache-tomcat-9.0.37 /usr/local/tomcat

以下コマンドでユーザー所有者:グループ所有者を先ほど作成したユーザー「tomcat」に変更

# chown -R tomcat:tomcat /usr/local/tomcat

Tomcatをサーバーが実行可能なサービスとして認識させるため、以下のコマンドでsystemd unit ファイルを作成する。
※ CentOS7からsystemd というので、サービスを管理しているらしい。

■参考:これからSystemd入門する

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

作成したファイルに以下の内容を記載し、保存。
正直、内容はよくわかってない。こういうサービスを作るよ、ってことを宣言してるという理解。

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

[Service]
User=tomcat
Group=tomcat
Type=oneshot
PIDFile=/usr/local/tomcat/tomcat.pid
RemainAfterExit=yes

ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
ExecReStart=/usr/local/tomcat/bin/shutdown.sh;/usr/local/tomcat/bin/startup.sh

[Install]
WantedBy=multi-user.target

さらに、作成したファイルの読み込み権限・書き込み権限・実行権限を設定する

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

※「所有者:読み込み・書き込み・実行可能」「所有グループ:読み込み・実行可能」「それ以外(他人):読み込み・実行可能」を設定している

■参考:【 chmod 】コマンド――ファイル/ディレクトリのパーミッション(許可属性)を変更する

自動起動設定をし、サービスを有効にする

# systemctl enable tomcat
Created symlink from /etc/systemd/system/multi-user.target.wants/tomcat.service to /etc/systemd/system/tomcat.service.
# systemctl start tomcat

Tomcatを起動する。

以下のURLにアクセスし、tomcatデフォルトの画面が出たらOK。

http://サーバーのIPアドレス:8080/

スクリーンショット 2020-07-25 18.18.47.png

WebServerの構築

本来ならApatch HTTPサーバーを導入するのが良いみたいだが、
TomcatにもWebServerの機能があるようなので、それを使用する(ため、特にインストールしない)。
じゃあ、そもそもApatch HttpServerなんでいらないのでは、と思ったが、tomcatのWebサーバーはおまけみたいなものらしく、パフォーマンスとか考えると、あったほうが良いらしい。

■参考:【社内勉強会】ApacheとTomcat(2017/03/09)

Javaアプリケーションの配置

javaアプリケーションはインストールしたTomcat直下のwebapps(/usr/local/tomcat/webapps/)に配置すれば良いらしい。
この辺も普段意識してないので、よくわからなかった。
以下のサイトがとても分かりやすかった。

■参考:TomcatでHelloWorld

とりあえず、以下のコマンドでプロジェクトフォルダを作成

# mkdir /usr/local/tomcat/webapps/javaproject

あとはclassファイルとweb.xmlを作成する。
以下のコマンドで、classesディレクトリを作成。

# mkdir /usr/local/tomcat/webapps/javaproject/WEB-INF/classes

以下のコマンドで、javaソースファイルを作成。

# vi /usr/local/tomcat/webapps/javaproject/WEB-INF/classes/HelloWorld.java

以下の通り編集して保存する。

HelloWorld.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloWorld extends HttpServlet {
    public void doGet(HttpServletRequest request,
    HttpServletResponse response) throws IOException, ServletException {
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("HelloWorld");
        out.println("</html>");
        out.close();
    }    
}

以下のコマンドでコンパイルする。

# cd /usr/local/tomcat/webapps/javaproject/WEB-INF/classes/
# javac -classpath /usr/local/tomcat/lib/servlet-api.jar HelloWorld.java 

同じディレクトリにHelloWorld.classができてたらOK。
あとはweb.xmlを作成して、URLとservletの紐付けする。
以下のコマンドで、web.xmlを作成。

# vi /usr/local/tomcat/webapps/javaproject/WEB-INF/web.xml

以下の通り編集して保存する

web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>HelloWorld</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>
hello
</servlet-name>
<url-pattern>
/servlet/hello
</url-pattern>
</servlet-mapping>

</web-app>

やっと終わりに近づいてきた。ハマりまくったので長かった・・・
以下のコマンドでtomcatを再起動します。

# systemctl restart tomcat

以下のURLにアクセスして、HelloWorldが表示されるとOKです!

http://サーバーのIPアドレス:8080/javaproject/servlet/hello
スクリーンショット 2020-07-25 22.32.50.png

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2