[WIP][AWS]EC2でSpringBootアプリケーションを実行する
SpringBootで開発したWebアプリケーションをEC2で実行するまでの手順をまとめます。
jarファイルとwarファイルの2通りの実行方法がありますので両方まとめます。主な違いは以下の通りです。
jarファイル | 通常のJavaアプリケーションをパッケージングした内容で、SpringBootの場合、tomcatを内包している。そのため、jarファイル単独で実行できる。 |
---|---|
warファイル | Webアプリケーション向けにパッケージングされている。tomcat上にデプロイして実行する。 |
なお、EC2の構築については以下記事で構築したものを使います。
https://www.s-watanabe.work/2023/05/awsamazon-ec2.html
環境について
EC2プラットフォーム | Ubuntu 22.04.3 LTS |
---|---|
ローカルビルド環境 | Gradle 8.3 |
JDKバージョン (ローカル/EC2) |
openjdk version "17.0.9" 2023-10-17 |
jarファイルでの実行方法
ローカル(WSL)での作業
gradleインストール
sudo add-apt-repository ppa:cwchien/gradle sudo apt update sudo apt upgrade gradle sudo apt autoremove
確認
$ gradle -v ------------------------------------------------------------ Gradle 8.3 ------------------------------------------------------------
jarファイル作成
build.gradle修正
以下を追加する。Main-Classはmainメソッドを持つクラスを指定する。
jar {
manifest {
attributes 'Main-Class': 'TestApplication'
}
}
ビルド実行
gradle build
ビルドが完了すると build/libs/ 配下にjarファイルが作成される。
$ ls build/libs/ application-0.0.1-SNAPSHOT.jar
jarファイルをEC2インスタンスへアップロード
scp -i test-key.pem build/libs/application-0.0.1-SNAPSHOT.jar ubuntu@ec2-xx-xx-xx-xx.ap-northeast-1.compute.amazonaws.com:~
EC2での作業
SSHログイン
scp -i test-key.pem ubuntu@ec2-xx-xx-xx-xx.ap-northeast-1.compute.amazonaws.com
ホームディレクトリにjarファイルがアップロードされていることを確認する。
Apacheアンインストール
WebサーバーにはTomcatを使用するので、前回の記事で動作確認のためにインストールしたApacheは削除する。
sudo systemctl stop apache2 sudo apt purge apache2
java17インストール
sudo apt install -y openjdk-17-jre
確認
$ java -version openjdk version "17.0.9" 2023-10-17
jarファイル実行
java -jar ~/application-0.0.1-SNAPSHOT.jar
セキュリティグループの編集
SpringBootをjarファイルで実行した場合、ポート番号は8080が使用されるため、アクセスできるようにインバウンドルールを追加する。ここではひとまず動作確認のためなのですべてのトラフィックを許可している。
動作確認
ブラウザ上でアクセスしてトップページが開ければOK
http://ec2-xx-xx-xx-xx.ap-northeast-1.compute.amazonaws.com/{context-path}
nohupコマンドで実行
セッションを離れても裏で実行したままにしておくには、nohupコマンドを使用する。
実行方法
nohup java -jar application-0.0.1-SNAPSHOT.jar &
終了方法
終了する場合は、psコマンドでプロセスIDを確認し、killするばOK
$ ps PID TTY TIME CMD 6309 pts/0 00:00:00 bash 6485 pts/0 00:00:07 java 6499 pts/0 00:00:00 ps $ kill 6485 $ ps PID TTY TIME CMD 6309 pts/0 00:00:00 bash 6520 pts/0 00:00:00 ps [1]+ Exit 143 nohup java -jar application-0.0.1-SNAPSHOT.jar
warファイルでの実行方法
ローカル(WSL)での作業
warファイル作成
build.gradle修正
pluginsに以下を追加
id 'war'
適当なところに以下を追加
bootWar {
archiveFileName = 'application.war'
}
ビルド実行
gradle build
ビルドが完了すると build/libs/ 配下にjarファイルが作成される。
$ ls build/libs/ application.war
warファイルをEC2インスタンスへアップロード
scp -i test-key.pem build/libs/application.war ubuntu@ec2-xx-xx-xx-xx.ap-northeast-1.compute.amazonaws.com:~
EC2での作業
SSHログイン
scp -i test-key.pem ubuntu@ec2-xx-xx-xx-xx.ap-northeast-1.compute.amazonaws.com
ホームディレクトリにwarファイルがアップロードされていることを確認する。
Tomcat10のインストール
curl -O http://ftp.riken.jp/net/apache/tomcat/tomcat-10/v10.1.16/bin/apache-tomcat-10.1.16.tar.gz tar xvzf apache-tomcat-10.1.16.tar.gz sudo mv apache-tomcat-10.1.16/ /usr/libexec/tomcat10 sudo useradd -M -d /usr/libexec/tomcat10 tomcat sudo chown -R tomcat. /usr/libexec/tomcat10
設定ファイル作成
sudo vi /usr/lib/systemd/system/tomcat10.service
[Unit]
Description=Apache Tomcat 10
After=network.target
[Service]
Type=oneshot
ExecStart=/usr/libexec/tomcat10/bin/startup.sh
ExecStop=/usr/libexec/tomcat10/bin/shutdown.sh
RemainAfterExit=yes
User=tomcat
Group=tomcat
[Install]
WantedBy=multi-user.target
ポート番号変更
sudo vim /usr/libexec/tomcat10/conf/server.xml
8080 → 80
tomcatサービススタート
sudo /usr/libexec/tomcat10/bin/startup.sh
確認
ブラウザ上でアクセスしてTomcatのトップページが開ければOK
http://ec2-xx-xx-xx-xx.ap-northeast-1.compute.amazonaws.com
※ネットワークセキュリティグループの「すべてのトラフィック」を許可する設定はセキュリティの観点から削除しておく。
TODO
※tomcatからwarファイルでの実行方法については作成中
Tomcat Webアプリケーションマネージャ
Tomcat Webアプリケーションマネージャは、webapps配下のWEBアプリケーションの管理を行うことができる。TomcatのトップページからManager Appで開くことができるが、デフォルトの状態では403エラーになってしまう。
EC2上で起動するための設定
tomcatユーザーのパスワードを設定
sudo passwd tomcat
パスワードは任意のものを設定する。
パスワードとロールの設定
設定したパスワードをTomcatユーザー設定ファイルに記載する。
sudo vim /usr/libexec/tomcat10/conf/tomcat-users.xml
以下を追加
<role rolename="manager-gui"/>
<user username="tomcat" password="{設定したパスワード}" roles="manager-gui"/>
Webアプリケーションマネージャのアクセス許可IPリストの設定
デフォルトの状態では実行中のサーバー、つまりEC2インスタンス上のブラウザからしかアクセスできないようになっている。そんなことは不可能なのでこの設定を取り払ってやる。
sudo vim /usr/libexec/tomcat10/webapps/manager/META-INF/context.xml
以下のようにRemoteAddrValueの設定をコメントアウトする。
<!--
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
-->
Tomcatのリスタート
sudo /usr/libexec/tomcat10/bin/shutdown.sh sudo /usr/libexec/tomcat10/bin/startup.sh
確認
TomcatのトップページからManager Appをクリックし、以下のような画面が開ければOK
なお、初回起動時は接続ユーザーとパスワードを聞かれるので、tomcatと設定したパスワードを入力する。
コメント
コメントを投稿