[Rails]AWS EC2インスタンスの環境構築

今回はAWS EC2インスタンスの中でアプリケーションを起動するための環境構築をしていきます。

#前提条件
自身のコンピュータとEC2インスタンスとの間でSSH接続をして、EC2インスタンスにログインできている。

#設定用のツールをインストール
最初にyumというコマンドを使ってこのサーバに元々あるプログラムをアップデートします。
こうしたプログラムをパッケージと呼びます。

##yumコマンド
Linuxにおけるソフトウェア管理の仕組みです。MacOSにとってのHomebrewと同じ役割を果たします。
yumコマンドを利用することで、yumの管理下にあるプログラムのバージョンを管理したり、一括でアップデートしたりできます。

##パッケージ
LinuxOS下における、ある役割/機能をもったプログラムの集合です。
ソフトウェアとも、ライブラリとも呼べます。
あくまでもLinuxOSでは、ある役割/機能をもったプログラムの集合のことをパッケージと呼ぶよ、ということです。

##パッケージのアップデート

本番環境内で実施していきます。

```
[ec2-user@ip-172-31-25-189 ~]$ sudo yum -y update
```

その他環境構築に必要なパッケージを諸々インストールします。

```
[ec2-user@ip-172-31-25-189 ~]$ sudo yum -y install git make gcc-c++ patch libyaml-devel libffi-devel libicu-devel zlib-devel readline-devel libxml2-devel libxslt-devel ImageMagick ImageMagick-devel openssl-devel libcurl libcurl-devel curl
```

-yコマンドは全ての問いにYesで自動的に答えるように設定するコマンドです。

#Node.jsをインストール
続いて、EC2上でJavaScriptを動かすためにNode.jsをインストールします。

```
[ec2-user@ip-172-31-25-189 ~]$ sudo curl -sL https://rpm.nodesource.com/setup_6.x | sudo bash -
[ec2-user@ip-172-31-25-189 ~]$ sudo yum -y install nodejs
```
##Node.js
サーバーサイドで動くJavaScriptのパッケージです。今後のデプロイに向けた作業の中で、CSSや画像を圧縮する際に活用されます。

#rbenvとruby-buildをインストール
Macの環境構築の際にも利用しましたが、改めて簡単に説明しておきます。
rbenvとruby-buildは、Rubyのバージョンを管理する際に組み合わせて使うツールになります。これらはRubyをインストールする前に、インストールする必要があります。
ruby-buildはrbenvのプラグインであり、ruby-buildによってRubyの様々なバージョン(2.0.0など)をインストールすることができます。
rbenvを使用することでrubyのバージョンを切り替えることできます。

```
#rbenvのインストール
[ec2-user@ip-172-31-25-189 ~]$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv 
#パスを通す
[ec2-user@ip-172-31-25-189 ~]$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile 
#rbenvを呼び出すための記述
[ec2-user@ip-172-31-25-189 ~]$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
#.bash_profileの読み込み
[ec2-user@ip-172-31-25-189 ~]$ source .bash_profile
#ruby-buildのインストール
[ec2-user@ip-172-31-25-189 ~]$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
#rehashを行う
[ec2-user@ip-172-31-25-189 ~]$ rbenv rehash
```
2つ目と3つ目のコマンドは、パスを通す際に必要なコマンドです。パスを通すとは、どのディレクトリからもアプリケーションを呼び出せる状態にするということです。
そして、4つ目のコマンドで、設定したパスを読み込んでいます。
最後のコマンドは、使用しているRubyのバージョンにおいて、gemのコマンドを使えるようにするために必要なコマンドです。

#Rubyをインストール
以下で実行するコマンド群は、インストールするRubyのバージョン、自身のアプリケーションで使っているRubyのバージョンによって適宜変更してください。

```
#Rubyの2.5.1のバージョンをインストール
[ec2-user@ip-172-31-25-189 ~]$ rbenv install 2.5.1
#EC2インスタンス内で使用するRubyのバージョンを決める
[ec2-user@ip-172-31-25-189 ~]$ rbenv global 2.5.1
#rehashを行う
[ec2-user@ip-172-31-25-189 ~]$ rbenv rehash
[ec2-user@ip-172-31-25-189 ~]$ ruby -v
```
#MySQLの設定
今回はRDBMS(リレーショナルデータベースマネジメントシステム)の中でも代表的なMySQLを使用していきます。
今回のシステム構成のイメージとしては以下の通り。
<img width="794" alt="スクリーンショット 2020-06-06 22.27.24.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606031/8503c72e-3067-a01e-766c-cd3bfc0c59db.png">


##MySQL
Oracle社が開発・提供をしているRDBMSです。データベースの作成、編集、削除などを行うことができます。オープンソースソフトウェアとして公開されており、誰でも無償で利用することができます。

##MySQLのインストール
Amazon Linuxを利用している場合、MySQLは yum コマンドからインストールすることができます。
今回はMySQLのバージョン5.6をインストールします。

```
[ec2-user@ip-172-31-25-189 ~]$ sudo yum -y install mysql56-server mysql56-devel mysql56
```

##MySQLの起動
MySQLを起動するために service コマンドを利用します。これは、Amazon LinuxやCentOSに含まれているもので、インストールしたソフトウェアの起動を一括して行えるツールです。

```
[ec2-user@ip-172-31-25-189 ~]$ sudo service mysqld start
```

mysqldのdはLinuxの用語で「サーバ」を意味する「デーモン(daemon)」の頭文字です。

以下で起動できているか確認できます。

```
[ec2-user@ip-172-31-25-189 ~]$ sudo service mysqld status
mysqld (pid  15692) is running...
```

##MySQLのrootパスワードの設定
yum でインストールしたMySQLには、デフォルトで root というユーザーでアクセス出来るようになっていますが、パスワードは設定されていません。

そこで、以下のコマンドでパスワードを設定しましょう。'設定したいパスワード'の部分については、例えばpassword0000という文字列を設定するとしたら、 'password0000'と記載しましょう。
０から始まるpasswordは読み込んでくれないケースが多いので、避けます。
（例えば、’0331higuchi’など）

```
[ec2-user@ip-172-31-25-189 ~]$ sudo /usr/libexec/mysql56/mysqladmin -u root password 'ここを設定したいパスワードに変更してからコマンドを実行してください'
```

##MySQLへの接続方法

```
[ec2-user@ip-172-31-25-189 ~]$ mysql -u root -p
```

上記のコマンドを入力後に先ほど設定したパスワードの入力が求められるので、入力すると接続ができます。

アプリ公開のためのWebサーバー、Applicationサーバーの設定は次回記事に記載します。