1
Help us understand the problem. What are the problem?

posted at

updated at

Amazon EC2にJavaアプリをデプロイする方法(war&jar)

Amazon EC2にJavaアプリをデプロイする方法をwarファイルとjarファイルそれぞれメモとしてまとめます。

これはAWSでEC2インスタンスを作っている前提でまとめていますので、ご了承願います。ちなみにEC2はLinux2です。

warファイルのデプロイ

1、EC2にJava17をインストール

EC2にJava17をインストールします。Javaのバージョンは適宜読み替えてください。

OpenJDKをダウンロード

$ wget https://download.java.net/java/GA/jdk17/0d483333a00540d886896bac774ff48b/35/GPL/openjdk-17_linux-x64_bin.tar.gz

ダウンロードしたものを展開

$ tar xvf openjdk-17_linux-x64_bin.tar.gz

展開したものを移動

$ sudo mv jdk-17 /opt/

パスを通す

$ sudo tee /etc/profile.d/jdk.sh <<EOF
export JAVA_HOME=/opt/jdk-17
export PATH=\$PATH:\$JAVA_HOME/bin
EOF

変更を保存

$ source /etc/profile.d/jdk.sh

パスを確認

$ echo $JAVA_HOME
/opt/jdk-17

Javaがインストールされているか確認

$ java --version
openjdk 17 2021-09-14
OpenJDK Runtime Environment (build 17+35-2724)
OpenJDK 64-Bit Server VM (build 17+35-2724, mixed mode, sharing)

2、MySQLをインストール

EC2にMySQLをインストールします。他のDBをインストールする場合は読み替えてください。

yumをアップデート

$ sudo yum update

MariaDB用パッケージを削除

$ sudo yum remove mariadb-*

MySQLのリポジトリをyumにインストール

$ sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-5.noarch.rpm

MySQLに必要なパッケージを取得

$ sudo yum install --enablerepo=mysql80-community mysql-community-server
$ sudo yum install --enablerepo=mysql80-community mysql-community-devel

MySQL関連のパッケージを出力

$ yum list installed | grep mysql

下記のようになればOK

mysql-community-client.x86_64         8.0.28-1.el7                   @mysql80-community
mysql-community-client-plugins.x86_64 8.0.28-1.el7                   @mysql80-community
mysql-community-common.x86_64         8.0.28-1.el7                   @mysql80-community
mysql-community-devel.x86_64          8.0.28-1.el7                   @mysql80-community
mysql-community-icu-data-files.x86_64 8.0.28-1.el7                   @mysql80-community
mysql-community-libs.x86_64           8.0.28-1.el7                   @mysql80-community
mysql-community-server.x86_64         8.0.28-1.el7                   @mysql80-community
mysql80-community-release.noarch      el7-5                          installed

logファイルを作成

$ sudo touch /var/log/mysqld.log

mysqldを起動

$ sudo systemctl start mysqld

mysqldの状態を確認

$ systemctl status mysqld.service

下記のようになればOK

         ● mysqld.service - MySQL Server
    Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
    Active: active (running) since Mon 2020-06-08 14:35:25 UTC; 25s ago
      Docs: man:mysqld(8)
            http://dev.mysql.com/doc/refman/en/using-systemd.html
   Process: 11493 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
  Main PID: 11566 (mysqld)
    Status: "Server is operational"
    CGroup: /system.slice/mysqld.service
            └─11566 /usr/sbin/mysqld

下記のコマンドでmysqldがインスタンスの起動と同時に起動するように設定

$ sudo systemctl enable mysqld

今のままではMySQLにログインできないので、パスワードを確認して変更します。

デフォルトパスワードを確認

$ sudo cat /var/log/mysqld.log | grep password
2019-12-13T06:12:17.402781Z 1 [Note] A temporary password is generated for root@localhost: <初期パスワード>

パスワードをコピーし、下記でログイン

$ mysql -u root -p
Enter password: <初期パスワード>

デフォルトパスワードを変更

ALTER USER root@localhost IDENTIFIED BY '新しいパスワード';

この時点でパスワードの強度はMEDIUMになっているので、下記の点を守って設定します。

・8文字以上
・英大文字、英小文字、数字、記号(-_@など)を少なくとも1つずつ含める

パスワードを変更したら下記でパスワードポリシーを確認

show global variables like 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password.check_user_name    | ON     |
| validate_password.dictionary_file    |        |
| validate_password.length             | 8      |
| validate_password.mixed_case_count   | 1      |
| validate_password.number_count       | 1      |
| validate_password.policy             | MEDIUM |
| validate_password.special_char_count | 1      |
+--------------------------------------+--------+

validate_password.policyがMEDIUMになっているかと思います。面倒なのでLOWに変えます。

set global validate_password.policy=LOW;

より簡単なパスワードに変更

ALTER USER root@localhost IDENTIFIED BY '新しいパスワード';

今回は以下のように変更します。

・8文字以上
・英小文字、数字を1つずつ含める

文字数も少なくしたい場合は以下で変更できます。

validate_password.length=文字数

exitでログアウトしてもう一度ログインして確認してください。

MySQLのインストールは以上です。

3、tomcat9のインストール

warファイルをデプロイする場合はtomcatが必要です。jarファイルの場合はいりません。

またJava17の場合はtomcat9出ないと動きません。違うバージョンのtomcatをインストールする場合は適宜読み替えてください。

tomcat9をダウンロード

$ curl -0 https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.62/bin/apache-tomcat-9.0.62.tar.gz

tomcatのバージョンは適宜読み替えます。tomcatのダウンロードページから、確認してください。
https://tomcat.apache.org/download-90.cgi

ページの下の方のCoreのtar.gzのリンクを確認してください。

次にダウンロードしたtomcatを展開

$ tar -xvzf apache-tomcat-9.0.62.tar.gz

/opt/tomcat-9に移動

$ sudo mv ~/apache-tomcat-9.0.62 /opt/tomcat-9

あとはwarファイルをEC2に送ってインストールしたtomcatのwebapps配下に置き、tomcatを起動するだけです。

一度EC2からログアウトして

$ scp -i 秘密鍵 sample.war ec2-user@グローバルIP:~

もう一度EC2にログインして

$ sudo mv sample.war /opt/tomcat-9/webapps
$ cd /opt/tomcat-9/bin
$ sh ./start.sh

以上でwarファイルのデプロイは終わりです。

jarファイルのデプロイ

jarファイルの場合はJDKとMySQLをインストールして、

$ java -jar jarファイル名

するだけです。

サービス化したい場合は

$ nohup java -jar jarファイル名 > out.log > err.log &

停止するにはプロセスをkillします。

$ ps ax | grep java
4027 ?        Sl     0:47 java -jar jarファイル名
4778 pts/0    S+     0:00 grep --color=auto java
$ kill -9 4027

参考文献

Install Java 17 (OpenJDK 17) on Amazon Linux 2

AWS EC2 AmazonLinux2 MySQLをインストールする

MySQLのデフォルトパスワードを確認する

新しいパスワードを設定する(SET PASSWORD 文、ALTER USER文)

MySQL ユーザーパスワードポリシー制限を無効にする方法

EC2(AmazonLinux2)にJava、Apache、Tomcat9をインストール

AWS EC2のTomcatにWARファイルを手動アップロードする方法

Linux環境でのjar ファイルの実行

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
1
Help us understand the problem. What are the problem?