前提
- AmazonLinux2(EC2)
- JDK1.8.0
- MySQL 8.0
- 構成管理はGradle 6.0
- こちらでEC2、RDSによるアプリケーションサーバー環境を構築済み。なお、当初EC2インスタンスをmicroにしていたが、メモリ不足でビルドが失敗したのでmediumにした。
- こちらでTomcatとJDKをインストール済み。今回はApacheは使わずとりあえずTomcatのみで動かす。
- プロジェクトはGitHubからcloneする。
Springを実行するクラスにwarデプロイ用記述を追加
- プロジェクトを作成したとき、自動でSpringを実行するクラスが作成されていると思う(@SpringBootApplicationアノテーションがついているクラス)。
- ここにwarとしてデプロイ可能にするための記述をする。Spring公式を参照した。
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}
Gradleの設定とビルド
Gradleの設定
- war作成用の設定をする。
archiveFileName
はwarの名前となる。archiveName
にしていたら、非推奨とのメッセージが出た。Gradle7.0からはこれだと動かなくなるそう。 - SpringBoot組み込みTomcatが、EC2上のものと競合しないよう設定
- ほかに、自分の場合はSeleniedによる画面テストコードもプロジェクトに含めていたので、これを除外する設定をtest内に記述した。
plugins {
id 'org.springframework.boot' version '2.2.4.RELEASE'
id 'io.spring.dependency-management' version '1.0.9.RELEASE'
id 'java'
id 'war'
}
// ~省略~
war {
enabled = true
archiveFileName = 'sample.war'
}
dependencies {
// ~省略~
providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
}
test {
// ~省略~
exclude 'com/example/demo/ViewTest.class'
}
EC2上でビルド
- ホームディレクトリにWEBアプリのプロジェクトを
git clone
しておく。 - プロジェクト内のapplication.propertiesにRDSの設定を反映させておく。
プロジェクトのapplication.propertiesがあるディレクリにて
$ sudo vim application.properties
application.properties
spring.datasource.url=jdbc:mysql://RDSのエンドポイント:3306/データベース名?serverTimezone=JST
spring.datasource.username=******
spring.datasource.password=***********
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.open-in-view=true
#~省略~
- gradlew buildコマンド実行。buildが成功すると、
project名/build/libs
内にsample.war
が生成される。 - まだ分かっていないところがあるが、
project名-0.0.1-SNAPSHOT.war
というwarも生成されていた(sample.warと中身は同じ?)。
プロジェクトのディレクトリにて
$ ./gradlew build
生成されたwarをTomcatへ配備
-
tomcat/webapps
配下へsample.war
をコピーする。※自分の場合は/opt/tomcat-9/webapps
に配備。
$ cp sample.war /opt/tomcat-9/webapps/
- Tomcat再起動
$ sudo systemctl restart tomcat
↓のようにアクセスするとアプリが動く。
http://EC2のエンドポイント:8080/sample/作成アプリに応じたリクエスト先