0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Spring Bootで作成したWebアプリをAWS EC2で公開する手順(パート4)

0
Posted at

はじめに

Spring Bootで作成したWebアプリケーションを、AWSのEC2を利用してインターネット上に公開する手順をまとめることにします。

なお、今回はパート4ですので、パート1のこちらの記事から読むのが望ましいです。

パート2は

  • systemdで自動起動させる
  • Webアプリの停止方法を学ぶ
    をやります。

もくじ

  1. AWSアカウントを作る
  2. EC2を作る
  3. EC2にSSH接続する
  4. EC2にJavaをインストールする
  5. Spring BootアプリをJAR化する
  6. JARをEC2に送る
  7. Spring Bootを起動する
  8. AWSの通信設定をする
  9. ブラウザからアクセスする
  10. systemdで自動起動させる :point_left:
  11. Webアプリの停止方法を学ぶ :point_left:

10. systemdでSpring Bootを自動起動する

前回の方法では、

java -jar MySpringBoot-0.0.1-SNAPSHOT.jar

を手動で実行しています。
しかし、この方法ではSSH接続を切断したり、EC2を再起動したりすると問題があります。

そこでLinuxの起動処などを設定できるsystemdを利用します。
これができると

  • SSHを切断してもSpring Bootが動く
  • EC2を再起動してもSpring Bootが自動起動する
  • systemctl start/stop/status コマンドで管理できる

といったメリットがあります。

10-1. 手動起動しているSpring Bootを停止

java -jarを実行しているターミナルで、

Ctrl + C

を押して停止します。

10-2. JARの場所を確認

EC2 のターミナルで

pwd
ls

を実行し、現在位置を確認します。

例えば、pwdを実行して

/home/ubuntu

が表示され、lsを実行するとjarがある場合、

/home/ubuntu/MySpringBoot-0.0.1-SNAPSHOT.jar

にJARがあることになります。

10-3. systemdのサービスファイルを作成

次のコマンドを実行します。

sudo nano /etc/systemd/system/myspringboot.service

編集画面が開くので、そこに以下を記述します。

[Unit]
Description=My Spring Boot Application
After=network.target

[Service]
User=ubuntu
WorkingDirectory=/home/ubuntu
ExecStart=/usr/bin/java -jar /home/ubuntu/MySpringBoot-0.0.1-SNAPSHOT.jar
Restart=always

[Install]
WantedBy=multi-user.target

ExecStartについて

特に重要なのが、

ExecStart=/usr/bin/java -jar /home/ubuntu/MySpringBoot-0.0.1-SNAPSHOT.jar

です。ここでは、

/usr/bin/java

がJavaの実行ファイル、

/home/ubuntu/MySpringBoot-0.0.1-SNAPSHOT.jar

がSpring BootのJARファイルです。
JARのファイル名や保存場所が違う場合は変更してください。

10-4. 保存する

Ctrl + O

で保存します。その後、

Enter

を押します。保存したら、

Ctrl + X

で終了します。

「Save file under DIFFERENT NAME?」と表示された場合

保存時に、

Save file under DIFFERENT NAME?
Y Yes
N No

と表示された場合は、ファイル名を変更する必要がなければ、

N

を選択します。

10-5. systemdに設定を読み込ませる

次を実行します。

sudo systemctl daemon-reload

10-6. Spring Bootを起動する

次を実行するとSpringBootが起動します。

sudo systemctl start myspringboot

10-7. 起動状態を確認

sudo systemctl status myspringboot

以下のようになれば成功です。

Active: active (running)

10-8. lines 1-21/21 (END) から抜ける

systemctl statusを実行すると、

lines 1-21/21 (END)

という表示になることがあります。

これは表示結果をlessで表示している状態です。

q

キーを押すと通常のターミナルへ戻れます。

10-9. EC2起動時に自動起動する

sudo systemctl enable myspringboot

を実行することで、EC2を再起動した際にもSpring Bootが自動起動するようになります。

11. Webアプリの停止方法を学ぶ

一時的にWebアプリを停止する場合は、

sudo systemctl stop myspringboot

です。状態を確認するには、

sudo systemctl status myspringboot

を実行します。

Active: inactive (dead)

となっていれば停止しています。
再び起動する場合は、

sudo systemctl start myspringboot

です。

まとめ

今回構築した環境は、以下のようになります。

                         Internet
                            │
                            │ :8080
                            ▼
                    ┌───────────────┐
                    │   AWS EC2     │
                    │               │
                    │    Ubuntu     │
                    │       │       │
                    │      Java     │
                    │       │       │
                    │  Spring Boot  │
                    │       │       │
                    │      :8080    │
                    └───────────────┘

Spring Bootのプロセスはsystemdによって管理しています。

EC2起動
   ↓
systemd
   ↓
myspringboot.service
   ↓
java -jar
   ↓
Spring Boot

今回の構成の注意点

今回の構成は、AWSとSpring Bootのデプロイを学習するための構成です。

本番環境として利用する場合は、以下のような構成へ発展させることが望ましいです。

  • HTTPS化
  • ドメイン取得
  • Nginx
  • データベースの分離
  • RDS

などを導入すると、より実践的な構成になります。

また、8080番ポートを0.0.0.0/0で直接公開する設定は、今回のような学習・動作確認では利用できますが、本番環境では8080を直接インターネットへ公開しない構成が望ましいです。

0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?