Serverのお勉強のためにWebServerを構築し、JavaApplicationを実行するところまでやってみた。
目次
- 動作環境
- やること
- 構築手順
- 参考サイト
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。
WebServerの構築
本来ならApatch HTTPサーバーを導入するのが良いみたいだが、
TomcatにもWebServerの機能があるようなので、それを使用する(ため、特にインストールしない)。
じゃあ、そもそもApatch HttpServerなんでいらないのでは、と思ったが、tomcatのWebサーバーはおまけみたいなものらしく、パフォーマンスとか考えると、あったほうが良いらしい。
■参考:【社内勉強会】ApacheとTomcat(2017/03/09)
Javaアプリケーションの配置
javaアプリケーションはインストールしたTomcat直下のwebapps(/usr/local/tomcat/webapps/)に配置すれば良いらしい。
この辺も普段意識してないので、よくわからなかった。
以下のサイトがとても分かりやすかった。
とりあえず、以下のコマンドでプロジェクトフォルダを作成
# 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
以下の通り編集して保存する。
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
以下の通り編集して保存する
<?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です!