【JAVA で Webアプリ開発入門】Spring Boot アプリをデプロイをしてみよう

何の記事???

Java の Webアプリケーション開発のフレームワークである Spring Boot で開発したものを CentOS でデプロイする方法を紹介します。

IDE は Eclipse を想定しています。


モジュールの作成

まずはデプロイするためのモジュールを作成します。
pom.xml で設定していきます。下記コードを追加してください。

<plugin> 
  <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
      <executable>true</executable>
    </configuration>
</plugin>

executable タグがコツです。モジュールは、実行可能 な jarファイル として作成することでデプロイ可能なモジュールとします。

続いて maven のコマンドを使用して実際にモジュールを作成していましょう。
Eclipse の画面を見ていきます。「実行の構成」から Maven ビルドからゴールを clean install にし実行を押すと target 配下に jar ファイルが作成されます。

Eclipse 実行の構成画面
Eclipse 実行の構成

CentOS の設定

次に、デプロイ先である CentOS 側の設定を行なっていきます。

まずは、モジュール(jar ファイル)を実行するために、Java をインストールしていきましょう。この辺は、調べると山ほど記事が出てきますので、ここでは割愛します。

僕は Oracle からダウンロードして下記コマンドで Java をインストールしました。

sudo yum localinstall jdk-8u151-linux-x64.rpm

それでは無事にインストールされているかを見てみましょう。

java --version

きちんと出力されましたか? Java のバージョンが表示されれば OK です!

それでは winscp などでモジュールを CentOS に配置しましょう。 それぞれの使用しているクラウドなどの環境によって異なる部分が大きいため他記事に説明を委ねます。

モジュールの実行確認

モジュールが置いてあるディレクトリで実際にモジュールを起動してみましょう。 実行ログが表示されます。ローカルの時と同じログが表示されることを確認しましょう!

java -jar hoge.jar

hoge.jar の部分は、ご自身のモジュール名に適宜変更してくださいね。
これでたしかに起動はできたのですが、ターミナル(コンソール)を閉じるとサービスは終了してしまいます。

サービスの永続化

起動スクリプトを作成し、サービスとして登録します。/etc/systemd/system/hoge.service を作成します。(hoge.service は好きなファイル名を指定してください。)

ファイルの中身は、以下の通りです。
hogeuser と /home/hoge/api/hoge.jar は各自環境に合わせてください。

[Service]
User=hogeuser
ExecStart=/home/hoge/api/hoge.jar
SuccessExitStatus=143
 
[Install]
WantedBy=multi-user.target

デーモンのリロードを行い、作成したファイルを読み込みましょう。

systemctl daemon-reload

自動起動設定

次にサーバーを起動した時に自動でこのサービスファイルが呼び出されるように設定しましょう。

systemctl enable hoge

hoge の部分は、先ほど作成したサービスファイルの拡張子をのぞいたものを指定してください。

サービスの実行

とうとうサービスを起動してみましょう。さきほど同様 hoge の部分はサービスファイルの拡張子をのぞいた部分を指定してください。

systemctl start hoge

これといった出力はないため、不安になるかも知れません。それはデーモンプロセスといって裏側で実行されたためです。ログファイルにはたしかに Spring の実行ログが出力されているので確認してみてください。

また、systemctl コマンドでステータスを確認することもできます。

systemctl status hoge

緑色であれば正常に実行できています。一方赤が出力される場合は、何かしらエラーが出ています。

先ほど java -jar hoge.jar で正常に実行できている場合は設定の問題です。先ほども実行できてない場合は設定のまえにモジュールに問題があるかも知れません。

このように問題を切り分けて無事にデプロイが完了するようにしましょう。


最後に

Java + Spring Boot を使ってデプロイする方法を見ていきました。
最近ではサーバーレスが流行っているので必要??と思われそうですが、案外知っていても損はないと思います。

是非みなさんもどんどんサービスを公開しましょう〜!!

それではまた次回〜