Amazon(AWS) 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をインストールする
・新しいパスワードを設定する(SET PASSWORD 文、ALTER USER文)
・MySQL ユーザーパスワードポリシー制限を無効にする方法
・EC2(AmazonLinux2)にJava、Apache、Tomcat9をインストール