Spring Bootプロジェクトのbuild.gradleファイルには、次の構成が必要です。
build.gradle
jar {
baseName = 'your-app'
version = version
}
springBoot {
buildInfo()
executable = true
mainClass = "com.shunya.App"
}
実行可能= true
これは、UNIXシステム(CentosおよびUbuntu)で完全に実行可能なjarを作成するために必要です。
.confファイルを作成する
カスタムJVMプロパティまたはSpring Bootアプリケーション実行引数を構成する場合は、Spring Bootアプリケーション名と同じ名前の.confファイルを作成して、jarファイルと並行に配置できます。
your-app.jarがSpring Bootアプリケーションの名前であることを考慮して、次のファイルを作成できます。
JAVA_OPTS="-Xms64m -Xmx64m"
RUN_ARGS=--spring.profiles.active=prod
LOG_FOLDER=/custom/log/folder
この構成では、Spring Bootアプリケーションに64 MBのRAMを設定し、prodプロファイルをアクティブ化します。
Linuxで新しいユーザーを作成する
セキュリティを強化するには、Spring Bootアプリケーションをサービスとして実行する特定のユーザーを作成する必要があります。
新しいユーザーを作成する
sudo useradd -s /sbin/nologin springboot
Ubuntu / Debianでは、上記のコマンドを次のように変更します。
sudo useradd -s /usr/sbin/nologin springboot
パスワードを設定してください
sudo passwd springboot
SpringBootを実行可能ファイルの所有者にする
chown springboot:springboot your-app.jar
jarファイルの変更を防止
chmod 500 your-app.jar
これにより、jarの権限が構成され、書き込みができず、所有者のSpringbootだけが読み取りまたは実行できるようになります。
オプションで、属性変更(chattr)コマンドを使用して、jarファイルを不変にできます。
sudo chattr +i your-app.jar
対応する.confファイルにも適切な権限を設定する必要があります。.confには、読み取り+実行(オクタル500)アクセスではなく、読み取りアクセス(オクタル400)のみが必要です。
chmod 400 your-app.conf
Systemdサービスを作成する
/etc/systemd/system/your-app.service
[Unit]
Description=Your app description
After=syslog.target
[Service]
User=springboot
ExecStart=/var/myapp/your-app.jar
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
OSによって強制終了された場合、プロセスを自動的に再起動します
以下の2つの属性(RestartおよびRestartSec)を追加して、障害時にプロセスを自動的に再起動します。
/etc/systemd/system/your-app.service
[Service]
User=springboot
ExecStart=/var/myapp/your-app.jar
SuccessExitStatus=143
Restart=always
RestartSec=30
この変更により、障害が発生した場合に30秒の遅延でSpring Bootアプリケーションが再起動します。systemctlコマンドを使用してサービスを停止すると、再起動は行われません。
システム起動時にサービスをスケジュールする
システムの起動時にアプリケーションが自動的に起動するようにフラグを設定するには、次のコマンドを使用します。
システムの起動時にSpring Bootアプリケーションを有効にする
sudo systemctl enable your-app.service
サービスの開始と停止
systemctlは、Ubuntu 16.04 LTSおよび18.04 LTSでプロセスを開始および停止するために使用できます。
プロセスを開始する
sudo systemctl start your-app
プロセスを停止する
sudo systemctl stop your-app
参考文献
https://docs.spring.io/spring-boot/docs/current/reference/html/deployment-install.html