こんにちは、くまごろーです。
前回のブログで、AWSに構築した環境にSpringBootアプリをデプロイするところまでいきました。
ただ、SpringBootアプリに内蔵されたTomcatを使用しているので、現状ではアプリを起動させることはできても、コンソールを閉じてしまえばアプリが停止してしまいます。
当然24時間稼働させた状態にしたいので、今回はその設定についてまとめます。
1 一言でいうと
Amazon Linux2で、作成したアプリを「サービス化」してしまえばいいらしい。
「httpd」とか「nginx」と同じように。そうすれば
#systemctl start アプリ名
とかのコマンドで起動・停止を管理することができるようになります。
2 手順
(1)アプリを「Fully Executable Jar」という形式のJarファイルにする
「Fully Executable Jar」って?
Spring Bootでは、作成したJARファイルをjava -jarで起動することができますが、UNIX環境でより簡単に起動することができる仕組みです。
Spring Bootのサービス稼働環境 - EatSmartシステム部ブログ
通常のJarと違い、サービスとして起動することができる。(らしい)
ビルドしたJarファイルをこの形式にするには、pom.xmlの
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <executable>true</executable> //ここがポイント </configuration> </plugin> </plugins> </build>
(2).confファイルを作成して、環境変数を設定
上記のJarファイルを格納しているディレクトリに、Jarファイルと同名のconfファイルを作成。環境変数はそこに設定します。
私はRDS(MySQL)への接続設定を環境変数でやっているので、その記述をこちらのconfファイルに移しました。
(3)サービスとして登録する
Amazon Linux2では、/usr/lib/systemd/system/にサービスファイルを作成すればサービスとして登録されるみたい。
[Unit] Description=springboot //サービスの説明 After=syslog.target [Service] User=root ExecStart=/home/application/test.jar //Jarファイルのパス SuccessExitStatus=143 [Install] WantedBy=multi-user.target
この時点で、一応systemctlコマンドが使えるようになります。
が、私はこの後かなり苦戦しました。結局jarファイル&サービスファイルの権限・所有者の設定を変更していないのが原因でした(-_-;)
4 参考