Amazon Linux Spring Boot Jarファイルをサービスとして登録


今回試した環境は以下

  • Spring Boot
  • Kotlin
  • Gradle
  • EC2(Amazon Linux)
1.jarをサービスとして登録できるようにbuild.gradleに以下を追加
build.gradle.kts
tasks.getByName<BootJar>("bootJar") {
  launchScript()
}
2.jarファイル生成
gradle bootJar
3.jarファイルをサーバーにアップロード
# 手順2の実行後jarファイルが生成されていることを確認
# xxx.jarが生成されていればOK
ls -la ./build/libs/

# 対象のサーバにjarファイルアップロード(ipやpemは各環境に合わせて書き換える)
# ユーザはEC2を使っているので今回はec2-userを利用しています
sftp -i ~/.ssh/xxx.pem [email protected]
put ./build/libs/xxx.jar
4. jarファイルが実行可能か確認
# サーバにssh接続
ssh -i ~/.ssh/xxx.pem [email protected]

# 実行してみる
# 問題なく起動できればプロセスレベルで起動できるところまで確認OK
java -jar  xxx.jar
5.実行時に渡すパラメータを記載したファイルを作成

ファイル名はjarファイルと同じにし拡張子をconfにする。
以下は実行時のプロファイルを指定する例

xxx.conf
RUN_ARGS="--spring.profiles.active=prod"
5.サービス登録するためのファイルを作成
# xxxはservice名
sudo vi /usr/lib/systemd/system/xxx.service
xxx.service
[Unit]
# xxxはサービス名
Description=xxx
After=syslog.target

[Service]
Type=simple
User=ec2-user
Group =ec2-user
# xxxは設置したjarのファイルパス
ExecStart=/home/ec2-user/xxx.jar
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target
6.サービスを開始
# 変更を読み込む
systemctl daemon-reload

# サービスとして登録されていることを確認
systemctl status xxx.service

# サービス開始
sudo systemctl start xxx.service

# 確認
systemctl status xxx.service 
ps aux | grep java

# 上記手順でうまくいかない時はログをみる
# /var/log/messageを確認する
# permissionエラーが出てしまっている時は、 xxx.jarの権限を確認する 744とかで実行権限がついていればOK。