【EC2】EC2にrailsのアプリをデプロイする方法 No.1（ログイン〜環境構築まで）

# はじめに
今回はAWSのEC2を使ってデプロイする方法を解説します。
具体的な設定方法がわからない方はぜひ参考にしてください。

AWSやEC2のサーバー作成方法については下記の記事でまとめております。
疑問点がある方はぜひこちらを参照してください。

https://qiita.com/kenta-nishimoto-1111/items/86ba0156c71b91dbc999

https://qiita.com/kenta-nishimoto-1111/items/4760bc02a6dfa40db035

※なお、今回の記事ではEC2でサーバーはすでに作成済みの流れで進めていきます。



<!-- 各チャプター -->
# 手順１　EC2にSSHでログインする

<h4>①ダウンロードしたキーペアの権限を変更する</h4>

ます、EC2インスタンス作成の際に発行されるキーペアの権限を変更します。
EC2インスタンスの作成方法についてはこちらの記事を参考にしてください。
https://qiita.com/kenta-nishimoto-1111/items/4760bc02a6dfa40db035

```:ターミル
％ cd ~　
↪︎ ターミナルをスタート地点に戻す

％ mkdir ~/.ssh　　
↪︎ .sshというディレクトリを作成
# エラー『　mkdir: /Users/owner/.ssh: File exists　』と表示の場合、すでに存在します


％ mv Downloads/ファイル名.pem .ssh/
↪︎ mvコマンドで、移動させたい対象（ファイル名.pem）　→　.sshディレクトリに移動します。

％ cd .ssh/
↪︎ .sshというディレクトリへ移動

％ ls
↪︎ pemファイルが存在するか確認します

％ chmod 400 ダウンロードした鍵の名前.pem
↪︎　これで権限の変更が可能です！
```

<h4>②sshコマンドでログインします</h4>

カレントディレクトリが.ssh/であることを確認し、下記のコードを実装

```:ターミル
ssh -i プライベートキーの名前.pem ec2-user@パブリックIPv4アドレス
```

※パブリックIPv4アドレスはインスタンスの表示のページで確認ができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1623096/1fbffe52-5db4-cf13-7525-a1420e31005d.png)


コマンドを実装し、下記のように警告メッセージが表示された場合は”yes”を入力する

```:表示される警告メッセージ
The authenticity of host '54.12.3.45 (54.12.3.45)' can't be established.
ECDSA key fingerprint is SHA256:WyV3fw1iEiBKslM0/m95UCq75kDBULrKi8W71+Ay9Tk.
Are you sure you want to continue connecting (yes/no)? 
```


<h5>下記のように表示されていると完成です！</h5>


```:完成形
ssh -i プライベートキーの名前.pem ec2-user@パブリックIPv4アドレス
       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/

[ec2-user@ip-172-12-34-5 ~]$　ここにコマンドを入力していくことになります！
```

# 手順２　EC2の環境構築を行う

ログインが成功すると、EC2の環境構築を行います。
主に行う設定は以下になります！
①パッケージをアップデート
②パッケージのインストール
③Node.jsをインストールしよう
④yarnをインストールしよう
⑤rbenvとruby-buildをインストール
⑥Rubyをインストール
⑦MySQLをインストール

上記の７つを環境構築で行なっていきます！
それでは一つずつ実装手順を記述します

<h4>①パッケージをアップデート</h4>
まずはパッケージをアップデートします。
パッケージとはアプリケーションを動かすためのファイルの集合体のことを指します。
複数のファイルが1つの箱に入っているようなイメージです。

パッケージのバージョンを管理するにはyumコマンドを使います。
まずはyumコマンドでパッケージをアップデートしましょう。
Is this ok [y/d/N]: yと聞かれたらyと入力しenterキーを押します。

```:ターミナル
[ec2-user@ip-172-31-47-9 ~]$ sudo yum update
```
「完了しました！」と表示されればアップデートは完了です。


<h4>②パッケージのインストール</h4>
次に必要なパッケージをインストールしていきます。
Amazon LInuxは初期状態だと必要最低限のパッケージしか入っていません。
なのでよく利用するパッケージをインストールしていきます。

今回はRailsアプリが動くよう下記のパッケージをインストールします。
※横に長いのでそのままコピペしてください！

```:ターミナル
[ec2-user@ip-172-31-47-9 ~]$ sudo yum -y install gcc-c++ make patch git curl zlib-devel openssl-devel ImageMagick-devel readline-devel libcurl-devel libffi-devel libicu-devel libxml2-devel libxslt-devel
```


