はじめに
SpringBootアプリケーションをEC2にデプロイした手順をまとめる
ご参考
作業
- AWS環境構築
- VPCの作成 から EC2インスタンスの起動
- インバウンドセキュリティグループの設定変更
- EC2にミドルウェアのインストール
- Apache HTTP Serverのインストール
- Apache Tomcatのインストール
- Mysqlのインストール
- デプロイ後各種設定を変更
- デプロイ
- Apacheの設定を変更
- Tomcatの設定を変更
- 動作確認
- AWSのインバウンドセキュリティグループの設定変更
AWS環境構築
VPCの作成 から EC2インスタンスの起動
※ 柔軟にシステムを拡張できるように複数のサブネットを作成
※ 動作を確認できればいいのでEC2インスタンス内にDBを作成
# OSバージョン情報
$ cat /etc/os-release
NAME="Amazon Linux"
VERSION="2023"
ID="amzn"
ID_LIKE="fedora"
VERSION_ID="2023"
PLATFORM_ID="platform:al2023"
PRETTY_NAME="Amazon Linux 2023.5.20240624"
ANSI_COLOR="0;33"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2023"
HOME_URL="https://aws.amazon.com/linux/amazon-linux-2023/"
DOCUMENTATION_URL="https://docs.aws.amazon.com/linux/"
SUPPORT_URL="https://aws.amazon.com/premiumsupport/"
BUG_REPORT_URL="https://github.com/amazonlinux/amazon-linux-2023"
VENDOR_NAME="AWS"
VENDOR_URL="https://aws.amazon.com/"
SUPPORT_END="2028-03-15"
インバウンドセキュリティグループの設定変更
EC2にミドルウェアをインストール
Apache HTTP Serverのインストール
# Apacheのインストール
$ sudo yum -y install httpd
# Apacheの起動
$ sudo systemctl start httpd.service
# Apacheの起動確認
$ sudo systemctl status httpd.service
# サーバー接続時に自動でApacheが起動するよう設定
$ sudo systemctl enable httpd.service
# 動作確認
$ curl "http://{ドメイン}/"
<html><body><h1>It works!</h1></body></html>
Apache Tomcatのインストール
# Tomcatのインストール
$ sudo yum -y install tomcat9
$ sudo yum -y install tomcat9-webapps tomcat9-admin-webapps
# Tomcatの起動確認
$ sudo systemctl start tomcat9.service
# Tomcatの起動確認
$ sudo systemctl status tomcat9.service
# サーバー接続時に自動でTomcatが起動するよう設定
$ sudo systemctl enable tomcat9.service
# 動作確認
$ curl "http://{ドメイン}:8080"
<!DOCTYPE html>
<html lang="en">
:
省略
:
</html>
※ Amazon Linux 2023のリポジトリ
Mysqlのインストール
# MySQL公式リポジトリの追加 (AmazonLinux2023はRHEL9系)
sudo yum localinstall -y https://dev.mysql.com/get/mysql84-community-release-el9-1.noarch.rpm
# mysqlをインストール
$ sudo yum -y install mysql-community-server
# mysqlの起動
$ sudo systemctl start mysqld
# mysqlの起動確認
$ sudo systemctl status mysqld
# サーバー接続時に自動でmysqlが起動するよう設定
$ sudo systemctl enable mysqld
※ 対応OSの確認
デプロイ後各種設定を変更
デプロイ
# warファイルの配置位置を確認
$ ls /usr/share/tomcat9/webapps/
# 権限付与(あまり良くないがめんどくさいので全アクセス権限を付与)
$ sudo chmod 777 /usr/share/tomcat9/webapps
# 転送するとtomcatがwarファイルを展開し自動デプロイする
$ scp -i *.pem {アプリ名}.war ec2-user@xxx.xxx.xxx.xxx:/usr/share/tomcat9/webapps/
$ curl "http://{ドメイン}:8080/{アプリ名}/"
sucess access!!! <- ご自身のアプリケーションの応答
Apacheの設定を変更
- webサーバーが受け付けたリクエストをアプリケーションサーバーに連携するため、mod_proxy_ajp及びmod_proxyモジュールを有効にする
- また、どのパスにアクセスされた場合、Tomcatと連携するのかを設定する
$ cat /etc/httpd/conf.modules.d/00-proxy.conf
# This file configures all the proxy modules:
LoadModule proxy_module modules/mod_proxy.so <- コメントアウトされていたら外す
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so <- コメントアウトされていたら外す
# Apacheで受け付けた全てのリクエストをTomcatで処理
ProxyPass / ajp://localhost:8009/ <- 追記する
Tomcatの設定を変更
$ cat /usr/share/tomcat9/conf/server.xml
<!-- 自動デプロイをtrueにする。 -->
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<!-- コメントアウトを外して設定ONにする。 -->
<!-- アドレス部分を変更する。 -->
<Connector protocol="AJP/1.3"
address="127.0.0.1"
port="8009"
redirectPort="8443"
maxParameterCount="1000"
secretRequired="false"
/>
<!-- コメントアウトして、8080番ポートへのHTTP通信を不可とする。 -->
<!--
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxParameterCount="1000"
/>
-->
-
secretRequired="false"
はセキュリティの観点から非推奨ですので、必要に応じて設定してください - VPCの設定に応じて、ipv4を使用するかipv6を使用するか判断してください
動作確認
# 各種設定の読み込み
$ sudo systemctl restart tomcat9.service
$ sudo systemctl restart httpd.service
$ curl "http://{ドメイン}/{アプリ名}/"
sucess access!!! <- ご自身のアプリケーションの応答
AWSのインバウンドセキュリティグループの設定変更
- 8080ポートへの通信設定を削除する
終わり
初めて書いたので、ご指摘頂けますと幸いです