概要
SpringBoot1.3からFully Executable Jarとしてビルドして
Linux上のサービスとして簡単に登録できるようになった。
今までは起動シェルを作成し、サービスに登録していたのだけれど
これらをすっきりさせることができそう。
設定手順
gradle準備
build.gradleに以下の記述を追加
springBoot {
executable = true
}
ビルド
いつものgradle build
で事足りる
$ gradle build
配置
profileとか実行環境に関わる設定はconfファイルを作成して設定できる。
confファイルはデフォルトで実行するjar実体と同じ場所にある「jarと同じ名前.conf」を見に行くようになっている。
実はvim等で作成したjarを見ると頭の方に起動スクリプトが自動生成されている。この中身を見るとどのconfを呼んでいるか等がわかるので一読。
今回はdeployというフォルダにjarとconfを配置すると仮定する。
$ mkdir deploy
$ cp -p /xxxx/build/libs/spring-boot.jar /xxxx/deploy/spring-boot.jar
[jarの名前].conf
という名前でjarと同じ場所に配置する
このとき、confファイルはjarのシンボリック名やシンボリックリンクと同じ位置ではいけない。
実体のjar名、位置に配置する
$ vi spring-boot.conf
.......
export JAVA_HOME=/usr/local/jdk1.8
export JAVA_OPTS="-Dspring.profiles.active=production"
export LANG="ja_JP.utf8"
- JAVA_HOME-> service起動する際にJAVA_HOMEが見つかるように指定しておく
- JAVA_OPTS-> ここにprofileやxmxなどを設定することができる
- LANG->メッセージリソースをLANG指定で切り替えている場合とか。service起動時LANGは引き継がれないので。
メモ
JAVA_OPTSでなく環境変数にprofileを設定した場合、logbackが正しく受け取ってくれなかった。
profileはJAVA_OPTSで渡すのがよさそう。
ファイルパーミッションを調整しておく
$ chmod u+x spring-boot.jar
$ chmod o+r spring-boot.conf
メモ
サービスの起動・停止はrootユーザで実行する。
jar自体はjarファイルの所有ユーザで実行される。
confファイルはrootユーザが参照できるようにしておく必要がある
サービスに登録
/etc/init.d
にシンボリックリンクするだけでOK
$ sudo ln -s /xxxx/deploy/spring-boot.jar /etc/init.d/spring-boot
起動・終了
# サービスの起動
$ sudo service spring-boot start
# サービスの停止
$ sudo service spring-boot stop
# サービスの自動起動ON
$ sudo chkconfig spring-boot on
実行ログなど
標準出力はデフォルトで/var/log/[サービス名].log
に出力される
別フォルダや別ファイルに出力するにはconfに以下のような設定をする
SpringBootから出力するlogback経由のログ等は通常どおりjarファイル起点の指定した位置に出力される。
export LOG_FOLDER=/xxxxxx/deploy