Amazon（AWS） EC2にJavaアプリをデプロイする方法（war&jar）

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

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

# warファイルのデプロイ

## １、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)
```

## ２、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のインストールは以上です。

## ３、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](https://techviewleo.com/install-java-openjdk-on-amazon-linux-system/)

・[AWS EC2 AmazonLinux2 MySQLをインストールする](https://qiita.com/miriwo/items/eb09c065ee9bb7e8fe06)

・[MySQLのデフォルトパスワードを確認する](https://qiita.com/chii-08/items/a0d41f4bb94309876763)

・[新しいパスワードを設定する(SET PASSWORD 文、ALTER USER文)](https://www.dbonline.jp/mysql/user/index2.html)

・[MySQL ユーザーパスワードポリシー制限を無効にする方法](https://dekiruengineer.com/engineer/mysql_disable_password_policy/)

・[EC2(AmazonLinux2)にJava、Apache、Tomcat9をインストール](https://qiita.com/fftcy-sttkm/items/b3e083df38edded7d82f)

・[AWS EC2のTomcatにWARファイルを手動アップロードする方法](https://confrage.jp/aws-ec2%E3%81%AEtomcat%E3%81%ABwar%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E6%89%8B%E5%8B%95%E3%82%A2%E3%83%83%E3%83%97%E3%83%AD%E3%83%BC%E3%83%89%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/)

・[Linux環境でのjar ファイルの実行](https://katsu-tech.hatenablog.com/entry/2015/01/25/172053)