概要
前回 Web アプリとワーカーを分離しました
更にダッシュボードを追加しましたが Web アプリと同じプロセスで起動するのでセキュリティ的に微妙でした
今回はダッシュボードアプリと Web アプリのプロセスを分離する方法を紹介します
環境
- macOS 26.4.1
- openjdk 26.0.1
- SpringBoot 4.0.6
- jasypt-spring-boot 4.0.4
- jackson-databind 2.21.2
- jobrunr 8.6.1
- gradle 9.5.1
- VSCode 1.121.0
- MySQL 9.6.0
- Redis 8.6.3
ダッシュボード用アプリの作成
JobRunr の設定が必要なので @Import で取り込みます
JobRunrConfig はこちらです
- vim src/main/java/com/example/demo/DashboardApplication.java
package com.example.demo;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import com.example.demo.config.JobRunrConfig;
import com.example.demo.config.JobRunrDashboardProperties;
import com.ulisesbocchio.jasyptspringboot.annotation.EnableEncryptableProperties;
@EnableEncryptableProperties
@Configuration
@EnableAutoConfiguration
@ConfigurationPropertiesScan(basePackageClasses = JobRunrDashboardProperties.class)
@Import(JobRunrConfig.class)
public class DashboardApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(DashboardApplication.class).profiles("dashboard").run(args);
}
}
ダッシュボード用設定の追加
Web アプリとしての設定とワーカーとしてのはオフにしダッシュボードだけ有効にします
- vim src/main/resources/application-dashboard.properties
spring.main.web-application-type=none
app.jobrunr.background-job-server.enabled=false
app.jobrunr.dashboard.enabled=true
app.jobrunr.dashboard.port=8000
Web アプリケーションとワーカーの設定は以下の通りです
- vim src/main/resources/application.properties
spring.application.name=demo
# update はアプリケーション起動時に、Entityに対応するテーブルがなければ作成します
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.datasource.url=jdbc:mysql://${MYSQL_HOST:127.0.0.1}:3306/mydatabase
spring.datasource.username=ENC(bFMupckSRHJ/9QmXd1EVTw==)
spring.datasource.password=ENC(QFCt95vHHcJpgm8oKhghkJoEknQv3tF0)
spring.data.redis.host=localhost
spring.data.redis.port=6379
# Web起動時はJobRunrのBackgroundJobServerを無効化(worker jarで有効化)
app.jobrunr.background-job-server.enabled=false
# JobRunr Dashboard (管理画面)
app.jobrunr.dashboard.enabled=false
app.jobrunr.dashboard.port=8000
# Jasypt 暗号化キーの設定(環境変数から取得)
jasypt.encryptor.algorithm=PBEWithMD5AndDES
jasypt.encryptor.iv-generator-classname=org.jasypt.iv.NoIvGenerator
jasypt.encryptor.password=${JASYPT_PASSWORD:default_password}
- vim src/main/resources/application-worker.properties
spring.main.web-application-type=none
app.jobrunr.background-job-server.enabled=true
app.jobrunr.dashboard.enabled=false
build.gradle の修正
ダッシュボードアプリを起動するタスクとダッシュボード用の jar を作成するタスクを追加します
- vim build.gradle
tasks.register('dashboardBootRun', org.springframework.boot.gradle.tasks.run.BootRun) {
group = 'application'
description = 'Runs the JobRunr dashboard process using DashboardApplication.'
mainClass = 'com.example.demo.DashboardApplication'
classpath = sourceSets.main.runtimeClasspath
}
tasks.register('dashboardBootJar', org.springframework.boot.gradle.tasks.bundling.BootJar) {
group = 'build'
description = 'Builds the executable dashboard jar.'
archiveClassifier = 'dashboard'
mainClass = 'com.example.demo.DashboardApplication'
classpath = sourceSets.main.runtimeClasspath
targetJavaVersion = webBootJar.get().targetJavaVersion
dependsOn tasks.named('classes')
}
tasks.named('assemble') {
dependsOn tasks.named('workerBootJar')
dependsOn tasks.named('workerBootJar'), tasks.named('dashboardBootJar')
}
動作確認
-
./gradlew clean && ./gradlew dashboardBootRun -Dspring-boot.run.mainClass=com.example.demo.DashboardApplication --args='--jasypt.encryptor.password=asdfghjkl'
で localhost:8000/dashboard にアクセスすると JobRunr のダッシュボードにアクセスできます
jar は JASYPT_PASSWORD="xxx" ./gradlew clean build で作成します
-
JASYPT_PASSWORD=asdfghjkl java -jar build/libs/demo-0.0.1-SNAPSHOT-dashboard.jar
で実行します
最後に
SpringBoot のダッシュボード機能を Web アプリケーション本体と分離する方法を紹介しました
MySQL の設定を変更するだけで他のホストでも変更できるので基本はアプリのサーバとは別のサーバで動作させるのがいいでしょう
0 件のコメント:
コメントを投稿