前回、GCEを利用してApache,Java,Tomcat環境を構築した。
今回はそこにエクリプスで作成した動的Webプロジェクトを配置(デプロイ)してみよう。

NowTimeアプリの作成

実行すると現在時刻を表示するアプリをエクリプスで作ろう。
新規動的WebプロジェクトからNowTimeを作成する。
Tomcatのバージョンは9.0を指定する。

新規サーブレットから以下のようにcontroller.Mainクラスを作成する。

controller.Mainを以下のように編集する。(doGet内を記述)

package controller;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/Main")
public class Main extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		PrintWriter out=response.getWriter();
		String date=new java.util.Date().toString();
		response.setContentType("text/plain;charset=utf8");
		out.print(date);
	}
}

Mainファイルを右クリック->Run as ->Run On Serverを選択

Tomcat9 Serverを選択してfinish
(この際、restart ServerとでたらOKを押す)

現在時刻が表示されたら成功だ!

warファイル作成(Web Application Archive)

今作成した現在時刻を表示するアプリをwarファイルに書き出す。
warファイルとはアプリを動かすのに必要なファイル一式をまとめて、圧縮したものだ。
Web Application Archiveならwaaだと思うのだがなぜかwarだ。
このwarファイルの作成はエクリプスを使っていればワンタッチでできる。

アプリ名を右クリック->Export->Warファイル

どこにファイルを保存するか?と聞かれるのでどこでもいいが今回はデスクトップにNowTimeフォルダを作ってそこに保存することにする。

runtimeにTomcat9が選択されていることを確認してFinish!

確認

ターミナルに行ってファイルができているか確認してみよう。この際、GCEにログインしたままになっている場合は一度Exitする。

以下のコマンドを入力する。

$ cd ~/desktop/NowTime
$ ls
確かに存在している!

GCEにアップロード

このファイルをGCEにアップロードしよう。以下のように入力する。
00.000.00.00の部分は前回メモ帳に貼り付けた自分のIPアドレス
mjpurinのところは自分のユーザー名だ。ちなみにscpは(Secure Copy)の略だ。

$ scp NowTime.war mjpurin@00.000.00.00:/home/mjpurin

確認

ではGCEにつなげてファイルがコピーできているか確認してみよう。

$ ssh mjpurin@00.000.00.00
$ ls -la

おお、確かに届いている。これをTomcatのwebappsに配置しよう。権限の問題があるのでまずはrootになる。suと入力してパスワードを入れる

$ su

続いてmvコマンドでファイルを移動させる

# mv NowTime.war /opt/apache-tomcat-9.0.29/webapps

確認してみよう。

# ls -la /opt/apache-tomcat-9.0.29/webapps

たしかに移動している。それと同時にもう一つNowTimeというフォルダができている。そう、warファイルを配置すると自動的に展開されたフォルダが作成されるのだ。
webappsにアプリを配置できれば残す工程は後少しだ。

proxy-ajp.confファイルの更新

Apacheがリクエストを受け取った際にTomcatに処理を転送する処理を書かなくてはいけない。proxy-ajp.confファイルをvimで開く

# vi /etc/httpd/conf.d/proxy-ajp.conf

そして追加したいURLを以下のように記述する

<Location /docs/>
    ProxyPass ajp://127.0.0.1:8009/docs/
</Location>
<Location /NowTime/>
    ProxyPass ajp://127.0.0.1:8009/NowTime/
</Location>

これで転送設定はOKだ。設定を書き換えたのでApacheを再起動させておこう。

# service httpd restart

ブラウザで確認

さあ、緊張の一瞬だ。ChromeなどのWebブラウザで
http://00.000.00.00/NowTime/Main
にアクセスしてみよう。MainというのはServletで設定した

赤囲みの部分だ。忘れしまった人は確認しておこう。

やった〜!!


おや、時刻がずれてしまっている。VMのTimezoneを設定しておこう。

# timedatectl set-timezone Asia/Tokyo

システムの時刻を変更したのでApacheとTomcatの再起動をかける

# service httpd restart
# service tomcat restart

ブラウザで確認してみよう。

正しい時刻を表示するようになった!

エクリプスで作ったアプリのデプロイ完了

これでエクリプスで作ったアプリを世界中の人に見てもらことができるようになった。以前から非常に要望の多いネタだったのだが記事にするのが大変そうで着手出来ずにいた。今こうして記事にアップすることが出来てホッとしている。

この企画はまだまだ終わりではない、次回は更新やjspと連携などを予定している。