<h4>③Node.jsをインストールしよう</h4>
次にJavaScriptを実行できるよう環境を整えます。
まずはNode.jsをインストールします。

```:EC2ターミナル
[ec2-user@ip-172-31-47-9 ~]$ curl -sL https://rpm.nodesource.com/setup_14.x | sudo bash -
↪︎  AWSのリポジトリに追加
[ec2-user@ip-172-31-47-9 ~]$ sudo yum -y install nodejs
↪︎  インストール
```
コマンド実行後、「完了しました！」と表示されば無事インストールされています。



<h4>④yarnをインストールしよう</h4>
Rails6以降はyarnを使うので、yarnもインストールします。
ターミナルで下記のコマンドを実行します。

```:EC2ターミナル
[ec2-user@ip-172-31-47-9 ~]$ curl -sL https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo
↪︎  AWSのリポジトリに追加
[ec2-user@ip-172-31-47-9 ~]$ sudo yum -y install yarn
↪︎  インストール
```
コマンド実行後、「完了しました！」と表示されば無事インストールされています。


<h4>⑤rbenvとruby-buildをインストール</h4>
次はrubyのバージョン管理ツールであるrbenvをインストールします。
下記のコマンドを実行します。

```:EC2ターミナル
[ec2-user@ip-172-31-47-9 ~]$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
↪︎ レポジトリをクローンしてインストール

以下は.bash_profileの設定
[ec2-user@ip-172-31-47-9 ~]$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
[ec2-user@ip-172-31-47-9 ~]$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
[ec2-user@ip-172-31-47-9 ~]$ source .bash_profile
```

次はrubyをインストールするためのruby-buildをインストールします。

```:EC2ターミナル
[ec2-user@ip-172-31-47-9 ~]$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
```

これでrubyをインストールできるようになりました。



 
<h4>⑥Rubyをインストール</h4>
次はrubyをインストールします。
今回はバージョン2.6.5をインストールしますが、バージョンはご自身の環境に合わせてください。
下記のコマンドを実行します。

```:EC2ターミナル
[ec2-user@ip-172-31-47-9 ~]$ rbenv install 2.6.5

インストール中はInstalling ruby-2.6.5...と表示されます。
インストールには数分かかるので、このままインストールが完了するまで待ちましょう。
完了するとInstalled ruby-2.6.5 to /home/ec2-user/.rbenv/versions/2.6.5と表示されます。
```

次はインストールしたrubyを使用可能にするコマンドを実行します。

```:EC2ターミナル
[ec2-user@ip-172-31-47-9 ~]$ rbenv rehash
↪︎ インストールしたrubyを使用可能にする

[ec2-user@ip-172-31-47-9 ~]$ rbenv global 2.6.5
↪︎ このインスタンスで使用するバージョンの設定
```

実装後以下の方法でRubyのバージョンを確認し表示されていればOKです！

```:完成形の確認
[ec2-user@ip-172-31-47-9 ~]$ ruby -v
ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-linux]
```

<h4>⑦MySQLをインストール</h4>
次はデータベースを設定していきます。
今回はリレーショナルデータベースの一つであるMySqlを使います。

Amazon Linux 2 にはMySql派生として開発され、
MySqlとほぼ同様に扱えるMariaDBのライブラリがデフォルトで入っているので、こちらを使用します。

```:MariaDBのインストール
[ec2-user@ip-172-31-47-9 ~]$ sudo yum -y install mariadb-server mysql-devel
```
「完了しました！」と表示されればOKです。
問題なくインストールされているか確認のためデータベースの起動を行います。

```:データベースの起動
[ec2-user@ip-172-31-47-9 ~]$ sudo systemctl start mariadb
```

コマンドを入力しても何も出力されないので、下記のコマンドで状態を確認してみます。

```:データベースの状態の確認
[ec2-user@ip-172-31-47-9 ~]$ sudo systemctl status mariadb
● mariadb.service - MariaDB database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; vendor preset: disabled)
   Active: active (running) since 火 2021-05-25 01:22:41 UTC; 1min 53s ago
  Process: 22975 ExecStartPost=/usr/libexec/mariadb-wait-ready $MAINPID (code=exited, status=0/SUCCESS)
```

このようにactive (running)と表示されていれば問題なく起動できています。



# 終わりに／完成形
以上でEC2のログイン〜環境構築までの準備は完了です！
次回はデプロイ方法について記述させていただきます！