1
0

SpringBootアプリケーションをEC2にデプロイする手順備忘

Posted at

はじめに

SpringBootアプリケーションをEC2にデプロイした手順をまとめる

ご参考

作業

AWS環境構築
VPCの作成 から EC2インスタンスの起動
インバウンドセキュリティグループの設定変更
EC2にミドルウェアのインストール
Apache HTTP Serverのインストール
Apache Tomcatのインストール
Mysqlのインストール
デプロイ後各種設定を変更
デプロイ
Apacheの設定を変更
Tomcatの設定を変更
動作確認
AWSのインバウンドセキュリティグループの設定変更

AWS環境構築

VPCの作成 から EC2インスタンスの起動

test.drawio.png
※ 柔軟にシステムを拡張できるように複数のサブネットを作成
※ 動作を確認できればいいので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"

インバウンドセキュリティグループの設定変更

スクリーンショット 2024-06-28 23.34.19(2).png
※ 8080ポートへの通信を許可を追加

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と連携するのかを設定する
    apache_tomcat.drawio.png
$ 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ポートへの通信設定を削除する

終わり

初めて書いたので、ご指摘頂けますと幸いです

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0